Esempio n. 1
0
 def process_cmd(self, client, module, cmd, args):
     module_instances = get_module_instances()
     if module in module_instances:
         try:
             module_instances[module].process_cmd(client, cmd, args)
             return
         except (Exception, RuntimeError) as e:
             if isinstance(e, UnknownCommandModuleError):
                 client.send("core error-unknown-cmd " + module\
                     + " :" + cmd)
             elif isinstance(e, MissingArgumentsModuleError):
                 client.send("core error-missing-arguments " + \
                     module + " " + cmd)
             elif isinstance(e, InvalidArgumentModuleError):
                 client.send("core error-invalid-argument " + \
                     module\
                     + " " + cmd + " " + str(e.argument) + " :" + \
                     e.args[0])
             else:
                 exc_type, exc_value, exc_traceback = sys.exc_info()
                 lines = traceback.format_exception(exc_type,
                     exc_value, exc_traceback)
                 logging.error('!! Exception when parsing client ' \
                     + 'command "' + cmd + '" in module "' + \
                     module + '", this should NOT happen:')
                 logging.error(''.join('!! ' + line for line in \
                     lines))
                 logging.error("!! Please file a bug report.")
                 client.send("core error-unknown-error " + module\
                     + " " + cmd)
             return
     # module not found:
     client.send("core error-invalid-module :" + module)
     return
Esempio n. 2
0
    def __init__(self, game_path, port, version_str):
        super(OnlineGame, self).__init__(game_path)

        self.connections = []
        self.port = port
        self.version_str = version_str
        self.required_client_version = 1

        module_instances = get_module_instances()
        logging.info("Starting game with " + str(len(module_instances))\
            + " module instances available")
        for module in module_instances.values():
            if isinstance(module, OnlineGameBaseModule):
                module.set_online_game_instance(self)
            else:
                module.set_game_instance(self)
Esempio n. 3
0
    def connection_has_data(self, connection, data):
        data = data.strip()
        if len(data) == 0:
            return
        module = data.split(" ", 1)[0]
        data = data[len(module)+1:]

        cmd = data.split(" ", 1)[0]
        args = self.split_args(data[len(cmd)+1:])
        if len(cmd) == 0:
            connection.send("core error-empty-cmd")
            return

        if not module == "core":
            module_instances = get_module_instances()
            # forward to appropriate module:
            if module in module_instances:
                if not connection.connected_as_client:
                    if not isinstance(module_instances[module], \
                            OnlineGameBaseModule):
                        connection.send("core error-module-unavailable " +\
                            module)
                        return
                    self.process_cmd(connection, module, cmd, args)
                    return
                self.process_cmd(connection.client, module, cmd, args)
                return
            # module not found:
            connection.send("core error-invalid-module :" + module)
            return
        else:
            if cmd == "quit":
                connection.send("core confirm-quit :Bye!")
                connection.close()
                self.connections.remove(connection)
            elif cmd == "ping":
                if len(args) == 0:
                    connection.send("core error-missing-arguments core ping")
                    return
                if len(args[0]) > 64:
                    connection.send("core error-invalid-argument core " +\
                        "ping 1 :excessive length")
                    return
                connection.send("core pong :" + args[0]) 
            else:
                connection.send("core error-unknown-cmd core :" + cmd)