def datagramReceived(self, data, host):
     p = BSReader(data)
     if p.read_char(6) != [0, 1, -1, -1, 104, 0]:
         self.d.errback(ValueError('Invalid packet received.'))
         return
     v = p.read_char()
     if v == -10:
         self.n_players = len(data) - p.position
     elif v == -11:
         f = Player(self.server)
         f.client_num, f.ping = p.read_int(2)
         f.name, f.team = p.read_string(2)
         f.frags, f.score, f.deaths, f.tks, f.accuracy = p.read_int(5)
         f.health, f.armor, f.weapon, f.priv, f.state = p.read_int(5)
         f._ip = p.read_uchar(3)
         self.server.players.append(f)
     if len(self.server.players) == self.n_players:
         self.d.callback(self.server.players)