def parse(line): try: d = json.loads(line) except ValueError as e: raise error.InvalidMessage(str(e)) if 'action' not in d: raise error.InvalidMessage("action required") return Message(d['action'], d.get('payload'))
def drive_player(self, name, info): log.info('drive_player: %r %r', name, info) if name not in self.players: raise error.NoSuchPlayer(name) if 'action' not in info: raise error.InvalidMessage("action required") action = info['action'] if action not in actions.ALL: raise error.InvalidMessage("invalid drive action %s" % action) self.players[name].action = action self.players[name].response_time = info.get('response_time', 1.0)
def dispatch(self, msg): if self.name is None: # New player if msg.action != 'join': raise error.ActionForbidden(msg.action) if 'name' not in msg.payload: raise error.InvalidMessage("name required") self.name = msg.payload['name'] self.hub.add_player(self) else: # Registered player if msg.action == 'drive': self.hub.drive_player(self, msg.payload) else: raise error.ActionForbidden(msg.action)