Beispiel #1
0
    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"}))
Beispiel #2
0
    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"}))
Beispiel #3
0
    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)
Beispiel #4
0
    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)
Beispiel #5
0
    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)
Beispiel #6
0
    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"}))