Пример #1
0
 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()