def remove_player(self, clientid, means): toremove = int(clientid) if toremove in self.__players: #close connection + stop thread of client to remove addr, connection, stopper, alias = self.__players[toremove] if means == 'KICK' or means == 'SERVER_LEFT': connection.sendMessage(means+' '+clientid) connection.mySocket.close() stopper.set() self.__playercount-=1 del self.__players[toremove] for i in range(len(self.__plist)): if self.__plist[i] == toremove: self.__plist[i] = None self.__pready[i] = None break #inform other clients that player has been removed if means == 'LEFT': self.__sendmsg_toall('LEFT '+clientid) elif means == 'KICK': self.__sendmsg_toall('KICK '+clientid) self.__update_players() else: print 'player to remove not found'
def remove_player(self, clientid, means): toremove = int(clientid) if toremove in self.__players: #close connection + stop thread of client to remove addr, connection, stopper, alias = self.__players[toremove] if means == 'KICK' or means == 'SERVER_LEFT': connection.sendMessage(means + ' ' + clientid) connection.mySocket.close() stopper.set() self.__playercount -= 1 del self.__players[toremove] for i in range(len(self.__plist)): if self.__plist[i] == toremove: self.__plist[i] = None self.__pready[i] = None break #inform other clients that player has been removed if means == 'LEFT': self.__sendmsg_toall('LEFT ' + clientid) elif means == 'KICK': self.__sendmsg_toall('KICK ' + clientid) self.__update_players() else: print 'player to remove not found'
def send_panels(self, panels): plist = {self.id: panels[0]} for i, cid in enumerate(self.__players): addr, connection, stopper, alias = self.__players[cid] plist[cid] = panels[i+1] connection.sendMessage('GAME_UPDATE PANELS '+str(plist[cid])[1:-1].replace(' ','')) return plist
def send_panels(self, panels): plist = {self.id: panels[0]} for i, cid in enumerate(self.__players): addr, connection, stopper, alias = self.__players[cid] plist[cid] = panels[i + 1] connection.sendMessage('GAME_UPDATE PANELS ' + str(plist[cid])[1:-1].replace(' ', '')) return plist
def executeHandler(self): print("TODO: Execute") cmd = self.COMMAND.get() self.COMMAND.set("") cmd = cmd.upper() _, response = conn.sendMessage(cmd) if cmd.upper() == "SCAN": done = False overflow = False dOverflow = 0 while not done: vectors = response.split(";") for vector in vectors: args = vector.split(",") if len(args) == 2: if overflow: h, angle = dOverflow, args[0] overflow = False dOverflow = 0 else: h, angle = args[0], args[1] h, angle = float(h), float(angle) if h > 0: A = ((90 + self.FACING_ANGLE) % 360 ) - angle if A < 0: A = 360 + A x, y = (cos(radians(A)) * h) + self.X_OFFSET, (sin(radians(A)) * h) + self.Y_OFFSET print x,y,h,angle App.plotHandler([x, y]) else: overflow = True dOverflow = args[0] if angle == 180.0: done = True else: _, response = conn.sendMessage("") elif "MOVE" in cmd: print "MOVE" args = cmd.split(" ") print args n = int(args[2]) direction = args[1] if direction == "RIGHT": n = n % 360 n = 360 - n self.FACING_ANGLE = (self.FACING_ANGLE + n) % 360 elif direction == "LEFT": n = n % 360 self.FACING_ANGLE = (self.FACING_ANGLE + n) % 360 elif direction == "FORWARD": self.X_OFFSET = (cos(radians(self.FACING_ANGLE)) * n * self.LENGTH_PER_MOVEMENT) + self.X_OFFSET self.Y_OFFSET = (sin(radians(self.FACING_ANGLE)) * n * self.LENGTH_PER_MOVEMENT) + self.Y_OFFSET elif direction == "BACKWARDS": A = ((180 + self.FACING_ANGLE) % 360) self.X_OFFSET = (cos(radians(A)) * n * self.LENGTH_PER_MOVEMENT) + self.X_OFFSET self.Y_OFFSET = (sin(radians(A)) * n * self.LENGTH_PER_MOVEMENT) + self.Y_OFFSET
def __sendmsg_toall(self, msg): for cid in self.__players: addr, connection, stopper, alias = self.__players[cid] connection.sendMessage(msg)
def disconnectHandler(self): global closeConnection print(conn.sendMessage("CLOSE_CONNECTION")) closeConnection = True