Ce référentiel fournit une abstraction C# gérée de la bibliothèque GameNetworkingSockets qui est créée et maintenue par Valve Software. Vous devrez créer la bibliothèque native avec toutes les dépendances requises avant de commencer.
Le projet est mis à jour conformément aux versions de la bibliothèque native.
Un assembly managé peut être créé à l’aide de n’importe quelle plate-forme de compilation disponible prenant en charge C# 3.0 ou version ultérieure.
Définissez VALVESOCKETS_SPAN
pour activer la prise en charge de Span. Veuillez suivre ces étapes pour permettre un accès rapide aux blocs de mémoire natifs et améliorer les performances.
Avant de commencer à travailler, la bibliothèque doit être initialisée à l'aide de Valve.Sockets.Library.Initialize();
fonction.
Une fois le travail terminé, désinitialisez la bibliothèque à l'aide de Valve.Sockets.Library.Deinitialize();
fonction.
NetworkingSockets server = new NetworkingSockets();uint pollGroup = server.CreatePollGroup();StatusCallback status = (réf. 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("Client connecté - ID : " + info.connection + ", IP : " + info.connectionInfo.address.GetIP());break;case ConnectionState.ClosedByPeer:case ConnectionState.ProblemDetectedLocally:server .CloseConnection(info.connection);Console.WriteLine("Client déconnecté - ID : " + info.connection + ", IP : " + info.connectionInfo.address.GetIP());break;}};utils.SetStatusCallback(status);Address adresse = new Address();address.SetAddress("::0", port);uint ListenSocket = server .CreateListenSocket(ref adresse);#if VALVESOCKETS_SPANMessageCallback message = (dans NetworkingMessage netMessage) => {Console.WriteLine("Message reçu de - ID : " + netMessage.connection + ", ID de canal : " + netMessage.channel + ", Longueur des données : " + netMessage.length);};#else const int maxMessages = 20 ;NetworkingMessage[] netMessages = nouveau NetworkingMessage[maxMessages];#endifwhile (!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 ("Message reçu de - ID : " + netMessage.connection + ", ID de canal : " + netMessage.channel + ", Longueur des données : " + netMessage.length);netMessage.Destroy();}} #endif Thread.Sleep(15);}server.DestroyPollGroup(pollGroup);
Client NetworkingSockets = new NetworkingSockets();uint connection = 0;StatusCallback status = (réf. StatusInfo info) => {switch (info.connectionInfo.state) {case ConnectionState.None:break;case ConnectionState.Connected:Console.WriteLine(" Client connecté au serveur - ID : " + connexion);break;case ConnectionState.ClosedByPeer:case ConnectionState.ProblemDetectedLocally:client.CloseConnection(connection);Console.WriteLine("Client déconnecté du serveur");break;}};utils.SetStatusCallback(status);Address address = new Address();address.SetAddress(":: 1", port);connection = client.Connect(adresse de référence);#if VALVESOCKETS_SPANMessageCallback message = (dans NetworkingMessage netMessage) => {Console.WriteLine("Message reçu du serveur - ID de canal : " + netMessage.channel + ", Longueur des données : " + netMessage.length);};#else const int maxMessages = 20;NetworkingMessage[] netMessages = nouveau NetworkingMessage[maxMessages];#endifwhile (!Console.KeyAvailable) {client.RunCallbacks(); #if VALVESOCKETS_SPANclient.ReceiveMessagesOnConnection(connection, message, 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 ("Message reçu du serveur - ID de canal : " + netMessage.channel + ", Longueur des données : " + netMessage.length);netMessage.Destroy();}} #endif Thread.Sleep(15);}
byte[] data = new byte[64];sockets.SendMessageToConnection(connection, data);
byte[] buffer = new byte[1024];netMessage.CopyTo(buffer);
DebugCallback debug = (type, message) => {Console.WriteLine("Debug - Type : " + type + ", Message : " + message);};NetworkingUtils utils = new NetworkingUtils();utils.SetDebugCallback(DebugType.Everything , débogage);
L'utilisation est quasiment la même que dans l'environnement .NET, sauf que les fonctions de la console doivent être remplacées par des fonctions fournies par Unity. Si NetworkingSockets.RunCallbacks()
doit être appelé dans une boucle de jeu, laissez Unity s'exécuter en arrière-plan en activant l'option appropriée dans les paramètres du lecteur.
Définitions d'un indicateur pour la fonction NetworkingSockets.SendMessageToConnection()
:
SendFlags.Unreliable
peu fiable, la livraison du message n'est pas garantie, le message peut être livré dans le désordre.
SendFlags.Reliable
fiable ordonné, un message doit être reçu par la connexion cible et des tentatives de renvoi doivent être effectuées jusqu'à ce que le message soit livré.
SendFlags.NoNagle
un message ne sera pas regroupé avec d'autres messages dans un minuteur.
SendFlags.NoDelay
un message ne sera pas mis en mémoire tampon s'il ne peut pas être envoyé relativement rapidement.
Définitions du type d'identité pour la structure NetworkingIdentity
:
IdentityType.Invalid
inconnu ou invalide.
IdentityType.SteamID
Identifiant Steam.
IdentityType.IPAddress
Adresse IPv4/IPv6.
Définitions des états de connexion pour le champ ConnectionInfo.state
:
État factice ConnectionState.None
, la connexion n’existe pas ou a déjà été fermée.
ConnectionState.Connecting
en cours d’établissement d’une connexion initiée par la fonction NetworkingSockets.Connect()
.
ConnectionState.FindingRoute
si le serveur accepte la connexion, alors cette connexion passe à l'état de rendez-vous, mais la route de bout en bout n'est toujours pas encore établie (via le réseau relais).
ConnectionState.Connected
une demande de connexion initiée par la fonction NetworkingSockets.Connect()
est terminée.
ConnectionState.ClosedByPeer
une connexion a été fermée par l'homologue, mais pas fermée localement. S'il y a des messages dans la file d'attente entrante, ils peuvent être récupérés. Sinon, rien ne peut être fait avec la connexion sauf la fermer à l'aide de la fonction NetworkingSockets.CloseConnection()
. La connexion existe toujours du point de vue de l'API et doit être fermée pour libérer des ressources.
ConnectionState.ProblemDetectedLocally
une interruption de la connexion a été détectée localement. Les tentatives d’envoi d’autres messages échoueront. Tous les messages reçus restants dans la file d'attente sont disponibles. La connexion existe toujours du point de vue de l'API et doit être fermée pour libérer des ressources.
Définitions des étendues de configuration :
ConfigurationScope.Global
ConfigurationScope.SocketsInterface
ConfigurationScope.ListenSocket
ConfigurationScope.Connection
Définitions des types de données de configuration :
ConfigurationDataType.Int32
ConfigurationDataType.Int64
ConfigurationDataType.Float
ConfigurationDataType.String
ConfigurationDataType.FunctionPtr
Définitions des valeurs de configuration :
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
Définitions des résultats des valeurs de configuration :
ConfigurationValueResult.BadValue
ConfigurationValueResult.BadScopeObject
ConfigurationValueResult.BufferTooSmall
ConfigurationValueResult.OK
ConfigurationValueResult.OKInherited
Définitions des types de débogage :
DebugType.None
DebugType.Bug
DebugType.Error
DebugType.Important
DebugType.Warning
DebugType.Message
DebugType.Verbose
DebugType.Debug
DebugType.Everything
Définitions du résultat de l'opération :
Result.OK
succès.
Result.Fail
générique.
Result.NoConnection
a échoué la connexion réseau.
Result.InvalidParam
un paramètre est incorrect.
L'objet appelé Result.InvalidState
était dans un état non valide.
Result.Ignored
La cible ignorée ignore un expéditeur.
Fournit des événements par socket.
StatusCallback(ref StatusInfo info)
avertit lorsque le mécanisme de répartition sur la socket d'écoute renvoie un état de connexion. Une référence au délégué doit être préservée du garbage collection.
Fournit des événements par application.
DebugCallback(DebugType type, string message)
avertit lorsque des informations de débogage avec la verbosité souhaitée apparaissent. Une référence au délégué doit être préservée du garbage collection.
Contient des données rassemblées avec une adresse IP et un numéro de port.
Address.ip
Adresse IP en octets.
Address.port
numéro de port.
Address.IsLocalHost
vérifie si l’identité est localhost.
Address.GetIP()
obtient une adresse IP sous une forme imprimable.
Address.SetLocalHost(ushort port)
définit localhost avec un port spécifié.
Address.SetAddress(string ip, ushort port)
définit une adresse IP (IPv4/IPv6) avec un port spécifié.
Address.Equals(Address other)
détermine l’égalité des adresses.
Contient des données rassemblées avec configuration.
Configuration.value
un type de valeur décrite dans l'énumération ConfigurationValue
.
Configuration.dataType
un type de données décrit dans l'énumération ConfigurationDataType
.
Configuration.data
une union de données de configuration.
Contient des données marshallées avec l’état de connexion.
ID de connexion StatusInfo.connection
.
StatusInfo.connectionInfo
essentiellement une structure ConnectionInfo
avec des données marshallées.
Contient des données rassemblées avec des informations de connexion.
Identifiant ConnectionInfo.identity
d’un point de terminaison.
Données fournies par l'utilisateur ConnectionInfo.userData
définies à l'aide de la fonction NetworkingSockets.SetConnectionUserData()
.
ConnectionInfo.listenSocket
socket d'écoute pour cette connexion.
ConnectionInfo.address
Adresse distante d'un point de terminaison.
État de haut niveau ConnectionInfo.state
de la connexion décrite dans l'énumération ConnectionState
.
ConnectionInfo.endReason
cause fondamentale de l’interruption ou du problème de connexion.
Explication ConnectionInfo.endDebug
sous une forme lisible par l'homme pour la terminaison ou le problème de connexion. Ceci est destiné uniquement à des fins de diagnostic de débogage, et non à l'affichage aux utilisateurs. Il peut contenir des détails spécifiques au problème.
La description du débogage ConnectionInfo.connectionDescription
inclut le descripteur de connexion, le type de connexion et les informations sur les homologues.
Contient des données rassemblées avec l'état de connexion pour les demandes fréquentes.
État de haut niveau ConnectionStatus.state
de la connexion décrite dans l'énumération ConnectionState
.
ConnectionStatus.ping
ping actuel en millisecondes.
Qualité de connexion ConnectionStatus.connectionQualityLocal
mesurée localement (pourcentage de paquets livrés de bout en bout dans l'ordre).
Taux de réussite de la livraison des paquets ConnectionStatus.connectionQualityRemote
tel qu'observé depuis l'hôte distant.
ConnectionStatus.outPacketsPerSecond
taux actuels de paquets sortants de l’historique récent.
ConnectionStatus.outBytesPerSecond
débits de données sortants actuels de l’historique récent.
ConnectionStatus.inPacketsPerSecond
taux actuels de paquets entrants de l’historique récent.
ConnectionStatus.inBytesPerSecond
débits de données entrants actuels de l’historique récent.
ConnectionStatus.sendRateBytesPerSecond
taux estimé auquel les données peuvent être envoyées à un homologue. Elle pourrait être nettement supérieure à ConnectionStatus.outBytesPerSecond
, ce qui signifie que la capacité du canal est supérieure aux données envoyées.
ConnectionStatus.pendingUnreliable
nombre d'octets en attente d'envoi non fiable. Il s’agit de données qui ont récemment demandé à être envoyées mais qui n’ont pas encore été mises en ligne.
ConnectionStatus.pendingReliable
Nombre d'octets en attente d'envoi fiable. Le numéro fiable comprend également des données qui étaient auparavant mises en ligne mais dont la retransmission est désormais programmée. Ainsi, il est possible d'observer une augmentation des octets entre deux contrôles, même si aucun appel n'a été effectué pour envoyer des données fiables entre les contrôles. Les données en attente du délai Nagle apparaîtront dans ces chiffres.
ConnectionStatus.sentUnackedReliable
Nombre d'octets de données fiables qui ont été placés sur le câble, mais pour lesquels aucun accusé de réception n'a encore été reçu et qui pourraient donc devoir être retransmis.
Contient des données rassemblées sur l’identité réseau.
NetworkingIdentity.type
description d’une identité réseau.
NetworkingIdentity.IsInvalid
vérifie si l'identité a un type non valide.
NetworkingIdentity.GetSteamID()
obtient l'ID Steam.
NetworkingIdentity.SetSteamID(ulong steamID)
définit l'ID Steam.
Contient les données rassemblées du message réseau.
NetworkingMessage.identity
identifiant d'un expéditeur.
Données de connexion fournies par l'utilisateur NetworkingMessage.connectionUserData
et définies à l'aide de la fonction NetworkingSockets.SetConnectionUserData()
.
NetworkingMessage.timeReceived
horodatage local lorsque le message a été reçu.
NetworkingMessage.messageNumber
numéro de message attribué par un expéditeur.
Charge utile NetworkingMessage.data
d’un message.
NetworkingMessage.length
longueur de la charge utile.
ID de connexion NetworkingMessage.connection
d’où provient le message.
Numéro de canal NetworkingMessage.channel
sur lequel le message a été reçu.
NetworkingMessage.flags
indicateurs qui ont été utilisés pour envoyer le message.
NetworkingMessage.CopyTo(byte[] destination)
copie la charge utile du message vers le tableau de destination.
NetworkingMessage.Destroy()
détruit le message. Doit être appelé uniquement lorsque les messages sont obtenus à partir des sockets.
Contient un pointeur géré vers les sockets.
NetworkingSockets.CreateListenSocket(ref Address address, Configuration[] configurations)
crée un socket avec des configurations facultatives et renvoie un ID de socket qui écoute les connexions entrantes initiées par la fonction NetworkingSockets.Connect()
.
NetworkingSockets.Connect(ref Address address, Configuration[] configurations)
initie une connexion à un hôte étranger avec des configurations facultatives. Renvoie un ID de connexion locale.
NetworkingSockets.AcceptConnection(Connection connection)
accepte une connexion entrante reçue sur une socket d'écoute. Lorsqu'une tentative de connexion est reçue (peut-être après que quelques paquets de prise de contact de base ont été échangés pour empêcher une usurpation d'identité triviale), un objet d'interface de connexion est créé dans l'état ConnectionState.Connecting
et un StatusCallback()
est appelé. Renvoie un résultat décrit dans l'énumération Result
.
NetworkingSockets.CloseConnection(Connection connection, int reason, string debug, bool enableLinger)
se déconnecte de l'hôte et invalide le descripteur de connexion. Toutes les données non lues sur la connexion sont supprimées. Le paramètre de raison est un code facultatif fourni par l'utilisateur qui sera reçu à l'autre extrémité et enregistré (si possible) dans les analyses back-end. La journalisation du débogage peut indiquer une erreur si le code de raison est hors de la plage acceptable. Le paramètre debug est une chaîne de diagnostic facultative lisible par l'homme qui sera reçue à l'autre extrémité et enregistrée (si possible) dans les analyses back-end. Si l'utilisateur souhaite mettre le socket dans un état persistant, dans lequel une tentative est faite pour vider toutes les données envoyées restantes, le paramètre linger doit être activé, sinon les données fiables ne seront pas vidées. Si la connexion est déjà terminée, le code anomalie, la chaîne de débogage et le paramètre linger sont ignorés. Renvoie vrai en cas de succès ou faux en cas d'échec.
NetworkingSockets.CloseListenSocket(ListenSocket socket, string remoteReason)
détruit le socket d'écoute et toutes les sockets client générées en acceptant des connexions sur le socket d'écoute. La raison distante détermine quelles actions de nettoyage sont effectuées sur les sockets client en cours de destruction. Si un nettoyage est demandé et que l'utilisateur a demandé que le socket d'écoute soit lié à un port local particulier pour faciliter les connexions IPv4 directes, le socket UDP sous-jacent doit rester ouvert jusqu'à ce que tous les clients aient été nettoyés. Renvoie vrai en cas de succès ou faux en cas d'échec.
NetworkingSockets.SetConnectionUserData(Connection peer, long userData)
définit les données fournies par l'utilisateur pour la connexion. Renvoie vrai en cas de succès ou faux en cas d'échec.
NetworkingSockets.GetConnectionUserData(Connection peer)
renvoie des données fournies par l'utilisateur ou -1 si un handle n'est pas valide ou si aucune donnée n'a été définie pour la connexion.
NetworkingSockets.SetConnectionName(Connection peer, string name)
définit un nom pour la connexion, utilisé principalement pour le débogage.
NetworkingSockets.GetConnectionName(Connection peer, StringBuilder name, int maxLength)
récupère le nom de connexion vers la chaîne mutable. Renvoie vrai en cas de succès ou faux en cas d'échec.
NetworkingSockets.SendMessageToConnection(Connection connection, byte[] data, int length, SendFlags flags)
envoie un message à l'hôte sur le socket connecté. Les paramètres de longueur et de type d’envoi sont facultatifs. Plusieurs indicateurs peuvent être spécifiés à la fois. Renvoie un résultat décrit dans l'énumération Result
. Le pointeur IntPtr
vers un tampon natif peut être utilisé à la place d’une référence à un tableau d’octets.
NetworkingSockets.FlushMessagesOnConnection(Connection connection)
si le Nagle est activé (il est activé par défaut), le message sera mis en file d'attente le temps de Nagle avant d'être envoyé, pour fusionner les petits messages dans le même paquet. Appelez cette fonction pour vider tous les messages en file d'attente et les envoyer immédiatement à la prochaine heure de transmission. Renvoie un résultat décrit dans l'énumération Result
.
NetworkingSockets.ReceiveMessagesOnConnection(Connection connection, NetworkingMessage[] messages, int maxMessages)
récupère les prochains messages disponibles du socket pour une connexion. Renvoie un certain nombre de messages ou -1 si le handle de connexion n'est pas valide. L'ordre des messages renvoyés dans le tableau est pertinent. Les messages fiables seront reçus dans l’ordre dans lequel ils ont été envoyés. Si des messages sont obtenus, message.Destroy()
doit être appelé pour chacun d'eux afin de libérer des ressources.
NetworkingSockets.GetConnectionInfo(Connection connection, ref ConnectionInfo info)
obtient des informations sur la connexion spécifiée. Renvoie vrai en cas de succès ou faux en cas d'échec.
NetworkingSockets.GetQuickConnectionStatus(Connection connection, ref ConnectionStatus status)
obtient un bref ensemble d'état de connexion qui peut être affiché à l'utilisateur dans le jeu. Renvoie vrai en cas de succès ou faux en cas d'échec.
NetworkingSockets.GetDetailedConnectionStatus(Connection connection, StringBuilder status, int statusLength)
obtient des statistiques de connexion détaillées sous une forme imprimable. Renvoie 0 en cas de succès, -1 en cas d'échec ou > 0 si la capacité de la chaîne mutable n'est pas suffisante.
NetworkingSockets.GetListenSocketAddress(ListenSocket socket, ref Address address)
obtient l'adresse IP locale et le numéro de port d'un socket d'écoute. Renvoie vrai en cas de succès ou faux en cas d'échec.
NetworkingSockets.CreateSocketPair(Connection connectionLeft, Connection connectionRight, bool useNetworkLoopback, ref NetworkingIdentity identityLeft, ref NetworkingIdentity identityRight)
crée une paire de connexions qui communiquent entre elles, par exemple une communication en boucle. Les deux connexions seront immédiatement placées dans l'état connecté et aucun rappel ne sera appelé. Après cela, si l'une des connexions est fermée, l'autre connexion recevra un rappel, exactement comme si elle communiquait sur le réseau. Par défaut, des tampons internes sont utilisés, contournant complètement le réseau, découpant les messages en paquets, chiffrant, copiant la charge utile, etc. Cela signifie que les paquets de bouclage, par défaut, ne simuleront pas de décalage ou de perte. L'activation du paramètre de bouclage réseau obligera la paire de sockets à envoyer des paquets via le périphérique de bouclage réseau local sur des ports éphémères. Les faux décalages et pertes sont pris en charge dans ce cas, et du temps CPU est dépensé pour chiffrer et déchiffrer.
NetworkingSockets.GetIdentity()
obtient une identité associée aux sockets.
NetworkingSockets.CreatePollGroup()
crée un nouveau groupe de sondage pour les connexions. Renvoie le handle du groupe de sondage.
NetworkingSockets.DestroyPollGroup(PollGroup pollGroup)
détruit un groupe de sondage. S'il existe des connexions dans le groupe de sondage, elles sont supprimées du groupe et laissées dans un état où elles ne font partie d'aucun groupe de sondage. Renvoie false si un handle de groupe de sondage non valide est transmis.
NetworkingSockets.SetConnectionPollGroup(PollGroup pollGroup, Connection connection)
attribue une connexion à un groupe d'interrogation. Une connexion ne peut appartenir qu’à un seul groupe d’interrogation. L'ajout d'une connexion à un groupe de sondage le supprime implicitement de tout autre groupe de sondage. Vous pouvez transmettre une valeur nulle au paramètre de groupe d'interrogation pour supprimer une connexion de son groupe d'interrogation actuel. Si des messages reçus sont actuellement en attente sur la connexion, une tentative est effectuée pour les ajouter à la file d'attente des messages du groupe d'interrogation dans approximativement l'ordre qui aurait été appliqué si la connexion faisait déjà partie du groupe d'interrogation au moment où le des messages ont été reçus. Renvoie false si le handle de connexion n’est pas valide ou si le handle du groupe de sondage n’est pas valide.
NetworkingSockets.ReceiveMessagesOnPollGroup()
récupère les prochains messages disponibles du socket sur n'importe quelle connexion du groupe d'interrogation. Examinez NetworkingMessage.connection
pour identifier la connexion. L'ordre de livraison des messages entre différentes connexions correspondra généralement à l'ordre de réception du dernier paquet qui a complété le message. Mais ce n'est pas une garantie solide, en particulier pour les paquets reçus juste au moment où une connexion est attribuée au groupe d'interrogation. L'ordre de livraison des messages sur une même connexion est bien défini et les mêmes garanties sont présentes. Les messages ne sont pas regroupés par connexion, ils n'apparaîtront donc pas nécessairement consécutivement dans la liste, ils peuvent être entrelacés avec des messages destinés à d'autres connexions. Renvoie un certain nombre de messages ou -1 si le descripteur du groupe de sondage n'est pas valide.
NetworkingSockets.RunCallbacks()
distribue des rappels si disponibles.
NetworkingUtils.Dispose()
détruit les utilitaires réseau et nettoie les ressources non gérées.
NetworkingUtils.Time
renvoie une heure monotone locale actuelle en microsecondes. Il ne se réinitialise jamais tant que l'application reste en vie.
NetworkingUtils.FirstConfigurationValue
obtient la valeur de configuration la plus basse disponible dans l'environnement actuel.
NetworkingUtils.SetStatusCallback(StatusCallback callback)
définit un rappel pour les mises à jour de l'état de la connexion. Renvoie vrai en cas de succès ou faux en cas d'échec.
NetworkingUtils.SetDebugCallback(DebugType detailLevel, DebugCallback callback)
définit un rappel pour la sortie de débogage.
NetworkingUtils.SetConfigurationValue(ConfigurationValue configurationValue, ConfigurationScope configurationScope, IntPtr scopeObject, ConfigurationDataType dataType, IntPtr value)
définit une valeur de configuration en fonction des énumérations ConfigurationValue
, ConfigurationScope
et ConfigurationDataType
. Le paramètre value doit être une référence à la valeur réelle.
NetworkingUtils.SetConfigurationValue(Configuration configuration, ConfigurationScope configurationScope, IntPtr scopeObject)
définit une configuration à l'aide de la structure Configuration
selon l'énumération ConfigurationScope
.
NetworkingUtils.GetConfigurationValue(ConfigurationValue configurationValue, ConfigurationScope configurationScope, IntPtr scopeObject, ref ConfigurationDataType dataType, ref IntPtr result, ref IntPtr resultLength)
obtient une valeur de configuration selon les énumérations ConfigurationValue
, ConfigurationScope
et ConfigurationDataType
.
Contient des champs constants.
Library.maxCloseMessageLength
la longueur maximale de la chaîne de motif en octets lorsqu'une connexion est fermée.
Library.maxMessageSize
la taille maximale d'un seul message pouvant être envoyé.
Library.Initialize(ref NetworkingIdentity identity, StringBuilder errorMessage)
initialise la bibliothèque native avec une identité facultative qui sera associée aux sockets. Le paramètre de message d’erreur est facultatif et doit être utilisé pour déterminer l’erreur lors de l’initialisation. La capacité d'une chaîne mutable pour un message d'erreur doit être égale à Library.maxErrorMessageLength
.
Library.Deinitialize()
désinitialise la bibliothèque native. Doit être appelé une fois les travaux terminés.