X-Git-Url: https://plomlompom.com/repos/?a=blobdiff_plain;f=server_%2Fio.py;h=501399f7dda4ea7920c3302ae26d254829f6f47a;hb=52463b31fbb7f121a52f72e863a779560a6de531;hp=d2d67e98969d92fde0b6eb7cc842aa9df5410f4d;hpb=b3f0ccf42cae443312ec36309f25a8621ef3e9a8;p=plomrogue2-experiments diff --git a/server_/io.py b/server_/io.py index d2d67e9..501399f 100644 --- a/server_/io.py +++ b/server_/io.py @@ -4,6 +4,7 @@ import queue import sys sys.path.append('../') import parser +from server_.game_error import GameError # Avoid "Address already in use" errors. @@ -159,21 +160,21 @@ class GameIO(): print(msg) try: - command = self.parser.parse(input_) + command, args = self.parser.parse(input_) if command is None: answer(connection_id, 'UNHANDLED_INPUT') else: if 'connection_id' in list(signature(command).parameters): - command(connection_id=connection_id) + command(*args, connection_id=connection_id) else: - command() - if store: + command(*args) + if store and not hasattr(command, 'dont_save'): with open(self.game_file_name, 'a') as f: f.write(input_ + '\n') except parser.ArgError as e: - answer(connection_id, 'ARGUMENT_ERROR ' + self.quote(str(e))) - except server_.game.GameError as e: - answer(connection_id, 'GAME_ERROR ' + self.quote(str(e))) + answer(connection_id, 'ARGUMENT_ERROR ' + quote(str(e))) + except GameError as e: + answer(connection_id, 'GAME_ERROR ' + quote(str(e))) def send(self, msg, connection_id=None): """Send message msg to server's client(s) via self.queues_out. @@ -189,14 +190,19 @@ class GameIO(): for connection_id in self.queues_out: self.queues_out[connection_id].put(msg) - def quote(self, string): - """Quote & escape string so client interprets it as single token.""" - # FIXME: Don't do this as a method, makes no sense. - quoted = [] - quoted += ['"'] - for c in string: - if c in {'"', '\\'}: - quoted += ['\\'] - quoted += [c] - quoted += ['"'] - return ''.join(quoted) + +def quote(string): + """Quote & escape string so client interprets it as single token.""" + quoted = [] + quoted += ['"'] + for c in string: + if c in {'"', '\\'}: + quoted += ['\\'] + quoted += [c] + quoted += ['"'] + return ''.join(quoted) + + +def stringify_yx(tuple_): + """Transform tuple (y,x) into string 'Y:'+str(y)+',X:'+str(x).""" + return 'Y:' + str(tuple_[0]) + ',X:' + str(tuple_[1])