ENetConnection
Класс-оболочка для ENetHost(http://enet.bespin.org/group__host.html).
Класс-оболочка для ENetHost(http://enet.bespin.org/group__host.html).
Целью ENet является обеспечение относительно тонкого, простого и надежного уровня сетевой связи поверх UDP (протокола пользовательских датаграмм).
Объявления сверены с C# SDK 1.0.0. Раскройте имя, чтобы увидеть сигнатуры и описание.
Конструкторы1
ENetConnectionКонструктор
public ENetConnection();Методы20
BandwidthLimitvoid
public void BandwidthLimit(int inBandwidth = 0, int outBandwidth = 0);Регулирует ограничения пропускной способности хоста.
| Имя | Тип | По умолчанию |
|---|---|---|
inBandwidth | int | 0 |
outBandwidth | int | 0 |
Broadcast2 перегрузки
public void Broadcast(int channel, byte[] packet, int flags);Ставит в очередь packet для отправки всем пирам, связанным с хостом, по указанному channel. См. константы ENetPacketPeer FLAG_* для доступных флагов пакетов.
| Имя | Тип | По умолчанию |
|---|---|---|
channel | int | — |
packet | byte[] | — |
flags | int | — |
public void Broadcast(int channel, ReadOnlySpan<byte> packet, int flags);Ставит в очередь packet для отправки всем пирам, связанным с хостом, по указанному channel. См. константы ENetPacketPeer FLAG_* для доступных флагов пакетов.
| Имя | Тип | По умолчанию |
|---|---|---|
channel | int | — |
packet | ReadOnlySpan<byte> | — |
flags | int | — |
ChannelLimitvoid
public void ChannelLimit(int limit);Ограничивает максимально допустимые каналы будущих входящих подключений.
| Имя | Тип | По умолчанию |
|---|---|---|
limit | int | — |
Compressvoid
public void Compress(ENetConnection.CompressionMode mode);Устанавливает метод сжатия, используемый для сетевых пакетов. Они имеют разные компромиссы скорости сжатия и пропускной способности, вам может потребоваться проверить, какой из них лучше всего подходит для вашего варианта использования, если вы вообще используете сжатие. Примечание: Большинство сетевых схем игр предполагают частую отправку множества небольших пакетов (размером менее 4 КБ каждый). Если вы сомневаетесь, рекомендуется сохранить алгоритм сжатия по умолчанию, так как он лучше всего работает с этими небольшими пакетами. Примечание: Режим сжатия должен быть установлен на одно и то же значение как на сервере, так и на всех его клиентах. Клиенты не смогут подключиться, если режим сжатия, установленный на клиенте, отличается от установленного на сервере.
| Имя | Тип | По умолчанию |
|---|---|---|
mode | ENetConnection.CompressionMode | — |
ConnectToHostENetPacketPeer
public ENetPacketPeer ConnectToHost(string address, int port, int channels = 0, int data = 0);Инициирует соединение с внешним address, используя указанный port и выделяя запрошенные channels. Необязательные data могут быть переданы во время соединения в виде 32-битного целого числа.
Примечание: Перед вызовом этого метода необходимо вызвать либо ENetConnection.CreateHost, либо ENetConnection.CreateHostBound на обоих концах.
| Имя | Тип | По умолчанию |
|---|---|---|
address | string | — |
port | int | — |
channels | int | 0 |
data | int | 0 |
ENetPacketPeerCreateHostError
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, чтобы указать адрес и порт.
Примечание: Для установления соединения необходимо создать хост как на клиенте, так и на сервере.
| Имя | Тип | По умолчанию |
|---|---|---|
maxPeers | int | 32 |
maxChannels | int | 0 |
inBandwidth | int | 0 |
outBandwidth | int | 0 |
ErrorCreateHostBoundError
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 (если больше нуля).
Примечание: Для установления соединения необходимо создать хост как на клиенте, так и на сервере.
| Имя | Тип | По умолчанию |
|---|---|---|
bindAddress | string | — |
bindPort | int | — |
maxPeers | int | 32 |
maxChannels | int | 0 |
inBandwidth | int | 0 |
outBandwidth | int | 0 |
ErrorDestroyvoid
public void Destroy();Уничтожает хост и все связанные с ним ресурсы.
DtlsClientSetupError
public Error DtlsClientSetup(string hostname, TlsOptions clientOptions = null);Настройте этот ENetHost для использования пользовательского расширения Reckfell, разрешающего шифрование DTLS для клиентов ENet. Вызовите это перед ENetConnection.ConnectToHost, чтобы ENet подключался с использованием DTLS, проверяя сертификат сервера по hostname. Вы можете передать необязательный параметр client_options, чтобы настроить доверенные центры сертификации или отключить проверку общего имени. См. TlsOptions.Client и TlsOptions.ClientUnsafe.
| Имя | Тип | По умолчанию |
|---|---|---|
hostname | string | — |
clientOptions | TlsOptions | null |
ErrorDtlsServerSetupError
public Error DtlsServerSetup(TlsOptions serverOptions);Настройте этот ENetHost для использования пользовательского расширения Reckfell, разрешающего шифрование DTLS для серверов ENet. Вызовите его сразу после ENetConnection.CreateHostBound, чтобы ENet ожидал, что пиры будут подключаться с использованием DTLS. См. TlsOptions.Server.
| Имя | Тип | По умолчанию |
|---|---|---|
serverOptions | TlsOptions | — |
ErrorFlushvoid
public void Flush();Отправляет все поставленные в очередь пакеты на указанном хосте своим назначенным одноранговым узлам.
GetLocalPortint
public int GetLocalPort();Возвращает локальный порт, к которому привязан данный одноранговый узел.
intGetMaxChannelsint
public int GetMaxChannels();Возвращает максимальное количество каналов, разрешенных для подключенных одноранговых узлов.
intGetPeersReckfell.Collections.Array<ENetPacketPeer>
public Reckfell.Collections.Array<ENetPacketPeer> GetPeers();Возвращает список пиров, связанных с этим хостом. Примечание: Этот список может включать некоторые пиры, которые не полностью подключены или все еще отключаются.
Reckfell.Collections.Array<ENetPacketPeer>PopStatisticdouble
public double PopStatistic(ENetConnection.HostStatistic statistic);Возвращает и сбрасывает статистику хоста.
| Имя | Тип | По умолчанию |
|---|---|---|
statistic | ENetConnection.HostStatistic | — |
doubleRefuseNewConnectionsvoid
public void RefuseNewConnections(bool refuse);Настраивает сервер DTLS на автоматическое удаление новых подключений.
Примечание: Этот метод актуален только после вызова ENetConnection.DtlsServerSetup.
Услуга
| Имя | Тип | По умолчанию |
|---|---|---|
refuse | bool | — |
ServiceReckfell.Collections.Array
public Reckfell.Collections.Array Service(int timeout = 0);Ожидает событий в этом соединении и пересылает пакеты между хостом и его одноранговыми узлами с заданным timeout (в миллисекундах). Возвращаемый Reckfell.Collections.Array будет иметь 4 элемента. ENetConnection.EventType, ENetPacketPeer, который сгенерировал событие, данные, связанные с событием (если есть), канал, связанный с событием (если есть). Если сгенерированное событие — ENetConnection.EventType.Receive, полученный пакет будет поставлен в очередь в связанный ENetPacketPeer.
Регулярно вызывайте эту функцию для обработки подключений, отключений и получения новых пакетов.
Примечание: Этот метод должен вызываться на обоих концах, вовлеченных в событие (отправляющие и принимающие хосты).
| Имя | Тип | По умолчанию |
|---|---|---|
timeout | int | 0 |
Reckfell.Collections.ArraySocketSend2 перегрузки
public void SocketSend(string destinationAddress, int destinationPort, byte[] packet);Отправляет packet в пункт назначения с адреса и порта, которые в данный момент связаны с этим экземпляром ENetConnection.
Это полезно, поскольку служит для создания записей в таблицах маршрутизации NAT на всех устройствах между этим связанным экземпляром и общедоступным Интернетом, позволяя маршрутизировать пакеты подключения потенциального клиента обратно через устройство(а) NAT между общедоступным Интернетом и этим хостом.
Для этого требуется предварительное знание адреса и порта связи потенциального клиента, видимых общедоступным Интернетом, после того, как все устройства NAT обработали свой запрос на подключение. Эту информацию можно получить с помощью службы STUN(https://en.wikipedia.org/wiki/STUN), и она должна быть передана вашему хосту сущностью, которая не является потенциальным клиентом. Это никогда не сработает для клиента за симметричным NAT из-за природы алгоритма маршрутизации симметричного NAT, поскольку его IP и порт не могут быть известны заранее.
| Имя | Тип | По умолчанию |
|---|---|---|
destinationAddress | string | — |
destinationPort | int | — |
packet | byte[] | — |
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 и порт не могут быть известны заранее.
| Имя | Тип | По умолчанию |
|---|---|---|
destinationAddress | string | — |
destinationPort | int | — |
packet | ReadOnlySpan<byte> | — |
ENetConnection.CompressionMode
| Значение | Описание |
|---|---|
Fastlz = 2 | ФастЛЗ(https://fastlz.org/) сжатие. Этот вариант использует меньше ресурсов ЦП по сравнению с |
None = 0 | Без сжатия. Это использует большую часть полосы пропускания, но имеет преимущество в том, что требует наименьшего количества ресурсов ЦП. Этот параметр также может быть использован для упрощения отладки сети с помощью таких инструментов, как Wireshark. |
RangeCoder = 1 | Встроенное кодирование диапазона ENet. Хорошо работает на небольших пакетах, но не является самым эффективным алгоритмом на пакетах размером более 4 КБ. |
Zlib = 3 | Сжатие Zlib. Этот вариант использует меньшую пропускную способность по сравнению с |
Zstd = 4 | Zstandard(https://facebook.github.io/zstd/) сжатие. Обратите внимание, что этот алгоритм не очень эффективен на пакетах размером менее 4 КБ. Поэтому в большинстве случаев рекомендуется использовать другие алгоритмы сжатия. |
ENetConnection.EventType
| Значение | Описание |
|---|---|
Connect = 1 | Запрос на подключение, инициированный enet_host_connect, завершен. Массив будет содержать пир )peer(, который успешно подключился. |
Disconnect = 2 | Пир отключился. Это событие генерируется при успешном завершении отключения, инициированного |
Error = -1 | Произошла ошибка во время |
None = 0 | В течение указанного срока не произошло ни одного события. |
Receive = 3 | Пакет получен от пиров. Массив будет содержать пир, отправивший пакет, и номер канала, на котором был получен пакет. Полученный пакет будет поставлен в очередь в связанный |
ENetConnection.HostStatistic
| Значение | Описание |
|---|---|
ReceivedData = 2 | Всего получено данных. |
ReceivedPackets = 3 | Общее количество полученных UDP-пакетов. |
SentData = 0 | Всего передано данных. |
SentPackets = 1 | Общее количество отправленных UDP-пакетов. |