:github_url: hide .. _class_ENetMultiplayerPeer: ENetMultiplayerPeer =================== **Наследует:** :ref:`MultiplayerPeer` **<** :ref:`PacketPeer` **<** :ref:`RefCounted` **<** :ref:`Object` Реализация MultiplayerPeer с использованием библиотеки `ENet `__. .. rst-class:: classref-introduction-group Описание ---------------- Реализация MultiplayerPeer, которая должна быть передана :ref:`MultiplayerAPI.multiplayer_peer` после инициализации в качестве клиента, сервера или сетки. События затем можно обрабатывать, подключаясь к сигналам :ref:`MultiplayerAPI`. См. :ref:`ENetConnection` для получения дополнительной информации о библиотеке-оболочке ENet. \ **Примечание:** ENet использует только UDP, а не TCP. При переадресации порта сервера для того, чтобы сделать ваш сервер доступным в общедоступном Интернете, вам нужно переадресовать только порт сервера в UDP. Вы можете использовать класс :ref:`UPNP`, чтобы попытаться автоматически переадресовать порт сервера при запуске сервера. .. rst-class:: classref-introduction-group Обучающие материалы -------------------------------------- - :doc:`Высокоуровневый мультиплеер <../tutorials/networking/high_level_multiplayer>` - `Документация API на сайте ENet `__ .. rst-class:: classref-reftable-group Свойства ---------------- .. table:: :widths: auto +---------------------------------------------+------------------------------------------------------+ | :ref:`ENetConnection` | :ref:`host` | +---------------------------------------------+------------------------------------------------------+ .. rst-class:: classref-reftable-group Методы ------------ .. table:: :widths: auto +---------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | :ref:`Error` | :ref:`add_mesh_peer`\ (\ peer_id\: :ref:`int`, host\: :ref:`ENetConnection`\ ) | +---------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | :ref:`Error` | :ref:`create_client`\ (\ address\: :ref:`String`, port\: :ref:`int`, channel_count\: :ref:`int` = 0, in_bandwidth\: :ref:`int` = 0, out_bandwidth\: :ref:`int` = 0, local_port\: :ref:`int` = 0\ ) | +---------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | :ref:`Error` | :ref:`create_mesh`\ (\ unique_id\: :ref:`int`\ ) | +---------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | :ref:`Error` | :ref:`create_server`\ (\ port\: :ref:`int`, max_clients\: :ref:`int` = 32, max_channels\: :ref:`int` = 0, in_bandwidth\: :ref:`int` = 0, out_bandwidth\: :ref:`int` = 0\ ) | +---------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | :ref:`ENetPacketPeer` | :ref:`get_peer`\ (\ id\: :ref:`int`\ ) |const| | +---------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | |void| | :ref:`set_bind_ip`\ (\ ip\: :ref:`String`\ ) | +---------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ .. rst-class:: classref-section-separator ---- .. rst-class:: classref-descriptions-group Описания свойств -------------------------------- .. _class_ENetMultiplayerPeer_property_host: .. rst-class:: classref-property :ref:`ENetConnection` **host** :ref:`🔗` .. rst-class:: classref-property-setget - :ref:`ENetConnection` **get_host**\ (\ ) Базовый :ref:`ENetConnection` создается после :ref:`create_client()` и :ref:`create_server()`. .. rst-class:: classref-section-separator ---- .. rst-class:: classref-descriptions-group Описания метода ------------------------------ .. _class_ENetMultiplayerPeer_method_add_mesh_peer: .. rst-class:: classref-method :ref:`Error` **add_mesh_peer**\ (\ peer_id\: :ref:`int`, host\: :ref:`ENetConnection`\ ) :ref:`🔗` Добавьте новый удаленный узел с указанным ``peer_id``, подключенный к указанному ``host``. \ **Примечание:** ``host`` должен иметь ровно одного узла в состоянии :ref:`ENetPacketPeer.STATE_CONNECTED`. .. rst-class:: classref-item-separator ---- .. _class_ENetMultiplayerPeer_method_create_client: .. rst-class:: classref-method :ref:`Error` **create_client**\ (\ address\: :ref:`String`, port\: :ref:`int`, channel_count\: :ref:`int` = 0, in_bandwidth\: :ref:`int` = 0, out_bandwidth\: :ref:`int` = 0, local_port\: :ref:`int` = 0\ ) :ref:`🔗` Создайте клиента, который подключается к серверу по адресу ``address``, используя указанный ``port``. Указанный адрес должен быть либо полностью определенным доменным именем (например, ``"www.example.com"``), либо IP-адресом в формате IPv4 или IPv6 (например, ``"192.168.1.1"``). ``port`` — это порт, который прослушивает сервер. Параметр ``channel_count`` можно использовать для указания количества каналов ENet, выделенных для соединения. Параметры ``in_bandwidth`` и ``out_bandwidth`` можно использовать для ограничения входящей и исходящей пропускной способности указанным количеством байт в секунду. Значение по умолчанию 0 означает неограниченную пропускную способность. Обратите внимание, что ENet будет стратегически отбрасывать пакеты на определенных сторонах соединения между одноранговыми узлами, чтобы гарантировать, что пропускная способность однорангового узла не будет перегружена. Параметры пропускной способности также определяют размер окна соединения, что ограничивает количество надежных пакетов, которые могут передаваться в любой момент времени. Возвращает :ref:`@GlobalScope.OK`, если клиент был создан, :ref:`@GlobalScope.ERR_ALREADY_IN_USE`, если этот экземпляр ENetMultiplayerPeer уже имеет открытое соединение (в этом случае вам нужно сначала вызвать :ref:`MultiplayerPeer.close()`) или :ref:`@GlobalScope.ERR_CANT_CREATE`, если клиент не может быть создан. Если указан ``local_port``, клиент также будет прослушивать указанный порт; это полезно для некоторых методов обхода NAT. .. rst-class:: classref-item-separator ---- .. _class_ENetMultiplayerPeer_method_create_mesh: .. rst-class:: classref-method :ref:`Error` **create_mesh**\ (\ unique_id\: :ref:`int`\ ) :ref:`🔗` Инициализируйте этот :ref:`MultiplayerPeer` в режиме сетки. Предоставленный ``unique_id`` будет использоваться как уникальный идентификатор локальной одноранговой сети после назначения в качестве :ref:`MultiplayerAPI.multiplayer_peer`. В конфигурации сетки вам нужно будет вручную настроить каждый новый одноранговый узел с помощью :ref:`ENetConnection` перед вызовом :ref:`add_mesh_peer()`. Хотя этот метод более продвинут, он позволяет лучше контролировать процесс подключения (например, при работе с NAT punch-through) и лучше распределять сетевую нагрузку (которая в противном случае была бы более обременительной для сервера). .. rst-class:: classref-item-separator ---- .. _class_ENetMultiplayerPeer_method_create_server: .. rst-class:: classref-method :ref:`Error` **create_server**\ (\ port\: :ref:`int`, max_clients\: :ref:`int` = 32, max_channels\: :ref:`int` = 0, in_bandwidth\: :ref:`int` = 0, out_bandwidth\: :ref:`int` = 0\ ) :ref:`🔗` Создайте сервер, который прослушивает соединения через ``port``. Порт должен быть доступным, неиспользуемым портом в диапазоне от 0 до 65535. Обратите внимание, что порты ниже 1024 являются привилегированными и могут потребовать повышенных прав в зависимости от платформы. Чтобы изменить интерфейс, который прослушивает сервер, используйте :ref:`set_bind_ip()`. IP по умолчанию — это подстановочный знак ``"*"``, который прослушивает все доступные интерфейсы. ``max_clients`` — это максимальное количество клиентов, которые разрешены одновременно, можно использовать любое число до 4095, хотя достижимое количество одновременных клиентов может быть намного меньше и зависит от приложения. Дополнительные сведения о параметрах пропускной способности см. в :ref:`create_client()`. Возвращает :ref:`@GlobalScope.OK`, если сервер был создан, :ref:`@GlobalScope.ERR_ALREADY_IN_USE`, если у этого экземпляра ENetMultiplayerPeer уже есть открытое соединение (в этом случае сначала необходимо вызвать :ref:`MultiplayerPeer.close()`), или :ref:`@GlobalScope.ERR_CANT_CREATE`, если сервер не удалось создать. .. rst-class:: classref-item-separator ---- .. _class_ENetMultiplayerPeer_method_get_peer: .. rst-class:: classref-method :ref:`ENetPacketPeer` **get_peer**\ (\ id\: :ref:`int`\ ) |const| :ref:`🔗` Возвращает :ref:`ENetPacketPeer`, связанный с указанным ``id``. .. rst-class:: classref-item-separator ---- .. _class_ENetMultiplayerPeer_method_set_bind_ip: .. rst-class:: classref-method |void| **set_bind_ip**\ (\ ip\: :ref:`String`\ ) :ref:`🔗` IP, используемый при создании сервера. По умолчанию он установлен на подстановочный знак ``"*"``, который привязывается ко всем доступным интерфейсам. Указанный IP должен быть в формате адреса IPv4 или IPv6, например: ``"192.168.1.1"``. .. |virtual| replace:: :abbr:`virtual (Этот метод обычно должен быть переопределен пользователем, чтобы иметь какой-либо эффект.)` .. |required| replace:: :abbr:`required (This method is required to be overridden when extending its base class.)` .. |const| replace:: :abbr:`const (Этот метод не имеет побочных эффектов. Он не изменяет ни одну из переменных-членов экземпляра.)` .. |vararg| replace:: :abbr:`vararg (Этот метод принимает любое количество аргументов после описанных здесь.)` .. |constructor| replace:: :abbr:`constructor (Этот метод используется для создания типа.)` .. |static| replace:: :abbr:`static (Этот метод не нуждается в вызове экземпляра, поэтому его можно вызвать напрямую, используя имя класса.)` .. |operator| replace:: :abbr:`operator (Этот метод описывает допустимый оператор для использования с этим типом в качестве левого операнда.)` .. |bitfield| replace:: :abbr:`BitField (Это значение является целым числом, составленным как битовая маска следующих флагов.)` .. |void| replace:: :abbr:`void (Нет возвращаемого значения.)`