def parse_gamestate(self): ack=huffman.readlong() while True: cmd = huffman.readbyte() if cmd == SVC_EOF: break elif cmd == SVC_CONFIGSTRING: self.parse_configstring() elif cmd == SVC_BASELINE: self.parse_baseline() self.gamestate.clientNum = huffman.readlong() self.gamestate.checksumFeed = huffman.readlong() return self.gamestate
def parse_snapshot(self): new_snap = Snapshot() new_snap.serverTime=huffman.readlong() #delta_num = huffman.readbyte() #new_snap.snapFlags = huffman.readbyte() #new_snap.areamaskLen = huffman.readbyte() #for i in range(new_snap.areamaskLen+1): # new_snap.areamask.append(huffman.readbyte()) #ps = self.parse_playerstate() #new_snap.playerstate=ps return new_snap
def parse_playerstate(self): last_field=huffman.readbyte() player=PlayerState() netf=PlayerStateNETF(player) playerStateFieldsNum = len( netf.bits ) if last_field > playerStateFieldsNum : return None for i in range( 0, last_field) : if huffman.readbits( 1 ) : if netf.bits[ i ] == 0 : if huffman.readbits( 1 ) == 0 : netf.fields[ i ] = huffman.readbits( FLOAT_INT_BITS ) - FLOAT_INT_BIAS else : netf.fields[ i ] = huffman.readfloat() else : bits = netf.bits[ i ] netf.fields[ i ] = huffman.readbits( bits ) netf.update() if huffman.readbits( 1 ) : if huffman.readbits( 1 ) : c = huffman.readshort() for i in range( MAX_STATS ) : if c & ( 1 << i ) : player.stats[ i ] = huffman.readshort() if huffman.readbits( 1 ) : c = huffman.readshort() for i in range( MAX_PERSISTANT ) : if c & ( 1 << i ) : player.persistant[ i ] = huffman.readshort() if huffman.readbits( 1 ) : c = huffman.readshort() for i in range( MAX_WEAPONS ) : if c & ( 1 << i ) : player.ammo[ i ] = huffman.readshort() if huffman.readbits( 1 ) : c = huffman.readshort() for i in range( MAX_POWERUPS ) : if c & ( 1 << i ) : player.powerups[ i ] = huffman.readlong() return player
def parse_servercommand(self): seq = huffman.readlong() string = huffman.readstring() sc=ServerCommand(seq, string) #if sc.cmd == "scores_duel": # sc = self.parse_duel_scores(sc) # self.scores.append(sc.scores) #elif sc.cmd == "scores_ctf": # sc = self.parse_ctf_scores(sc) # self.scores.append(sc.scores) #elif sc.cmd == "scores": # sc = self.parse_old_scores(sc) # self.scores.append(sc.scores) if sc.cmd == 'cs' or sc.cmd == 'bcs': self.update_configstring(sc) return sc
def __iter__(self): while True: seq=huffman.readrawlong() length=huffman.readrawlong() if seq == -1 or length == -1: break huffman.fill(length) ack = huffman.readlong() cmd = huffman.readbyte() r = None if cmd == SVC_GAMESTATE: r = self.parse_gamestate() elif cmd == SVC_SERVERCOMMAND: r = self.parse_servercommand() elif cmd == SVC_SNAPSHOT: r = self.parse_snapshot() if len(self.snapshots) and r.serverTime == self.snapshots[-1].serverTime: raise StopIteration self.snapshots.append(r) self.packets.append(r) if r: yield r