reckfellENGINE

ENetConnection

Класс-оболочка для ENetHost(http://enet.bespin.org/group__host.html).

На этой странице
class ENetConnectionReckfellSharpНаследует RefCounted

Класс-оболочка для ENetHost(http://enet.bespin.org/group__host.html).

Целью ENet является обеспечение относительно тонкого, простого и надежного уровня сетевой связи поверх UDP (протокола пользовательских датаграмм).

Объявления сверены с C# SDK 1.0.0. Раскройте имя, чтобы увидеть сигнатуры и описание.

Конструкторы1

ENetConnectionКонструктор
# ENetConnection
C#
public ENetConnection();

Методы20

BandwidthLimitvoid
# BandwidthLimit
C#
public void BandwidthLimit(int inBandwidth = 0, int outBandwidth = 0);

Регулирует ограничения пропускной способности хоста.

Параметры
ИмяТипПо умолчанию
inBandwidthint0
outBandwidthint0
Broadcast2 перегрузки
# Broadcast · 1/2
C#
public void Broadcast(int channel, byte[] packet, int flags);

Ставит в очередь packet для отправки всем пирам, связанным с хостом, по указанному channel. См. константы ENetPacketPeer FLAG_* для доступных флагов пакетов.

Параметры
ИмяТипПо умолчанию
channelint—
packetbyte[]—
flagsint—
# Broadcast · 2/2
C#
public void Broadcast(int channel, ReadOnlySpan<byte> packet, int flags);

Ставит в очередь packet для отправки всем пирам, связанным с хостом, по указанному channel. См. константы ENetPacketPeer FLAG_* для доступных флагов пакетов.

Параметры
ИмяТипПо умолчанию
channelint—
packetReadOnlySpan<byte>—
flagsint—
ChannelLimitvoid
# ChannelLimit
C#
public void ChannelLimit(int limit);

Ограничивает максимально допустимые каналы будущих входящих подключений.

Параметры
ИмяТипПо умолчанию
limitint—
Compressvoid
# Compress
C#
public void Compress(ENetConnection.CompressionMode mode);

Устанавливает метод сжатия, используемый для сетевых пакетов. Они имеют разные компромиссы скорости сжатия и пропускной способности, вам может потребоваться проверить, какой из них лучше всего подходит для вашего варианта использования, если вы вообще используете сжатие. Примечание: Большинство сетевых схем игр предполагают частую отправку множества небольших пакетов (размером менее 4 КБ каждый). Если вы сомневаетесь, рекомендуется сохранить алгоритм сжатия по умолчанию, так как он лучше всего работает с этими небольшими пакетами. Примечание: Режим сжатия должен быть установлен на одно и то же значение как на сервере, так и на всех его клиентах. Клиенты не смогут подключиться, если режим сжатия, установленный на клиенте, отличается от установленного на сервере.

Параметры
ИмяТипПо умолчанию
modeENetConnection.CompressionMode—
ConnectToHostENetPacketPeer
# ConnectToHost
C#
public ENetPacketPeer ConnectToHost(string address, int port, int channels = 0, int data = 0);

Инициирует соединение с внешним address, используя указанный port и выделяя запрошенные channels. Необязательные data могут быть переданы во время соединения в виде 32-битного целого числа. Примечание: Перед вызовом этого метода необходимо вызвать либо ENetConnection.CreateHost, либо ENetConnection.CreateHostBound на обоих концах.

Параметры
ИмяТипПо умолчанию
addressstring—
portint—
channelsint0
dataint0
Возвращает ENetPacketPeer
CreateHostError
# CreateHost
C#
public Error CreateHost(int maxPeers = 32, int maxChannels = 0, int inBandwidth = 0, int outBandwidth = 0);

Создает ENetHost, который допускает до max_peers подключенных одноранговых узлов, каждый из которых выделяет до max_channels каналов, опционально ограничивая пропускную способность до in_bandwidth и out_bandwidth (если больше нуля). Этот метод привязывает случайный доступный динамический порт UDP на хост-машине к неуказанному адресу. Используйте ENetConnection.CreateHostBound, чтобы указать адрес и порт. Примечание: Для установления соединения необходимо создать хост как на клиенте, так и на сервере.

Параметры
ИмяТипПо умолчанию
maxPeersint32
maxChannelsint0
inBandwidthint0
outBandwidthint0
Возвращает Error
CreateHostBoundError
# CreateHostBound
C#
public Error CreateHostBound(string bindAddress, int bindPort, int maxPeers = 32, int maxChannels = 0, int inBandwidth = 0, int outBandwidth = 0);

Создает ENetHost, привязанный к заданным bind_address и bind_port, который допускает до max_peers подключенных одноранговых узлов, каждый из которых выделяет до max_channels каналов, опционально ограничивая пропускную способность до in_bandwidth и out_bandwidth (если больше нуля). Примечание: Для установления соединения необходимо создать хост как на клиенте, так и на сервере.

Параметры
ИмяТипПо умолчанию
bindAddressstring—
bindPortint—
maxPeersint32
maxChannelsint0
inBandwidthint0
outBandwidthint0
Возвращает Error
Destroyvoid
# Destroy
C#
public void Destroy();

Уничтожает хост и все связанные с ним ресурсы.

DtlsClientSetupError
# DtlsClientSetup
C#
public Error DtlsClientSetup(string hostname, TlsOptions clientOptions = null);

Настройте этот ENetHost для использования пользовательского расширения Reckfell, разрешающего шифрование DTLS для клиентов ENet. Вызовите это перед ENetConnection.ConnectToHost, чтобы ENet подключался с использованием DTLS, проверяя сертификат сервера по hostname. Вы можете передать необязательный параметр client_options, чтобы настроить доверенные центры сертификации или отключить проверку общего имени. См. TlsOptions.Client и TlsOptions.ClientUnsafe.

Параметры
ИмяТипПо умолчанию
hostnamestring—
clientOptionsTlsOptionsnull
Возвращает Error
DtlsServerSetupError
# DtlsServerSetup
C#
public Error DtlsServerSetup(TlsOptions serverOptions);

Настройте этот ENetHost для использования пользовательского расширения Reckfell, разрешающего шифрование DTLS для серверов ENet. Вызовите его сразу после ENetConnection.CreateHostBound, чтобы ENet ожидал, что пиры будут подключаться с использованием DTLS. См. TlsOptions.Server.

Параметры
ИмяТипПо умолчанию
serverOptionsTlsOptions—
Возвращает Error
Flushvoid
# Flush
C#
public void Flush();

Отправляет все поставленные в очередь пакеты на указанном хосте своим назначенным одноранговым узлам.

GetLocalPortint
# GetLocalPort
C#
public int GetLocalPort();

Возвращает локальный порт, к которому привязан данный одноранговый узел.

Возвращает int
GetMaxChannelsint
# GetMaxChannels
C#
public int GetMaxChannels();

Возвращает максимальное количество каналов, разрешенных для подключенных одноранговых узлов.

Возвращает int
GetPeersReckfell.Collections.Array<ENetPacketPeer>
# GetPeers
C#
public Reckfell.Collections.Array<ENetPacketPeer> GetPeers();

Возвращает список пиров, связанных с этим хостом. Примечание: Этот список может включать некоторые пиры, которые не полностью подключены или все еще отключаются.

Возвращает Reckfell.Collections.Array<ENetPacketPeer>
PopStatisticdouble
# PopStatistic
C#
public double PopStatistic(ENetConnection.HostStatistic statistic);

Возвращает и сбрасывает статистику хоста.

Параметры
ИмяТипПо умолчанию
statisticENetConnection.HostStatistic—
Возвращает double
RefuseNewConnectionsvoid
# RefuseNewConnections
C#
public void RefuseNewConnections(bool refuse);

Настраивает сервер DTLS на автоматическое удаление новых подключений. Примечание: Этот метод актуален только после вызова ENetConnection.DtlsServerSetup.

Услуга

Параметры
ИмяТипПо умолчанию
refusebool—
ServiceReckfell.Collections.Array
# Service
C#
public Reckfell.Collections.Array Service(int timeout = 0);

Ожидает событий в этом соединении и пересылает пакеты между хостом и его одноранговыми узлами с заданным timeout (в миллисекундах). Возвращаемый Reckfell.Collections.Array будет иметь 4 элемента. ENetConnection.EventType, ENetPacketPeer, который сгенерировал событие, данные, связанные с событием (если есть), канал, связанный с событием (если есть). Если сгенерированное событие — ENetConnection.EventType.Receive, полученный пакет будет поставлен в очередь в связанный ENetPacketPeer. Регулярно вызывайте эту функцию для обработки подключений, отключений и получения новых пакетов. Примечание: Этот метод должен вызываться на обоих концах, вовлеченных в событие (отправляющие и принимающие хосты).

Параметры
ИмяТипПо умолчанию
timeoutint0
Возвращает Reckfell.Collections.Array
SocketSend2 перегрузки
# SocketSend · 1/2
C#
public void SocketSend(string destinationAddress, int destinationPort, byte[] packet);

Отправляет packet в пункт назначения с адреса и порта, которые в данный момент связаны с этим экземпляром ENetConnection. Это полезно, поскольку служит для создания записей в таблицах маршрутизации NAT на всех устройствах между этим связанным экземпляром и общедоступным Интернетом, позволяя маршрутизировать пакеты подключения потенциального клиента обратно через устройство(а) NAT между общедоступным Интернетом и этим хостом. Для этого требуется предварительное знание адреса и порта связи потенциального клиента, видимых общедоступным Интернетом, после того, как все устройства NAT обработали свой запрос на подключение. Эту информацию можно получить с помощью службы STUN(https://en.wikipedia.org/wiki/STUN), и она должна быть передана вашему хосту сущностью, которая не является потенциальным клиентом. Это никогда не сработает для клиента за симметричным NAT из-за природы алгоритма маршрутизации симметричного NAT, поскольку его IP и порт не могут быть известны заранее.

Параметры
ИмяТипПо умолчанию
destinationAddressstring—
destinationPortint—
packetbyte[]—
# SocketSend · 2/2
C#
public void SocketSend(string destinationAddress, int destinationPort, ReadOnlySpan<byte> packet);

Отправляет packet в пункт назначения с адреса и порта, которые в данный момент связаны с этим экземпляром ENetConnection. Это полезно, поскольку служит для создания записей в таблицах маршрутизации NAT на всех устройствах между этим связанным экземпляром и общедоступным Интернетом, позволяя маршрутизировать пакеты подключения потенциального клиента обратно через устройство(а) NAT между общедоступным Интернетом и этим хостом. Для этого требуется предварительное знание адреса и порта связи потенциального клиента, видимых общедоступным Интернетом, после того, как все устройства NAT обработали свой запрос на подключение. Эту информацию можно получить с помощью службы STUN(https://en.wikipedia.org/wiki/STUN), и она должна быть передана вашему хосту сущностью, которая не является потенциальным клиентом. Это никогда не сработает для клиента за симметричным NAT из-за природы алгоритма маршрутизации симметричного NAT, поскольку его IP и порт не могут быть известны заранее.

Параметры
ИмяТипПо умолчанию
destinationAddressstring—
destinationPortint—
packetReadOnlySpan<byte>—

ENetConnection.CompressionMode

ЗначениеОписание
Fastlz = 2

ФастЛЗ(https://fastlz.org/) сжатие. Этот вариант использует меньше ресурсов ЦП по сравнению с ENetConnection.CompressionMode.Zlib, за счет использования большей пропускной способности.

None = 0

Без сжатия. Это использует большую часть полосы пропускания, но имеет преимущество в том, что требует наименьшего количества ресурсов ЦП. Этот параметр также может быть использован для упрощения отладки сети с помощью таких инструментов, как Wireshark.

RangeCoder = 1

Встроенное кодирование диапазона ENet. Хорошо работает на небольших пакетах, но не является самым эффективным алгоритмом на пакетах размером более 4 КБ.

Zlib = 3

Сжатие Zlib. Этот вариант использует меньшую пропускную способность по сравнению с ENetConnection.CompressionMode.Fastlz, за счет использования большего количества ресурсов ЦП.

Zstd = 4

Zstandard(https://facebook.github.io/zstd/) сжатие. Обратите внимание, что этот алгоритм не очень эффективен на пакетах размером менее 4 КБ. Поэтому в большинстве случаев рекомендуется использовать другие алгоритмы сжатия.

ENetConnection.EventType

ЗначениеОписание
Connect = 1

Запрос на подключение, инициированный enet_host_connect, завершен. Массив будет содержать пир )peer(, который успешно подключился.

Disconnect = 2

Пир отключился. Это событие генерируется при успешном завершении отключения, инициированного ENetPacketPeer.PeerDisconnect, если истекло время ожидания пира или если истекло время ожидания запроса на подключение, инициализированного ENetConnection.ConnectToHost. Массив будет содержать пир, который отключился. Поле данных содержит предоставленные пользователем данные, описывающие отключение, или 0, если ничего не доступно.

Error = -1

Произошла ошибка во время ENetConnection.Service. Скорее всего, вам придется ENetConnection.Destroy хост и создать его заново.

None = 0

В течение указанного срока не произошло ни одного события.

Receive = 3

Пакет получен от пиров. Массив будет содержать пир, отправивший пакет, и номер канала, на котором был получен пакет. Полученный пакет будет поставлен в очередь в связанный ENetPacketPeer.

ENetConnection.HostStatistic

ЗначениеОписание
ReceivedData = 2

Всего получено данных.

ReceivedPackets = 3

Общее количество полученных UDP-пакетов.

SentData = 0

Всего передано данных.

SentPackets = 1

Общее количество отправленных UDP-пакетов.

Документация Reckfell EngineНаверх ↑
БЫСТРЫЙ ПЕРЕХОДНачало работыEntity и иерархияC# & .NET 10Сцены и префабы
Руководства и полный API Reckfell K
reckfellENGINE
RECKFELL ACCOUNT

Вход в аккаунт

Войдите в аккаунт Reckfell.

Один аккаунт для всей платформы Reckfell.