def update(self, timeDelta): self.timePassed += timeDelta if self.state == self.STATE_DISCONNECTED: print "NM: ERROR: No connection to Server. need to call start()." if self.state == self.STATE_CON_REQUEST: msg = cli_recv(self.sock) if msg is None: if self.timePassed > self.REQ_TIMEOUT_MS: if self.conn_retries == 0: raise Exception('CRITICAL: Server not responding.') print "NM: retrying connection." cli_connect_req(self.sock, self.srvAddr) self.timePassed = 0 self.conn_retries -= 1 elif msg['type'] == MSGT_CONNECTACPT: self.timePassed = 0 self.state = self.STATE_CONNECTED connectedEvent = EventClassNetwork( EventClassNetwork.TYPE_CONNECTED, None ) self.eMngr.publishEvent(connectedEvent) else: print "NM: ERROR: unexpected message." elif self.state == self.STATE_CONNECTED: msg = cli_recv(self.sock) if msg is None: self.timePassed += timeDelta elif msg['type'] == MSGT_GAMESTATE: # TODO: umpack world state and events if msg['id'] > self.msgCounter: # Not the message we were expecting # TODO: use logging print "NM: WANING: package loss: %s" % (msg['id'] - self.msgCounter) # update message counter self.msgCounter = msg['id'] + 1 self.timePassed = 0 print msg
def start(self, srvHost, srvPort): self.srvAddr = (srvAddr, srvPort) cli_connect_req(self.sock, self.srvAddr) self.msgCounter = 1 self.state = self.STATE_CON_REQUEST