Este repositório fornece uma abstração C# gerenciada da biblioteca GameNetworkingSockets que é criada e mantida pela Valve Software. Você precisará construir a biblioteca nativa com todas as dependências necessárias antes de começar.
O projeto está sendo atualizado de acordo com os lançamentos da biblioteca nativa.
Um assembly gerenciado pode ser criado usando qualquer plataforma de compilação disponível que suporte C# 3.0 ou superior.
Defina VALVESOCKETS_SPAN
para ativar o suporte para Span. Por favor, siga estas etapas para permitir acesso rápido aos blocos de memória nativa e melhorar o desempenho.
Antes de começar a trabalhar, a biblioteca deve ser inicializada usando Valve.Sockets.Library.Initialize();
função.
Após a conclusão do trabalho, desinicialize a biblioteca usando Valve.Sockets.Library.Deinitialize();
função.
Servidor NetworkingSockets = new NetworkingSockets();uint pollGroup = server.CreatePollGroup();StatusCallback status = (ref StatusInfo info) => {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("Cliente conectado - ID: " + info.connection + ", IP: " + info.connectionInfo.address.GetIP());break;case ConnectionState. ClosedByPeer:case ConnectionState.ProblemDetectedLocally:server.CloseConnection(info.connection);Console.WriteLine("Cliente desconectado - ID: " + info.connection + ", IP: " + info.connectionInfo.address.GetIP());break;}};utils.SetStatusCallback(status);Endereço = new Address();address.SetAddress("::0", porta) ;uint listenSocket = server.CreateListenSocket(endereço de referência);#if VALVESOCKETS_SPANMessageCallback message = (em NetworkingMessage netMessage) => {Console.WriteLine("Mensagem recebida de - ID: " + netMessage.connection + ", ID do canal: " + netMessage.channel + ", Comprimento dos dados: " + netMessage.length);};#else const int maxMessages = 20 ;NetworkingMessage[] netMessages = new NetworkingMessage[maxMessages];#endifwhile (!Console.KeyAvailable) {server.RunCallbacks(); #if VALVESOCKETS_SPANserver.ReceiveMessagesOnPollGroup(pollGroup, mensagem, 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("Mensagem recebida de - ID: " + netMessage.connection + ", ID do canal: " + netMessage.channel + ", Comprimento dos dados: " + netMessage.length);netMessage.Destroy() ;}} #endif Thread.Sleep(15);}server.DestroyPollGroup(pollGroup);
Cliente NetworkingSockets = novo NetworkingSockets(); conexão uint = 0; StatusCallback status = (ref StatusInfo info) => {switch (info.connectionInfo.state) {case ConnectionState.None:break;case ConnectionState.Connected:Console.WriteLine(" Cliente conectado ao servidor - ID: " + connection);break;case ConnectionState.ClosedByPeer:case ConnectionState.ProblemDetectedLocally:client.CloseConnection(connection);Console.WriteLine("Cliente desconectado do servidor");break;}};utils.SetStatusCallback(status);Address address = new Address();address.SetAddress(":: 1", porta);conexão = cliente.Connect(endereço de referência);#if VALVESOCKETS_SPANMessageCallback message = (em NetworkingMessage netMessage) => {Console.WriteLine("Mensagem recebida do servidor - ID do canal: " + netMessage.channel + ", Comprimento dos dados: " + netMessage.length);};#else const int maxMessages = 20;NetworkingMessage[] netMessages = new NetworkingMessage[maxMessages];#endifwhile (!Console.KeyAvailable) {client.RunCallbacks(); #if VALVESOCKETS_SPANclient.ReceiveMessagesOnConnection(conexão, mensagem, 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("Mensagem recebida do servidor - ID do canal: " + netMessage.channel + ", Comprimento dos dados: " + netMessage.length);netMessage.Destroy();}} #endif Thread.Sleep(15);}
byte[] dados = novo byte[64];sockets.SendMessageToConnection(conexão, dados);
byte[] buffer = novo byte[1024];netMessage.CopyTo(buffer);
DebugCallback debug = (tipo, mensagem) => {Console.WriteLine("Debug - Type: " + type + ", Message: " + message);};NetworkingUtils utils = new NetworkingUtils();utils.SetDebugCallback(DebugType.Everything , depuração);
O uso é quase o mesmo do ambiente .NET, exceto que as funções do console devem ser substituídas por funções fornecidas pelo Unity. Se NetworkingSockets.RunCallbacks()
for chamado em um loop de jogo, mantenha o Unity rodando em segundo plano ativando a opção apropriada nas configurações do player.
Definições de sinalizadores para a função NetworkingSockets.SendMessageToConnection()
:
SendFlags.Unreliable
não confiável, a entrega da mensagem não é garantida, a mensagem pode ser entregue fora de ordem.
SendFlags.Reliable
confiável ordenado, uma mensagem deve ser recebida pela conexão de destino e tentativas de reenvio devem ser feitas até que a mensagem seja entregue.
SendFlags.NoNagle
uma mensagem não será agrupada com outras mensagens dentro de um cronômetro.
SendFlags.NoDelay
uma mensagem não será armazenada em buffer se não puder ser enviada de forma relativamente rápida.
Definições de tipo de identidade para estrutura NetworkingIdentity
:
IdentityType.Invalid
desconhecido ou inválido.
IdentityType.SteamID
Identificador do Steam.
IdentityType.IPAddress
Endereço IPv4/IPv6.
Definições de estados de conexão para o campo ConnectionInfo.state
:
ConnectionState.None
Estado fictício, a conexão não existe ou já foi fechada.
ConnectionState.Connecting
em andamento para estabelecer uma conexão iniciada pela função NetworkingSockets.Connect()
.
ConnectionState.FindingRoute
se o servidor aceitar a conexão, então esta conexão muda para o estado de encontro, mas a rota ponta a ponta ainda não foi estabelecida (através da rede de retransmissão).
ConnectionState.Connected
uma solicitação de conexão iniciada pela função NetworkingSockets.Connect()
foi concluída.
ConnectionState.ClosedByPeer
uma conexão foi fechada pelo par, mas não fechada localmente. Se houver alguma mensagem na fila de entrada, ela poderá ser recuperada. Caso contrário, nada poderá ser feito com a conexão, exceto fechá-la usando a função NetworkingSockets.CloseConnection()
. A conexão ainda existe da perspectiva da API e deve ser fechada para liberar recursos.
ConnectionState.ProblemDetectedLocally
uma interrupção na conexão foi detectada localmente. As tentativas de enviar mais mensagens falharão. Todas as mensagens recebidas restantes na fila estarão disponíveis. A conexão ainda existe da perspectiva da API e deve ser fechada para liberar recursos.
Definições de escopos de configuração:
ConfigurationScope.Global
ConfigurationScope.SocketsInterface
ConfigurationScope.ListenSocket
ConfigurationScope.Connection
Definições de tipos de dados de configuração:
ConfigurationDataType.Int32
ConfigurationDataType.Int64
ConfigurationDataType.Float
ConfigurationDataType.String
ConfigurationDataType.FunctionPtr
Definições de valores de configuração:
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
Definições de resultados de valores de configuração:
ConfigurationValueResult.BadValue
ConfigurationValueResult.BadScopeObject
ConfigurationValueResult.BufferTooSmall
ConfigurationValueResult.OK
ConfigurationValueResult.OKInherited
Definições de tipos de depuração:
DebugType.None
DebugType.Bug
DebugType.Error
DebugType.Important
DebugType.Warning
DebugType.Message
DebugType.Verbose
DebugType.Debug
DebugType.Everything
Definições de resultado da operação:
Result.OK
sucesso.
Result.Fail
falha genérica.
Result.NoConnection
falhou na conexão de rede.
Result.InvalidParam
um parâmetro está incorreto.
O objeto chamado Result.InvalidState
estava em um estado inválido.
O destino Result.Ignored
está ignorando um remetente.
Fornece eventos por soquete.
StatusCallback(ref StatusInfo info)
notifica quando o mecanismo de despacho no soquete de escuta retorna um estado de conexão. Uma referência ao delegado deve ser preservada de ser coletada como lixo.
Fornece eventos por aplicativo.
DebugCallback(DebugType type, string message)
notifica quando surgem informações de depuração com o detalhamento desejado. Uma referência ao delegado deve ser preservada de ser coletada como lixo.
Contém dados empacotados com um endereço IP e número de porta.
Address.ip
Endereço IP em bytes.
Número da porta Address.port
.
Address.IsLocalHost
verifica se a identidade é localhost.
Address.GetIP()
obtém um endereço IP em formato imprimível.
Address.SetLocalHost(ushort port)
define localhost com uma porta especificada.
Address.SetAddress(string ip, ushort port)
define um endereço IP (IPv4/IPv6) com uma porta especificada.
Address.Equals(Address other)
determina a igualdade de endereços.
Contém dados empacotados com configuração.
Configuration.value
um tipo do valor descrito na enumeração ConfigurationValue
.
Configuration.dataType
um tipo de dados descrito na enumeração ConfigurationDataType
.
Configuration.data
uma união de dados de configuração.
Contém dados empacotados com estado de conexão.
ID de conexão StatusInfo.connection
.
StatusInfo.connectionInfo
essencialmente estrutura ConnectionInfo
com dados organizados.
Contém dados organizados com informações de conexão.
Identificador ConnectionInfo.identity
de um terminal.
ConnectionInfo.userData
Dados fornecidos pelo usuário que são definidos usando a função NetworkingSockets.SetConnectionUserData()
.
ConnectionInfo.listenSocket
soquete de escuta para esta conexão.
ConnectionInfo.address
endereço remoto de um terminal.
ConnectionInfo.state
estado de alto nível da conexão descrita na enumeração ConnectionState
.
ConnectionInfo.endReason
causa básica do encerramento ou problema da conexão.
Explicação ConnectionInfo.endDebug
em um formato legível para problemas ou encerramento de conexão. Isso se destina apenas a fins de diagnóstico de depuração, não para exibição aos usuários. Pode ter alguns detalhes específicos para o problema.
A descrição de depuração ConnectionInfo.connectionDescription
inclui o identificador de conexão, o tipo de conexão e as informações de peer.
Contém dados organizados com status de conexão para solicitações frequentes.
ConnectionStatus.state
estado de alto nível da conexão descrita na enumeração ConnectionState
.
ConnectionStatus.ping
ping atual em milissegundos.
ConnectionStatus.connectionQualityLocal
da conexão local medida localmente (porcentagem de pacotes entregues de ponta a ponta em ordem).
Taxa de sucesso de entrega de pacotes remotos ConnectionStatus.connectionQualityRemote
conforme observado no host remoto.
ConnectionStatus.outPacketsPerSecond
taxas atuais de pacotes de saída do histórico recente.
ConnectionStatus.outBytesPerSecond
taxas de dados de saída atuais do histórico recente.
ConnectionStatus.inPacketsPerSecond
taxas atuais de pacotes de entrada do histórico recente.
ConnectionStatus.inBytesPerSecond
taxas de dados de entrada atuais do histórico recente.
ConnectionStatus.sendRateBytesPerSecond
taxa estimada na qual os dados podem ser enviados para um ponto. Pode ser significativamente maior que ConnectionStatus.outBytesPerSecond
, o que significa que a capacidade do canal é maior que os dados enviados.
ConnectionStatus.pendingUnreliable
Número de bytes pendentes para serem enviados de forma não confiável. São dados que recentemente solicitaram o envio, mas ainda não foram realmente transmitidos.
ConnectionStatus.pendingReliable
Número de bytes pendentes para serem enviados de forma confiável. O número confiável também inclui dados que foram previamente colocados na rede, mas que agora foram programados para retransmissão. Assim, é possível observar o aumento dos bytes entre duas verificações, mesmo que nenhuma chamada tenha sido feita para enviar dados confiáveis entre as verificações. Os dados que aguardam o atraso do Nagle aparecerão nesses números.
ConnectionStatus.sentUnackedReliable
Número de bytes de dados confiáveis que foram colocados na ligação, mas para os quais ainda não receberam uma confirmação e, portanto, podem ter que ser retransmitidos.
Contém dados organizados de identidade de rede.
NetworkingIdentity.type
descrição de uma identidade de rede.
NetworkingIdentity.IsInvalid
verifica se a identidade tem o tipo inválido.
NetworkingIdentity.GetSteamID()
obtém o ID do Steam.
NetworkingIdentity.SetSteamID(ulong steamID)
define o Steam ID.
Contém dados organizados de mensagem de rede.
NetworkingMessage.identity
identificador de um remetente.
NetworkingMessage.connectionUserData
Dados de conexão fornecidos pelo usuário que são definidos usando a função NetworkingSockets.SetConnectionUserData()
.
NetworkingMessage.timeReceived
de data e hora local recebido quando a mensagem foi recebida.
Número da mensagem NetworkingMessage.messageNumber
atribuído por um remetente.
Carga útil NetworkingMessage.data
de uma mensagem.
NetworkingMessage.length
Comprimento da carga útil.
NetworkingMessage.connection
ID de conexão de onde veio a mensagem.
Número do canal NetworkingMessage.channel
em que a mensagem foi recebida.
Sinalizadores NetworkingMessage.flags
que foram usados para enviar a mensagem.
NetworkingMessage.CopyTo(byte[] destination)
copia a carga útil da mensagem para a matriz de destino.
NetworkingMessage.Destroy()
destrói a mensagem. Deve ser chamado apenas quando as mensagens são obtidas de soquetes.
Contém um ponteiro gerenciado para os soquetes.
NetworkingSockets.CreateListenSocket(ref Address address, Configuration[] configurations)
cria um soquete com configurações opcionais e retorna um ID de soquete que escuta conexões de entrada iniciadas pela função NetworkingSockets.Connect()
.
NetworkingSockets.Connect(ref Address address, Configuration[] configurations)
inicia uma conexão com um host externo com configurações opcionais. Retorna um ID de conexão local.
NetworkingSockets.AcceptConnection(Connection connection)
aceita uma conexão de entrada recebida em um soquete de escuta. Quando uma tentativa de conexão é recebida (talvez após a troca de alguns pacotes básicos de handshake para evitar falsificação trivial), um objeto de interface de conexão é criado no estado ConnectionState.Connecting
e um StatusCallback()
é chamado. Retorna um resultado descrito na enumeração Result
.
NetworkingSockets.CloseConnection(Connection connection, int reason, string debug, bool enableLinger)
desconecta do host e invalida o identificador de conexão. Quaisquer dados não lidos na conexão serão descartados. O parâmetro reason é um código opcional fornecido pelo usuário que será recebido do outro lado e registrado (quando possível) na análise de backend. O log de depuração poderá indicar um erro se o código de razão estiver fora do intervalo aceitável. O parâmetro debug é uma string de diagnóstico legível opcional que será recebida na outra extremidade e registrada (quando possível) na análise de back-end. Se o usuário desejar colocar o soquete em um estado persistente, onde é feita uma tentativa de liberar quaisquer dados enviados restantes, o parâmetro linger deve ser habilitado, caso contrário, os dados confiáveis não serão liberados. Se a conexão já tiver terminado, o código de razão, a sequência de depuração e o parâmetro linger serão ignorados. Retorna verdadeiro em caso de sucesso ou falso em caso de falha.
NetworkingSockets.CloseListenSocket(ListenSocket socket, string remoteReason)
destrói o soquete de escuta e todos os soquetes de cliente gerados pela aceitação de conexões no soquete de escuta. O motivo remoto determina quais ações de limpeza são executadas nos soquetes do cliente que estão sendo destruídos. Se a limpeza for solicitada e o usuário tiver solicitado o soquete de escuta vinculado a uma porta local específica para facilitar conexões IPv4 diretas, o soquete UDP subjacente deverá permanecer aberto até que todos os clientes tenham sido limpos. Retorna verdadeiro em caso de sucesso ou falso em caso de falha.
NetworkingSockets.SetConnectionUserData(Connection peer, long userData)
define dados fornecidos pelo usuário para a conexão. Retorna verdadeiro em caso de sucesso ou falso em caso de falha.
NetworkingSockets.GetConnectionUserData(Connection peer)
retorna dados fornecidos pelo usuário ou -1 se um identificador for inválido ou se algum dado não tiver sido definido para a conexão.
NetworkingSockets.SetConnectionName(Connection peer, string name)
define um nome para a conexão, usado principalmente para depuração.
NetworkingSockets.GetConnectionName(Connection peer, StringBuilder name, int maxLength)
busca o nome da conexão para a string mutável. Retorna verdadeiro em caso de sucesso ou falso em caso de falha.
NetworkingSockets.SendMessageToConnection(Connection connection, byte[] data, int length, SendFlags flags)
envia uma mensagem para o host no soquete conectado. Os parâmetros comprimento e tipo de envio são opcionais. Vários sinalizadores podem ser especificados de uma só vez. Retorna um resultado descrito na enumeração Result
. O ponteiro IntPtr
para um buffer nativo pode ser usado em vez de uma referência a uma matriz de bytes.
NetworkingSockets.FlushMessagesOnConnection(Connection connection)
se o Nagle estiver habilitado (está habilitado por padrão), então a mensagem será enfileirada no tempo do Nagle antes de ser enviada, para mesclar pequenas mensagens no mesmo pacote. Chame essa função para liberar todas as mensagens na fila e enviá-las imediatamente no próximo horário de transmissão. Retorna um resultado descrito na enumeração Result
.
NetworkingSockets.ReceiveMessagesOnConnection(Connection connection, NetworkingMessage[] messages, int maxMessages)
busca as próximas mensagens disponíveis do soquete para uma conexão. Retorna um número de mensagens ou -1 se o identificador de conexão for inválido. A ordem das mensagens retornadas no array é relevante. Mensagens confiáveis serão recebidas na ordem em que foram enviadas. Se alguma mensagem for obtida, message.Destroy()
deve ser chamado para cada uma delas para liberar recursos.
NetworkingSockets.GetConnectionInfo(Connection connection, ref ConnectionInfo info)
obtém informações sobre a conexão especificada. Retorna verdadeiro em caso de sucesso ou falso em caso de falha.
NetworkingSockets.GetQuickConnectionStatus(Connection connection, ref ConnectionStatus status)
obtém um breve conjunto de status de conexão que pode ser exibido ao usuário no jogo. Retorna verdadeiro em caso de sucesso ou falso em caso de falha.
NetworkingSockets.GetDetailedConnectionStatus(Connection connection, StringBuilder status, int statusLength)
obtém estatísticas detalhadas de conexão em um formato imprimível. Retorna 0 em caso de sucesso, -1 em caso de falha ou > 0 se a capacidade da string mutável não for suficiente.
NetworkingSockets.GetListenSocketAddress(ListenSocket socket, ref Address address)
obtém o IP local e o número da porta de um soquete de escuta. Retorna verdadeiro em caso de sucesso ou falso em caso de falha.
NetworkingSockets.CreateSocketPair(Connection connectionLeft, Connection connectionRight, bool useNetworkLoopback, ref NetworkingIdentity identityLeft, ref NetworkingIdentity identityRight)
cria um par de conexões que se comunicam entre si, por exemplo, uma comunicação de loopback. As duas conexões serão imediatamente colocadas no estado conectado e nenhum retorno de chamada será chamado. Depois disso, se uma das conexões for fechada, a outra conexão receberá um retorno de chamada, exatamente como se estivessem se comunicando pela rede. Por padrão, buffers internos são usados, ignorando completamente a rede, dividindo mensagens em pacotes, criptografando, copiando a carga útil, etc. Isso significa que os pacotes de loopback, por padrão, não simularão atraso ou perda. O parâmetro de loopback de rede habilitado fará com que o par de soquetes envie pacotes através do dispositivo de loopback da rede local em portas efêmeras. Latência e perda falsas são suportadas neste caso, e tempo de CPU é gasto para criptografar e descriptografar.
NetworkingSockets.GetIdentity()
obtém uma identidade associada aos soquetes.
NetworkingSockets.CreatePollGroup()
cria um novo grupo de pesquisa para conexões. Retorna o identificador do grupo de sondagem.
NetworkingSockets.DestroyPollGroup(PollGroup pollGroup)
destrói um grupo de pesquisa. Se houver conexões no grupo de sondagem, elas serão removidas do grupo e deixadas em um estado onde não fazem parte de nenhum grupo de sondagem. Retorna falso se for aprovado um identificador de grupo de pesquisa inválido.
NetworkingSockets.SetConnectionPollGroup(PollGroup pollGroup, Connection connection)
atribui uma conexão a um grupo de pesquisa. Uma conexão só pode pertencer a um único grupo de pesquisa. Adicionar uma conexão a um grupo de sondagem remove-a implicitamente de qualquer outro grupo de sondagem. Você pode passar o valor zero para o parâmetro poll group para remover uma conexão de seu grupo poll atual. Se houver mensagens recebidas atualmente pendentes na conexão, será feita uma tentativa de adicioná-las à fila de mensagens do grupo de sondagem aproximadamente na ordem que seria aplicada se a conexão já fizesse parte do grupo de sondagem no momento em que o grupo de sondagem mensagens foram recebidas. Retornará falso se o identificador de conexão for inválido ou se o identificador do grupo de pesquisa for inválido.
NetworkingSockets.ReceiveMessagesOnPollGroup()
busca as próximas mensagens disponíveis do soquete em qualquer conexão no grupo de pesquisa. Examine NetworkingMessage.connection
para identificar a conexão. A ordem de entrega das mensagens entre diferentes conexões geralmente corresponderá à ordem em que o último pacote foi recebido e que completou a mensagem. Mas isto não é uma garantia forte, especialmente para pacotes recebidos no momento em que uma conexão está sendo atribuída ao grupo de pesquisa. A ordem de entrega das mensagens na mesma conexão está bem definida e as mesmas garantias estão presentes. As mensagens não são agrupadas por conexão, portanto não necessariamente aparecerão consecutivamente na lista, podendo estar intercaladas com mensagens de outras conexões. Retorna um número de mensagens ou -1 se o identificador do grupo de sondagem for inválido.
NetworkingSockets.RunCallbacks()
despacha retornos de chamada, se disponíveis.
NetworkingUtils.Dispose()
destrói os utilitários de rede e limpa recursos não gerenciados.
NetworkingUtils.Time
retorna um tempo monotônico local atual em microssegundos. Ele nunca é redefinido enquanto o aplicativo permanece ativo.
NetworkingUtils.FirstConfigurationValue
obtém o menor valor de configuração numerado disponível no ambiente atual.
NetworkingUtils.SetStatusCallback(StatusCallback callback)
define um retorno de chamada para atualizações de status de conexão. Retorna verdadeiro em caso de sucesso ou falso em caso de falha.
NetworkingUtils.SetDebugCallback(DebugType detailLevel, DebugCallback callback)
define um retorno de chamada para saída de depuração.
NetworkingUtils.SetConfigurationValue(ConfigurationValue configurationValue, ConfigurationScope configurationScope, IntPtr scopeObject, ConfigurationDataType dataType, IntPtr value)
define um valor de configuração de acordo com ConfigurationValue
, ConfigurationScope
e ConfigurationDataType
enumerações. O parâmetro value deve ser uma referência ao valor real.
NetworkingUtils.SetConfigurationValue(Configuration configuration, ConfigurationScope configurationScope, IntPtr scopeObject)
define uma configuração usando a estrutura Configuration
de acordo com a enumeração ConfigurationScope
.
NetworkingUtils.GetConfigurationValue(ConfigurationValue configurationValue, ConfigurationScope configurationScope, IntPtr scopeObject, ref ConfigurationDataType dataType, ref IntPtr result, ref IntPtr resultLength)
obtém um valor de configuração de acordo com as enumerações ConfigurationValue
, ConfigurationScope
e ConfigurationDataType
.
Contém campos constantes.
Library.maxCloseMessageLength
o comprimento máximo da sequência de motivos em bytes quando uma conexão é fechada.
Library.maxMessageSize
o tamanho máximo de uma única mensagem que pode ser enviada.
Library.Initialize(ref NetworkingIdentity identity, StringBuilder errorMessage)
inicializa a biblioteca nativa com identidade opcional que será associada aos soquetes. O parâmetro mensagem de erro é opcional e deve ser usado para determinar erros durante a inicialização. A capacidade de uma sequência mutável para uma mensagem de erro deve ser igual a Library.maxErrorMessageLength
.
Library.Deinitialize()
desinicializa a biblioteca nativa. Deve ser chamado após a conclusão do trabalho.