def on_receive_event(self, channel, data): if len(data) <= 0: pass try: if channel == 0: try: cds = CubeDataStream(data) message_type = cds.getint() cn = cds.getint() self.getclient(cn).state.position = data except: traceback.print_exc() elif channel == 1: messages = sauerbraten_stream_spec.read(data, {'aiclientnum': -1}) for message_type, message in messages: if (not self.isconnected) and message_type != "N_CONNECT": self.peer.disconnect(disconnect_types.DISC_TAGT) #@UndefinedVariable return elif self.isconnected and message_type == "N_CONNECT": self.peer.disconnect(disconnect_types.DISC_TAGT) #@UndefinedVariable return elif message_type == "N_CONNECT": self.isconnected = True self.name = filtertext(message['name'], False, MAXNAMELEN) self.pwdhash = message['pwdhash'] self.playermodel = message['playermodel'] self.connected.emit(self) elif message_type == "N_SWITCHNAME": name = filtertext(message['name'], False, MAXNAMELEN) if len(name) <= 0: name = "unnamed" if name != self.name: self.name = name swh.put_switchname(self.state.messages, self.name) elif message_type == "N_SWITCHTEAM": team_name = filtertext(message['team'], False, MAXTEAMLEN) if self.team is not None and team_name != self.team.name: self.trysetteam.emit(self, self.cn, self.team, team_name) elif message_type == "N_SPECTATOR": self.setspectator.emit(self, message['target_cn'], bool(message['value'])) elif message_type == "N_PING": with self.sendbuffer(1, False) as cds: swh.put_pong(cds, message['cmillis']) elif message_type == "N_CLIENTPING": self.ping_buffer.add(message['ping']) self.ping.emit(self) swh.put_clientping(self.state.messages, message['ping']) elif message_type == "N_MAPVOTE": self.mapvote.emit(self, message['map_name'], message['mode_num']) elif message_type == "N_MAPCHANGE": self.mapvote.emit(self, message['map_name'], message['mode_num']) elif message_type == "N_MAPCRC": self.mapcrc.emit(self, message['mapcrc']) elif message_type == "N_ITEMLIST": self.itemlist.emit(self, message['items']) elif message_type == "N_BASES": self.baselist.emit(self, message['bases']) elif message_type == "N_INITFLAGS": self.flaglist.emit(self, message['flags']) elif message_type == "N_SPAWN": client = self.getclient(message['aiclientnum']) client.state.state = client_states.CS_ALIVE client.lifesequence = message['lifesequence'] client.gunselect = message['gunselect'] swh.put_spawn(client.state.messages, self) elif message_type == "N_TRYSPAWN": self.tryspawn.emit(self.getclient(message['aiclientnum'])) elif message_type == "N_SHOOT": message['client'] = self.getclient(message['aiclientnum']) del message['aiclientnum'] self.shoot.emit(**message) elif message_type == "N_EXPLODE": message['client'] = self.getclient(message['aiclientnum']) del message['aiclientnum'] self.explode.emit(**message) elif message_type == "N_SUICIDE": self.suicide.emit(self.getclient(message['aiclientnum'])) elif message_type == "N_JUMPPAD": cn = message['clientnum'] self.jumppad.emit(self.getclient(cn), message['jumppad']) elif message_type == "N_TELEPORT": cn = message['clientnum'] self.teleport.emit(self.getclient(cn), message['teleport'], message['teledest']) elif message_type == "N_GUNSELECT": mcds = self.getclient(message['aiclientnum']).state.messages swh.put_gunselect(mcds, message['gunselect']) self.state.gunselect = message['gunselect'] elif message_type == "N_SOUND": mcds = self.getclient(message['aiclientnum']).state.messages swh.put_gunselect(mcds, message['sound']) elif message_type == "N_ITEMPICKUP": self.pickup.emit(self.getclient(message['aiclientnum']), message['item_index']) elif message_type == "N_REPAMMO": self.replenishammo.emit(self.getclient(message['aiclientnum'])) elif message_type == "N_TAKEFLAG": self.takeflag.emit(self.getclient(message['aiclientnum']), message['flag'], message['version']) elif message_type == "N_TRYDROPFLAG": self.trydropflag.emit(self.getclient(message['aiclientnum'])) elif message_type == "N_PAUSEGAME": self.trypausegame.emit(self, message['value']) else: print message_type, message else: #channel == 2: pass except InvalidClientNumberReference: return except: traceback.print_exc()