diff --git a/ygo/parsers/login_parser.py b/ygo/parsers/login_parser.py index d766cae..1c09467 100644 --- a/ygo/parsers/login_parser.py +++ b/ygo/parsers/login_parser.py @@ -32,6 +32,12 @@ def handle_nickname(self, caller): caller.connection.notify("Please enter a nickname. Your nickname is what you will be known by while playing.") caller.connection.login_state = ("new", "Enter desired nickname:") return self.prompt(caller) + + # here we are checking for special commands + # that can only be executed from localhost + if caller.connection.transport.getPeer().host == "127.0.0.1": + if globals.server.handle_localhost_commands(caller): + return nickname = caller.text.capitalize() account = self.find_account(caller.connection.session, nickname) if not account: diff --git a/ygo/server.py b/ygo/server.py index 79ff2a3..c14e2b6 100644 --- a/ygo/server.py +++ b/ygo/server.py @@ -146,6 +146,23 @@ def reboot(self): pl.notify(pl._("Rebooting.")) reactor.callLater(0.2, reactor.stop) + def handle_localhost_commands(self, caller): + # shutdown + if caller.text == 'shutdown': + globals.rebooting = not globals.rebooting + if globals.rebooting: + for pl in self.get_all_players(): + if pl.is_admin: + pl.notify("Reboot started.") + caller.connection.notify("Reboot started.") + self.check_reboot() + else: + for pl in self.get_all_players(): + if pl.is_admin: + pl.notify("Reboot canceled.") + caller.connection.notify("Reboot canceled.") + return True + @property def all_cards(self): return globals.language_handler.all_primary_cards