def add_player(self, connection, coordinates, name): """ Adds a player to the server. :param connection: The connection of the player :type connection: Connection :param coordinates: The coordinates the player is located at in the world. :type coordinates: list :param name: The name of the player. :type name: str :return: The ID of the newly-created player. :rtype: int """ if len(self._players) < self._max_players or self.is_op(name): player_id = self._player_id if self._player_id in self._players: for i in range(256): if i not in self._players: self._player_id = i player_id = i break else: raise ValueError("No more ID's left") else: self._player_id += 1 player = Player(player_id, connection, coordinates, name, 0x64 if self.is_op(name) else 0x00) with self._players_lock: self._players[player_id] = player self._players_by_address[connection.get_address()] = player return player_id else: logging.warning("Disconnecting player %s because no free slots left." % name) connection.send(DisconnectPlayerPacket.make({"reason": "Server full"}))
def add_player(self, connection, coordinates, name): """ :type connection: Connection """ if len(self._players) < self._max_players or self.is_op(name): player_id = self._player_id if self._player_id in self._players: for i in range(256): if i not in self._players: self._player_id = i player_id = i break else: raise ValueError("No more ID's left") else: self._player_id += 1 player = Player(player_id, connection, coordinates, name, 0x64 if self.is_op(name) else 0x00) logging.info("ADD PLAYER: acquiring player lock") with self._players_lock: logging.info("ADD PLAYER: player lock acquired") self._players[player_id] = player self._players_by_address[connection.get_address()] = player logging.info("ADD PLAYER: player lock released") return player_id else: logging.warning("Disconnecting player %s because no free slots left." % name) connection.send(DisconnectPlayerPacket.make({"reason": "Server full"}))
def kick_player(self, player_id, reason): player = self._players[player_id] logging.info("Kicking player %s for %s" % (player.name, reason)) player.connection.send(DisconnectPlayerPacket.make({"reason": reason})) logging.info("KICK PLAYER: acquiring player lock") with self._players_lock: logging.info("KICK PLAYER: player lock acquired") del self._players[player_id] logging.info("KICK PLAYER: player lock released") self.broadcast(MessagePacket.make({"player_id": 0, "message": "Player %s kicked, %s" % (player.name, reason)})) self._disconnect(player.connection)
def kick_player(self, player_id, reason): """ Kicks the player given an ID. :param player_id: The ID of the target player. :type player_id: int :param reason: The reason to be reported to the player. :type reason: str """ player = self._players[player_id] logging.info("Kicking player %s for %s" % (player.name, reason)) player.connection.send(DisconnectPlayerPacket.make({"reason": reason})) with self._players_lock: del self._players[player_id] self.broadcast(MessagePacket.make({"player_id": 0, "message": "Player %s kicked, %s" % (player.name, reason)})) self._disconnect(player.connection)
def kick_player(self, player_id, reason): """ Kicks the player given an ID. :param player_id: The ID of the target player. :type player_id: int :param reason: The reason to be reported to the player. :type reason: str """ player = self._players[player_id] logging.info("Kicking player %s for %s" % (player.name, reason)) player.connection.send(DisconnectPlayerPacket.make({"reason": reason})) with self._players_lock: del self._players[player_id] self.broadcast( MessagePacket.make({ "player_id": 0, "message": "Player %s kicked, %s" % (player.name, reason) })) self._disconnect(player.connection)
def add_player(self, connection, coordinates, name): """ Adds a player to the server. :param connection: The connection of the player :type connection: Connection :param coordinates: The coordinates the player is located at in the world. :type coordinates: list :param name: The name of the player. :type name: str :return: The ID of the newly-created player. :rtype: int """ if len(self._players) < self._max_players or self.is_op(name): player_id = self._player_id if self._player_id in self._players: for i in range(256): if i not in self._players: self._player_id = i player_id = i break else: raise ValueError("No more ID's left") else: self._player_id += 1 player = Player(player_id, connection, coordinates, name, 0x64 if self.is_op(name) else 0x00) with self._players_lock: self._players[player_id] = player self._players_by_address[connection.get_address()] = player return player_id else: logging.warning( "Disconnecting player %s because no free slots left." % name) connection.send( DisconnectPlayerPacket.make({"reason": "Server full"}))