Этот репозиторий предоставляет управляемую C#-абстракцию библиотеки GameNetworkingSockets, созданную и поддерживаемую Valve Software. Прежде чем приступить к работе, вам нужно будет собрать собственную библиотеку со всеми необходимыми зависимостями.
Проект обновляется в соответствии с релизами нативной библиотеки.
Управляемую сборку можно собрать с использованием любой доступной платформы компиляции, поддерживающей C# 3.0 или более поздней версии.
Определите VALVESOCKETS_SPAN
, чтобы включить поддержку Span. Пожалуйста, выполните следующие действия, чтобы обеспечить быстрый доступ к собственным блокам памяти и повысить производительность.
Перед началом работы библиотеку следует инициализировать с помощью Valve.Sockets.Library.Initialize();
функция.
После завершения работы деинициализируйте библиотеку с помощью Valve.Sockets.Library.Deinitialize();
функция.
Сервер NetworkingSockets = new NetworkingSockets();uint pollGroup = server.CreatePollGroup();StatusCallback status = (ссылка на информацию StatusInfo) => {switch (info.connectionInfo.state) {case ConnectionState.None:break;case ConnectionState.Connecting:server .AcceptConnection(info.connection);server.SetConnectionPollGroup(pollGroup, info.connection);break;case ConnectionState.Connected:Console.WriteLine("Клиент подключен - ID: " + info.connection + ", IP: " + info.connectionInfo.address.GetIP());break;case ConnectionState. ClosedByPeer:case ConnectionState.ProblemDetectedLocally:server.CloseConnection(info.connection);Console.WriteLine("Клиент отключен - ID: " + info.connection + ", IP: " + info.connectionInfo.address.GetIP());break;}};utils.SetStatusCallback(статус);Адрес адрес = новый адрес();адрес.SetAddress("::0 ", порт);uint ListenSocket = server.CreateListenSocket(ref адрес);#if VALVESOCKETS_SPANMessageCallback message = (в NetworkingMessage netMessage) => {Console.WriteLine("Сообщение получено от - ID: " + netMessage.connection + ", Идентификатор канала: " + netMessage.channel + ", Длина данных: " + netMessage.length);};#else const int maxMessages = 20;NetworkingMessage[] netMessages = new NetworkingMessage[maxMessages];#endif while (!Console.KeyAvailable) {server.RunCallbacks(); #if VALVESOCKETS_SPANserver.ReceiveMessagesOnPollGroup(pollGroup, message, 20); #else int netMessagesCount = server.ReceiveMessagesOnPollGroup(pollGroup, netMessages, maxMessages);if (netMessagesCount > 0) {for (int i = 0; i < netMessagesCount; i++) {ref NetworkingMessage netMessage = ref netMessages[i];Console.WriteLine ("Сообщение получено от - ID: " + netMessage.connection + ", Идентификатор канала: " + netMessage.channel + ", Длина данных: " + netMessage.length);netMessage.Destroy();}} #endif Thread.Sleep(15);}server.DestroyPollGroup(pollGroup);
Клиент NetworkingSockets = new NetworkingSockets();uint Connection = 0;StatusCallback status = (ссылка на информацию StatusInfo) => {switch (info.connectionInfo.state) {case ConnectionState.None:break;case ConnectionState.Connected:Console.WriteLine(" Клиент подключен к серверу — идентификатор: " + соединение);break;case ConnectionState.ClosedByPeer:case ConnectionState.ProblemDetectedLocally:client.CloseConnection(connection);Console.WriteLine("Клиент отключен от сервера");break;}};utils.SetStatusCallback(status);Addressaddress = new Address();address.SetAddress(":: 1", порт);connection = client.Connect(ref адрес);#if VALVESOCKETS_SPANMessageCallback message = (в NetworkingMessage netMessage) => {Console.WriteLine("Сообщение получено от сервера - идентификатор канала: " + netMessage.channel + ", длина данных: " + netMessage.length);};#else const int maxMessages = 20;NetworkingMessage[] netMessages = новое NetworkingMessage[maxMessages];#endif while (!Console.KeyAvailable) {client.RunCallbacks(); #if VALVESOCKETS_SPANclient.ReceiveMessagesOnConnection(соединение, сообщение, 20); #else int netMessagesCount = client.ReceiveMessagesOnConnection(connection, netMessages, maxMessages);if (netMessagesCount > 0) {for (int i = 0; i < netMessagesCount; i++) {ref NetworkingMessage netMessage = ref netMessages[i];Console.WriteLine ("Сообщение получено от сервера - Идентификатор канала: " + netMessage.channel + ", Длина данных: " + netMessage.length);netMessage.Destroy();}} #endif Thread.Sleep(15);}
данные byte[] = новый байт[64];sockets.SendMessageToConnection(соединение, данные);
буфер байт[] = новый байт[1024];netMessage.CopyTo(буфер);
DebugCallback debug = (тип, сообщение) => {Console.WriteLine("Debug - Type: " + type + ", Message: " + message);}; NetworkingUtils utils = new NetworkingUtils();utils.SetDebugCallback(DebugType.Everything , отладка);
Использование практически такое же, как и в среде .NET, за исключением того, что консольные функции необходимо заменить функциями, предоставляемыми Unity. Если NetworkingSockets.RunCallbacks()
будет вызываться в игровом цикле, оставьте Unity работать в фоновом режиме, включив соответствующую опцию в настройках проигрывателя.
Определения флагов для функции NetworkingSockets.SendMessageToConnection()
:
SendFlags.Unreliable
ненадежный, доставка сообщения не гарантируется, сообщение может быть доставлено не по порядку.
SendFlags.Reliable
надежный заказ: сообщение должно быть получено целевым соединением, и попытки повторной отправки должны предприниматься до тех пор, пока сообщение не будет доставлено.
SendFlags.NoNagle
сообщение не будет группироваться с другими сообщениями в течение таймера.
SendFlags.NoDelay
сообщение не будет помещено в буфер, если его невозможно отправить относительно быстро.
Определения типа удостоверения для структуры NetworkingIdentity
:
IdentityType.Invalid
неизвестен или недействителен.
IdentityType.SteamID
Идентификатор Steam.
IdentityType.IPAddress
Адрес IPv4/IPv6.
Определения состояний соединения для поля ConnectionInfo.state
:
ConnectionState.None
— фиктивное состояние: соединение не существует или уже закрыто.
ConnectionState.Connecting
в процессе установления соединения, инициированного функцией NetworkingSockets.Connect()
.
ConnectionState.FindingRoute
если сервер принимает соединение, то это соединение переходит в состояние рандеву, но сквозной маршрут еще не установлен (через сеть ретрансляции).
ConnectionState.Connected
запрос на соединение, инициированный функцией NetworkingSockets.Connect()
завершен.
ConnectionState.ClosedByPeer
соединение закрыто узлом, но не закрыто локально. Если во входящей очереди есть какие-либо сообщения, их можно получить. В противном случае с соединением ничего нельзя будет сделать, кроме как закрыть его с помощью функции NetworkingSockets.CloseConnection()
. Соединение все еще существует с точки зрения API, и его необходимо закрыть, чтобы освободить ресурсы.
ConnectionState.ProblemDetectedLocally
локально обнаружено нарушение соединения. Попытки отправить дальнейшие сообщения потерпят неудачу. Все оставшиеся полученные сообщения в очереди доступны. Соединение все еще существует с точки зрения API, и его необходимо закрыть, чтобы освободить ресурсы.
Определения областей конфигурации:
ConfigurationScope.Global
ConfigurationScope.SocketsInterface
ConfigurationScope.ListenSocket
ConfigurationScope.Connection
Определения типов данных конфигурации:
ConfigurationDataType.Int32
ConfigurationDataType.Int64
ConfigurationDataType.Float
ConfigurationDataType.String
ConfigurationDataType.FunctionPtr
Определения значений конфигурации:
ConfigurationValue.Invalid
ConfigurationValue.FakePacketLossSend
ConfigurationValue.FakePacketLossRecv
ConfigurationValue.FakePacketLagSend
ConfigurationValue.FakePacketLagRecv
ConfigurationValue.FakePacketReorderSend
ConfigurationValue.FakePacketReorderRecv
ConfigurationValue.FakePacketReorderTime
ConfigurationValue.FakePacketDupSend
ConfigurationValue.FakePacketDupRecv
ConfigurationValue.FakePacketDupTimeMax
ConfigurationValue.TimeoutInitial
ConfigurationValue.TimeoutConnected
ConfigurationValue.SendBufferSize
ConfigurationValue.SendRateMin
ConfigurationValue.SendRateMax
ConfigurationValue.NagleTime
ConfigurationValue.IPAllowWithoutAuth
ConfigurationValue.MTUPacketSize
ConfigurationValue.MTUDataSize
ConfigurationValue.Unencrypted
ConfigurationValue.EnumerateDevVars
ConfigurationValue.SymmetricConnect
ConfigurationValue.LocalVirtualPort
ConfigurationValue.ConnectionStatusChanged
ConfigurationValue.AuthStatusChanged
ConfigurationValue.RelayNetworkStatusChanged
ConfigurationValue.MessagesSessionRequest
ConfigurationValue.MessagesSessionFailed
ConfigurationValue.P2PSTUNServerList
ConfigurationValue.P2PTransportICEEnable
ConfigurationValue.P2PTransportICEPenalty
ConfigurationValue.P2PTransportSDRPenalty
ConfigurationValue.SDRClientConsecutitivePingTimeoutsFailInitial
ConfigurationValue.SDRClientConsecutitivePingTimeoutsFail
ConfigurationValue.SDRClientMinPingsBeforePingAccurate
ConfigurationValue.SDRClientSingleSocket
ConfigurationValue.SDRClientForceRelayCluster
ConfigurationValue.SDRClientDebugTicketAddress
ConfigurationValue.SDRClientForceProxyAddr
ConfigurationValue.SDRClientFakeClusterPing
ConfigurationValue.LogLevelAckRTT
ConfigurationValue.LogLevelPacketDecode
ConfigurationValue.LogLevelMessage
ConfigurationValue.LogLevelPacketGaps
ConfigurationValue.LogLevelP2PRendezvous
ConfigurationValue.LogLevelSDRRelayPings
Определения результатов значений конфигурации:
ConfigurationValueResult.BadValue
ConfigurationValueResult.BadScopeObject
ConfigurationValueResult.BufferTooSmall
ConfigurationValueResult.OK
ConfigurationValueResult.OKInherited
Определения типов отладки:
DebugType.None
DebugType.Bug
DebugType.Error
DebugType.Important
DebugType.Warning
DebugType.Message
DebugType.Verbose
DebugType.Debug
DebugType.Everything
Определения результата операции:
Result.OK
. ОК, успех.
Общий сбой Result.Fail
.
Result.NoConnection
не удалось подключиться к сети.
Result.InvalidParam
— неправильный параметр.
Вызванный объект Result.InvalidState
находился в недопустимом состоянии.
Result.Ignored
цель игнорирует отправителя.
Предоставляет события для каждого сокета.
StatusCallback(ref StatusInfo info)
уведомляет, когда механизм диспетчеризации сокета прослушивания возвращает состояние соединения. Ссылку на делегата следует предохранять от сбора мусора.
Предоставляет события для каждого приложения.
DebugCallback(DebugType type, string message)
уведомляет, когда появляется отладочная информация с желаемой степенью детализации. Ссылку на делегата следует предохранять от сбора мусора.
Содержит упорядоченные данные с IP-адресом и номером порта.
Address.ip
IP-адрес в байтах.
Address.port
Номер порта.
Address.IsLocalHost
проверяет, является ли идентификатор локальным хостом.
Address.GetIP()
получает IP-адрес в печатной форме.
Address.SetLocalHost(ushort port)
устанавливает для localhost указанный порт.
Address.SetAddress(string ip, ushort port)
устанавливает IP-адрес (IPv4/IPv6) с указанным портом.
Address.Equals(Address other)
определяет равенство адресов.
Содержит маршалированные данные с конфигурацией.
Configuration.value
— тип значения, описанного в перечислении ConfigurationValue
.
Configuration.dataType
тип данных, описанный в перечислении ConfigurationDataType
.
Configuration.data
объединение данных конфигурации.
Содержит маршаллированные данные с состоянием соединения.
Идентификатор соединения StatusInfo.connection
.
StatusInfo.connectionInfo
по сути является структурой ConnectionInfo
с упорядоченными данными.
Содержит упорядоченные данные с информацией о соединении.
ConnectionInfo.identity
идентификатор конечной точки.
ConnectionInfo.userData
— данные, предоставленные пользователем, которые устанавливаются с помощью функции NetworkingSockets.SetConnectionUserData()
.
ConnectionInfo.listenSocket
сокет прослушивания для этого соединения.
ConnectionInfo.address
удаленный адрес конечной точки.
ConnectionInfo.state
высокоуровневое состояние соединения, описанное в перечислении ConnectionState
.
ConnectionInfo.endReason
основная причина прекращения соединения или проблемы.
ConnectionInfo.endDebug
объяснение в удобочитаемой форме для прекращения соединения или проблемы. Это предназначено только для целей диагностики отладки, а не для отображения пользователям. Там могут быть некоторые подробности, относящиеся к проблеме.
Описание отладки ConnectionInfo.connectionDescription
включает дескриптор соединения, тип соединения и информацию об одноранговом узле.
Содержит упорядоченные данные со статусом соединения для частых запросов.
ConnectionStatus.state
высокоуровневое состояние соединения, описанное в перечислении ConnectionState
.
ConnectionStatus.ping
текущий пинг в миллисекундах.
ConnectionStatus.connectionQualityLocal
качество соединения, измеряемое локально (процент пакетов, доставленных из конца в конец по порядку).
ConnectionStatus.connectionQualityRemote
уровень успешной доставки пакетов, наблюдаемый с удаленного хоста.
ConnectionStatus.outPacketsPerSecond
текущая скорость исходящих пакетов из недавней истории.
ConnectionStatus.outBytesPerSecond
текущая скорость исходящих данных из недавней истории.
ConnectionStatus.inPacketsPerSecond
текущая скорость входящих пакетов из недавней истории.
ConnectionStatus.inBytesPerSecond
текущая скорость входящих данных из недавней истории.
ConnectionStatus.sendRateBytesPerSecond
расчетная скорость, с которой данные могут отправляться одноранговому узлу. Оно может быть значительно выше, чем ConnectionStatus.outBytesPerSecond
, что означает, что пропускная способность канала выше, чем отправляемые данные.
ConnectionStatus.pendingUnreliable
количество байтов, ожидающих ненадежной отправки. Это данные, которые недавно запросили отправку, но еще не были переданы в сеть.
ConnectionStatus.pendingReliable
количество байтов, ожидающих надежной отправки. Надежный номер также включает в себя данные, которые ранее были переданы по проводу, но теперь запланированы для повторной передачи. Таким образом, можно наблюдать увеличение байтов между двумя проверками, даже если между проверками не было сделано никаких вызовов для отправки достоверных данных. Данные, ожидающие задержки Нэгла, появятся в этих числах.
ConnectionStatus.sentUnackedReliable
количество байт надежных данных, которые были переданы по каналу, но для которых еще не получено подтверждение, и поэтому их, возможно, придется передать повторно.
Содержит упорядоченные данные сетевой идентификации.
NetworkingIdentity.type
описание сетевого удостоверения.
NetworkingIdentity.IsInvalid
проверяет, имеет ли идентификатор недопустимый тип.
NetworkingIdentity.GetSteamID()
получает Steam ID.
NetworkingIdentity.SetSteamID(ulong steamID)
устанавливает Steam ID.
Содержит упорядоченные данные сетевого сообщения.
NetworkingMessage.identity
— идентификатор отправителя.
NetworkingMessage.connectionUserData
— предоставленные пользователем данные подключения, которые устанавливаются с помощью функции NetworkingSockets.SetConnectionUserData()
.
NetworkingMessage.timeReceived
локальная отметка времени получения сообщения.
NetworkingMessage.messageNumber
номер сообщения, назначенный отправителем.
NetworkingMessage.data
полезные данные сообщения.
NetworkingMessage.length
длина полезных данных.
NetworkingMessage.connection
Идентификатор соединения, от которого пришло сообщение.
NetworkingMessage.channel
Номер канала, на котором было получено сообщение.
Флаги NetworkingMessage.flags
, которые использовались для отправки сообщения.
NetworkingMessage.CopyTo(byte[] destination)
копирует полезные данные из сообщения в массив назначения.
NetworkingMessage.Destroy()
уничтожает сообщение. Должен вызываться только тогда, когда сообщения получены из сокетов.
Содержит управляемый указатель на сокеты.
NetworkingSockets.CreateListenSocket(ref Address address, Configuration[] configurations)
создает сокет с дополнительными конфигурациями и возвращает идентификатор сокета, который прослушивает входящие соединения, инициированные функцией NetworkingSockets.Connect()
.
NetworkingSockets.Connect(ref Address address, Configuration[] configurations)
инициирует соединение с внешним хостом с дополнительными конфигурациями. Возвращает идентификатор локального соединения.
NetworkingSockets.AcceptConnection(Connection connection)
принимает входящее соединение, полученное через сокет прослушивания. Когда получена попытка подключения (возможно, после обмена несколькими базовыми пакетами установления связи для предотвращения тривиального подделки), объект интерфейса подключения создается в состоянии ConnectionState.Connecting
и вызывается StatusCallback()
. Возвращает результат, описанный в перечислении Result
.
NetworkingSockets.CloseConnection(Connection connection, int reason, string debug, bool enableLinger)
отключается от хоста и делает недействительным дескриптор соединения. Любые непрочитанные данные в соединении удаляются. Параметр причины — это необязательный код, предоставляемый пользователем, который будет получен на другом конце и записан (если возможно) в серверной аналитике. Журнал отладки может указывать на ошибку, если код причины выходит за пределы допустимого диапазона. Параметр отладки — это необязательная удобочитаемая диагностическая строка, которая будет получена на другом конце и записана (если возможно) в серверной аналитике. Если пользователь желает перевести сокет в состояние задержки, когда предпринимается попытка сбросить все оставшиеся отправленные данные, параметр задержки должен быть включен, в противном случае надежные данные не будут сброшены. Если соединение уже разорвано, код причины, строка отладки и параметр задержки игнорируются. Возвращает true в случае успеха или false в случае неудачи.
NetworkingSockets.CloseListenSocket(ListenSocket socket, string remoteReason)
уничтожает сокет прослушивания и все клиентские сокеты, созданные путем принятия соединений в сокете прослушивания. Удаленная причина определяет, какие действия по очистке выполняются над уничтожаемыми клиентскими сокетами. Если запрошена очистка, и пользователь запросил сокет прослушивания, привязанный к определенному локальному порту, для облегчения прямых подключений IPv4, то базовый сокет UDP должен оставаться открытым до тех пор, пока все клиенты не будут очищены. Возвращает true в случае успеха или false в случае неудачи.
NetworkingSockets.SetConnectionUserData(Connection peer, long userData)
устанавливает данные, предоставленные пользователем для соединения. Возвращает true в случае успеха или false в случае неудачи.
NetworkingSockets.GetConnectionUserData(Connection peer)
возвращает предоставленные пользователем данные или -1, если дескриптор недействителен или для соединения не установлены какие-либо данные.
NetworkingSockets.SetConnectionName(Connection peer, string name)
задает имя соединения, используемое в основном для отладки.
NetworkingSockets.GetConnectionName(Connection peer, StringBuilder name, int maxLength)
извлекает имя соединения в изменяемую строку. Возвращает true в случае успеха или false в случае неудачи.
NetworkingSockets.SendMessageToConnection(Connection connection, byte[] data, int length, SendFlags flags)
отправляет сообщение хосту в подключенном сокете. Параметры длины и типа отправки являются необязательными. Можно указать несколько флагов одновременно. Возвращает результат, описанный в перечислении Result
. Вместо ссылки на массив байтов можно использовать указатель IntPtr
на собственный буфер.
NetworkingSockets.FlushMessagesOnConnection(Connection connection)
если Nagle включен (оно включено по умолчанию), то перед отправкой сообщение будет помещено в очередь на время Nagle, чтобы объединить небольшие сообщения в один и тот же пакет. Вызовите эту функцию, чтобы очистить все сообщения в очереди и немедленно отправить их при следующей передаче. Возвращает результат, описанный в перечислении Result
.
NetworkingSockets.ReceiveMessagesOnConnection(Connection connection, NetworkingMessage[] messages, int maxMessages)
извлекает следующие доступные сообщения из сокета для соединения. Возвращает количество сообщений или -1, если дескриптор соединения недействителен. Порядок сообщений, возвращаемых в массиве, имеет значение. Надежные сообщения будут получены в том порядке, в котором они были отправлены. Если получены какие-либо сообщения, для каждого из них следует вызвать message.Destroy()
чтобы освободить ресурсы.
NetworkingSockets.GetConnectionInfo(Connection connection, ref ConnectionInfo info)
получает информацию об указанном соединении. Возвращает true в случае успеха или false в случае неудачи.
NetworkingSockets.GetQuickConnectionStatus(Connection connection, ref ConnectionStatus status)
получает краткий набор состояний соединения, который может отображаться пользователю в игре. Возвращает true в случае успеха или false в случае неудачи.
NetworkingSockets.GetDetailedConnectionStatus(Connection connection, StringBuilder status, int statusLength)
получает подробную статистику подключения в форме для печати. Возвращает 0 в случае успеха, -1 в случае неудачи или > 0, если емкости изменяемой строки недостаточно.
NetworkingSockets.GetListenSocketAddress(ListenSocket socket, ref Address address)
получает локальный IP-адрес и номер порта сокета прослушивания. Возвращает true в случае успеха или false в случае неудачи.
NetworkingSockets.CreateSocketPair(Connection connectionLeft, Connection connectionRight, bool useNetworkLoopback, ref NetworkingIdentity identityLeft, ref NetworkingIdentity identityRight)
создает пару соединений, которые взаимодействуют друг с другом, например, петлевая связь. Два соединения будут немедленно переведены в состояние «подключено», и обратные вызовы вызываться не будут. После этого, если одно из соединений будет закрыто, другое соединение получит обратный вызов, точно так же, как если бы они общались по сети. По умолчанию используются внутренние буферы, полностью минуя сеть, дробление сообщений на пакеты, шифрование, копирование полезной нагрузки и т. д. Это означает, что пакеты обратной связи по умолчанию не будут имитировать задержку или потерю. Включенный параметр сетевой петли приведет к тому, что пара сокетов будет отправлять пакеты через устройство обратной связи локальной сети через временные порты. В этом случае поддерживаются ложные задержки и потери, а на шифрование и дешифрование тратится время ЦП.
NetworkingSockets.GetIdentity()
получает идентификатор, связанный с сокетами.
NetworkingSockets.CreatePollGroup()
создает новую группу опроса для соединений. Возвращает дескриптор группы опроса.
NetworkingSockets.DestroyPollGroup(PollGroup pollGroup)
уничтожает группу опроса. Если в группе опроса есть какие-либо соединения, они удаляются из группы и оставляются в состоянии, в котором они не являются частью какой-либо группы опроса. Возвращает false, если передан недопустимый дескриптор группы опроса.
NetworkingSockets.SetConnectionPollGroup(PollGroup pollGroup, Connection connection)
назначает соединение группе опроса. Соединение может принадлежать только одной группе опроса. Добавление соединения в группу опроса неявно удаляет его из любой другой группы опроса. Вы можете передать нулевое значение параметру группы опроса, чтобы удалить соединение из текущей группы опроса. Если имеются полученные сообщения, ожидающие в настоящее время соединения, предпринимается попытка добавить их в очередь сообщений для группы опроса примерно в том порядке, который применялся бы, если бы соединение уже было частью группы опроса на момент соединения. сообщения были получены. Возвращает false, если дескриптор соединения недействителен или дескриптор группы опроса недействителен.
NetworkingSockets.ReceiveMessagesOnPollGroup()
извлекает следующие доступные сообщения из сокета при любом соединении в группе опроса. Проверьте NetworkingMessage.connection
, чтобы определить соединение. Порядок доставки сообщений между различными соединениями обычно соответствует порядку получения последнего пакета, завершающего сообщение. Но это не является сильной гарантией, особенно для пакетов, полученных правильно, поскольку соединение назначается группе опроса. Порядок доставки сообщений по одному и тому же соединению четко определен и присутствуют одинаковые гарантии. Сообщения не группируются по соединениям, поэтому они не обязательно будут появляться в списке последовательно, они могут чередоваться с сообщениями для других соединений. Возвращает количество сообщений или -1, если дескриптор группы опроса недействителен.
NetworkingSockets.RunCallbacks()
отправляет обратные вызовы, если они доступны.
NetworkingUtils.Dispose()
уничтожает сетевые утилиты и очищает неуправляемые ресурсы.
NetworkingUtils.Time
возвращает текущее локальное монотонное время в микросекундах. Он никогда не сбрасывается, пока приложение остается активным.
NetworkingUtils.FirstConfigurationValue
получает значение конфигурации с наименьшим номером, доступное в текущей среде.
NetworkingUtils.SetStatusCallback(StatusCallback callback)
устанавливает обратный вызов для обновлений состояния подключения. Возвращает true в случае успеха или false в случае неудачи.
NetworkingUtils.SetDebugCallback(DebugType detailLevel, DebugCallback callback)
устанавливает обратный вызов для вывода отладки.
NetworkingUtils.SetConfigurationValue(ConfigurationValue configurationValue, ConfigurationScope configurationScope, IntPtr scopeObject, ConfigurationDataType dataType, IntPtr value)
устанавливает значение конфигурации в соответствии с перечислениями ConfigurationValue
, ConfigurationScope
и ConfigurationDataType
. Параметр value должен быть ссылкой на фактическое значение.
NetworkingUtils.SetConfigurationValue(Configuration configuration, ConfigurationScope configurationScope, IntPtr scopeObject)
задает конфигурацию с использованием структуры Configuration
в соответствии с перечислением ConfigurationScope
.
NetworkingUtils.GetConfigurationValue(ConfigurationValue configurationValue, ConfigurationScope configurationScope, IntPtr scopeObject, ref ConfigurationDataType dataType, ref IntPtr result, ref IntPtr resultLength)
получает значение конфигурации в соответствии с перечислениями ConfigurationValue
, ConfigurationScope
и ConfigurationDataType
.
Содержит константные поля.
Library.maxCloseMessageLength
максимальная длина строки причины в байтах при закрытии соединения.
Library.maxMessageSize
максимальный размер одного сообщения, которое можно отправить.
Library.Initialize(ref NetworkingIdentity identity, StringBuilder errorMessage)
инициализирует собственную библиотеку с дополнительным идентификатором, который будет связан с сокетами. Параметр сообщения об ошибке является необязательным и должен использоваться для определения ошибки во время инициализации. Емкость изменяемой строки для сообщения об ошибке должна быть равна Library.maxErrorMessageLength
.
Library.Deinitialize()
деинициализирует собственную библиотеку. Надо звонить после окончания работы.