Il s'agit d'une implémentation ENet indépendante avec un protocole modifié pour C, C++, C# et d'autres langages.
Caractéristiques:
Veuillez lire les erreurs courantes pour avoir une idée de ce qui peut mal se passer.
Pour créer la bibliothèque native, un logiciel approprié est requis :
Pour les plateformes de bureau CMake avec GNU Make ou Visual Studio.
Pour les plateformes mobiles NDK pour Android et Xcode pour iOS. Assurez-vous que toutes les bibliothèques compilées sont affectées aux plates-formes et aux architectures de processeur appropriées.
Pour créer la bibliothèque pour Nintendo Switch, suivez ce guide.
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.
Vous pouvez récupérer les bibliothèques compilées dans la section des versions ou depuis NuGet :
ENet-CSharp
contient un assembly compilé avec des bibliothèques natives pour l'environnement .NET (.NET Standard 2.1).
ENet-Unity
contient un script avec des bibliothèques natives pour Unity.
Il est fortement recommandé de supprimer un dossier contenant des binaires au lieu de le remplacer pour effectuer une mise à niveau.
Ces packages sont fournis uniquement pour les plateformes traditionnelles : Windows, Linux et macOS (x64).
Versions du système d'exploitation prises en charge :
Avant de commencer à travailler, la bibliothèque doit être initialisée à l'aide de ENet.Library.Initialize();
fonction.
Une fois le travail terminé, désinitialisez la bibliothèque en utilisant ENet.Library.Deinitialize();
fonction.
using ( Host server = new Host ( ) ) {
Address address = new Address ( ) ;
address . Port = port ;
server . Create ( address , maxClients ) ;
Event netEvent ;
while ( ! Console . KeyAvailable ) {
bool polled = false ;
while ( ! polled ) {
if ( server . CheckEvents ( out netEvent ) <= 0 ) {
if ( server . Service ( 15 , out netEvent ) <= 0 )
break ;
polled = true ;
}
switch ( netEvent . Type ) {
case EventType . None :
break ;
case EventType . Connect :
Console . WriteLine ( "Client connected - ID: " + netEvent . Peer . ID + ", IP: " + netEvent . Peer . IP ) ;
break ;
case EventType . Disconnect :
Console . WriteLine ( "Client disconnected - ID: " + netEvent . Peer . ID + ", IP: " + netEvent . Peer . IP ) ;
break ;
case EventType . Timeout :
Console . WriteLine ( "Client timeout - ID: " + netEvent . Peer . ID + ", IP: " + netEvent . Peer . IP ) ;
break ;
case EventType . Receive :
Console . WriteLine ( "Packet received from - ID: " + netEvent . Peer . ID + ", IP: " + netEvent . Peer . IP + ", Channel ID: " + netEvent . ChannelID + ", Data length: " + netEvent . Packet . Length ) ;
netEvent . Packet . Dispose ( ) ;
break ;
}
}
}
server . Flush ( ) ;
}
using ( Host client = new Host ( ) ) {
Address address = new Address ( ) ;
address . SetHost ( ip ) ;
address . Port = port ;
client . Create ( ) ;
Peer peer = client . Connect ( address ) ;
Event netEvent ;
while ( ! Console . KeyAvailable ) {
bool polled = false ;
while ( ! polled ) {
if ( client . CheckEvents ( out netEvent ) <= 0 ) {
if ( client . Service ( 15 , out netEvent ) <= 0 )
break ;
polled = true ;
}
switch ( netEvent . Type ) {
case EventType . None :
break ;
case EventType . Connect :
Console . WriteLine ( "Client connected to server" ) ;
break ;
case EventType . Disconnect :
Console . WriteLine ( "Client disconnected from server" ) ;
break ;
case EventType . Timeout :
Console . WriteLine ( "Client connection timeout" ) ;
break ;
case EventType . Receive :
Console . WriteLine ( "Packet received from server - Channel ID: " + netEvent . ChannelID + ", Data length: " + netEvent . Packet . Length ) ;
netEvent . Packet . Dispose ( ) ;
break ;
}
}
}
client . Flush ( ) ;
}
Packet packet = default ( Packet ) ;
byte [ ] data = new byte [ 64 ] ;
packet . Create ( data ) ;
peer . Send ( channelID , ref packet ) ;
byte [ ] buffer = new byte [ 1024 ] ;
netEvent . Packet . CopyTo ( buffer ) ;
AllocCallback OnMemoryAllocate = ( size ) => {
return Marshal . AllocHGlobal ( size ) ;
} ;
FreeCallback OnMemoryFree = ( memory ) => {
Marshal . FreeHGlobal ( memory ) ;
} ;
NoMemoryCallback OnNoMemory = ( ) => {
throw new OutOfMemoryException ( ) ;
} ;
Callbacks callbacks = new Callbacks ( OnMemoryAllocate , OnMemoryFree , OnNoMemory ) ;
if ( ENet . Library . Initialize ( callbacks ) )
Console . WriteLine ( "ENet successfully initialized using a custom memory allocator" ) ;
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 Host.Service()
sera appelé dans une boucle de jeu, assurez-vous que le paramètre timeout est défini sur 0, ce qui signifie non bloquant. Gardez également Unity exécuté en arrière-plan en activant l'option appropriée dans les paramètres du lecteur.
La stratégie la plus connue consiste à utiliser ENet dans un thread d'E/S indépendant et à utiliser des techniques de messagerie inter-thread pour transférer des données entre threads/tâches sans aucun verrou/mutex. Les files d'attente non bloquantes comme Ring Buffer ont été conçues à ces fins. Les abstractions et la logique de haut niveau peuvent être parallélisées à l'aide de Workers, puis communiquer avec le thread d'E/S et mettre/retirer la file d'attente des messages pour envoyer/recevoir des données sur le réseau.
En général, ENet n'est pas thread-safe, mais certaines de ses fonctions peuvent être utilisées en toute sécurité si l'utilisateur est suffisamment prudent :
La structure Packet
et ses fonctions sont sûres jusqu'à ce qu'un paquet se déplace uniquement entre les threads par valeur et qu'un allocateur de mémoire personnalisé ne soit pas utilisé.
Peer.ID
dès qu'un pointeur vers un homologue a été obtenu du côté natif, l'ID sera mis en cache dans la structure Peer
pour d'autres actions avec les objets attribués à cet ID. La structure Peer
peut être déplacée entre les threads par valeur, mais ses fonctions ne sont pas thread-safe car les données en mémoire peuvent changer par le service dans un autre thread.
Library.Time
utilise des primitives atomiques en interne pour gérer l'heure monotone locale.
Définitions d'un flag pour la fonction Peer.Send()
:
PacketFlags.None
séquencé peu fiable, la livraison du paquet n'est pas garantie.
PacketFlags.Reliable
Séquencé fiable, un paquet doit être reçu par l'homologue cible et des tentatives de renvoi doivent être effectuées jusqu'à ce que le paquet soit livré.
PacketFlags.Unsequenced
un paquet ne sera pas séquencé avec d'autres paquets et peut être livré dans le désordre. Ce drapeau rend la livraison peu fiable.
PacketFlags.NoAllocate
un paquet n'attribuera pas de données et l'utilisateur devra les fournir à la place. La durée de vie des paquets doit être suivie à l’aide du rappel PacketFreeCallback
.
PacketFlags.UnreliableFragmented
un paquet ne sera pas fragmenté de manière fiable s'il dépasse la MTU. Par défaut, les paquets peu fiables qui dépassent la MTU sont fragmentés et transmis de manière fiable. Cet indicateur doit être utilisé pour indiquer explicitement les paquets qui doivent rester peu fiables.
PacketFlags.Instant
un paquet ne sera pas regroupé avec d'autres paquets lors d'une prochaine itération de service et envoyé instantanément à la place. Ce type de livraison troque l’efficacité du multiplexage au profit de la latence. Le même paquet ne peut pas être utilisé pour plusieurs appels Peer.Send()
.
PacketFlags.Unthrottled
un paquet qui a été mis en file d'attente pour un envoi de manière peu fiable ne doit pas être abandonné en raison de la limitation et envoyé si possible.
PacketFlags.Sent
un paquet a été envoyé à partir de toutes les files d'attente dans lesquelles il est entré.
Définitions des types d'événements pour la propriété Event.Type
:
EventType.None
aucun événement ne s'est produit dans le délai spécifié.
EventType.Connect
une demande de connexion initiée par la fonction Peer.Connect()
est terminée. Event.Peer
renvoie un homologue qui s'est connecté avec succès. Event.Data
renvoie les données fournies par l'utilisateur décrivant la connexion ou 0 si aucune n'est disponible.
EventType.Disconnect
un homologue s’est déconnecté. Cet événement est généré lors de la réussite d'une déconnexion initiée par la fonction Peer.Disconnect()
. Event.Peer
renvoie un homologue qui s'est déconnecté. Event.Data
renvoie les données fournies par l'utilisateur décrivant la déconnexion ou 0 si aucune n'est disponible.
EventType.Receive
qu'un paquet a été reçu d'un homologue. Event.Peer
renvoie un homologue qui a envoyé le paquet. Event.ChannelID
spécifie le numéro de canal sur lequel le paquet a été reçu. Event.Packet
renvoie un paquet qui a été reçu, et ce paquet doit être détruit à l'aide de la fonction Event.Packet.Dispose()
après utilisation.
EventType.Timeout
Un homologue a expiré. Cet événement se produit si un homologue a expiré ou si une demande de connexion initialisée par Peer.Connect()
a expiré. Event.Peer
renvoie un homologue dont le délai a expiré.
Définitions des états homologues pour la propriété Peer.State
:
PeerState.Uninitialized
un homologue non initialisé.
PeerState.Disconnected
un homologue déconnecté ou expiré.
PeerState.Connecting
d’une connexion homologue en cours.
PeerState.Connected
un homologue connecté avec succès.
PeerState.Disconnecting
d'une déconnexion homologue en cours.
PeerState.Zombie
un homologue mal déconnecté.
Fournit des événements par application.
AllocCallback(IntPtr size)
avertit lorsqu'une mémoire est demandée pour l'allocation. Attend un pointeur vers la mémoire nouvellement allouée. Une référence au délégué doit être préservée du garbage collection.
FreeCallback(IntPtr memory)
avertit lorsque la mémoire peut être libérée. Une référence au délégué doit être préservée du garbage collection.
NoMemoryCallback()
avertit lorsque la mémoire n'est pas suffisante. Une référence au délégué doit être préservée du garbage collection.
Fournit des événements par paquet.
PacketFreeCallback(Packet packet)
avertit lorsqu'un paquet est détruit. Indique si un paquet fiable a été reconnu. Une référence au délégué doit être préservée du garbage collection.
Fournit des événements par hôte.
InterceptCallback(ref Event @event, ref Address address, IntPtr receivedData, int receivedDataLength)
avertit lorsqu'un paquet UDP brut est intercepté. Le code d'état renvoyé par ce rappel indique à ENet comment l'événement défini doit être géré. Le retour de 1 indique l’envoi de l’événement défini par le service. Le retour de 0 indique que les sous-systèmes ENet doivent gérer les données reçues. Renvoyer -1 indique une erreur. Une référence au délégué doit être préservée du garbage collection.
ChecksumCallback(IntPtr buffers, int bufferCount)
avertit quand une somme de contrôle doit être calculée pour les tampons lors de l'envoi et de la réception. Une valeur renvoyée par ce rappel est une somme de contrôle de 64 bits. ENet gère automatiquement la vérification de l'intégrité des paquets si un mécanisme de somme de contrôle est activé aux deux extrémités. Peut être utilisé avec la fonction ENet.Library.CRC64()
. Une référence au délégué doit être préservée du garbage collection.
Contient une structure avec des données d'hôte anonymes et un numéro de port.
Address.Port
obtient ou définit un numéro de port.
Address.GetIP()
obtient une adresse IP.
Address.SetIP(string ip)
définit une adresse IP. Pour utiliser la diffusion IPv4 sur le réseau local, l'adresse peut être définie sur 255.255.255.255 pour un client. ENet répondra automatiquement à la diffusion et mettra à jour l'adresse avec l'adresse IP réelle d'un serveur.
Address.GetHost()
tente d'effectuer une recherche inversée à partir de l'adresse. Renvoie une chaîne avec un nom résolu ou une adresse IP.
Address.SetHost(string hostName)
définit le nom d'hôte ou une adresse IP. Doit être utilisé pour la liaison à une interface réseau ou pour la connexion à un hôte étranger. Renvoie vrai en cas de succès ou faux en cas d'échec.
Contient la structure avec le type d'événement, le pointeur géré vers l'homologue, l'ID de canal, les données fournies par l'utilisateur et le pointeur géré vers le paquet.
Event.Type
renvoie un type de l'événement.
Event.Peer
renvoie un homologue qui a généré un événement de connexion, de déconnexion, de réception ou d'expiration.
Event.ChannelID
renvoie un ID de canal sur l'homologue qui a généré l'événement, le cas échéant.
Event.Data
renvoie les données fournies par l'utilisateur, le cas échéant.
Event.Packet
renvoie un paquet associé à l'événement, le cas échéant.
Contient un pointeur géré vers le paquet.
Packet.Dispose()
détruit le paquet. Doit être appelé uniquement lorsque le paquet a été obtenu à partir de l’événement EventType.Receive
.
Packet.IsSet
renvoie un état du pointeur géré.
Packet.Data
renvoie un pointeur géré vers les données du paquet.
Packet.UserData
obtient ou définit les données fournies par l'utilisateur.
Packet.Length
renvoie une longueur de charge utile dans le paquet.
Packet.HasReferences
vérifie les références au paquet.
Packet.SetFreeCallback(PacketFreeCallback callback)
définit le rappel pour avertir lorsqu'un paquet approprié est détruit. Un pointeur IntPtr
vers un rappel peut être utilisé à la place d'une référence à un délégué.
Packet.Create(byte[] data, int offset, int length, PacketFlags flags)
crée un paquet qui peut être envoyé à un homologue. Le paramètre offset indique le point de départ des données dans un tableau, la longueur est le point final des données dans un tableau. Tous les paramètres sont facultatifs. Plusieurs indicateurs de paquets peuvent être spécifiés à la fois. Un pointeur IntPtr
vers un tampon natif peut être utilisé à la place d'une référence à un tableau d'octets.
Packet.CopyTo(byte[] destination)
copie la charge utile du paquet vers le tableau de destination.
Contient un pointeur géré vers l’homologue et un ID mis en cache.
Peer.IsSet
renvoie un état du pointeur géré.
Peer.ID
renvoie un identifiant de pair. C'est toujours zéro côté client.
Peer.IP
renvoie une adresse IP sous une forme imprimable.
Peer.Port
renvoie un numéro de port.
Peer.MTU
renvoie une MTU.
Peer.State
renvoie un état homologue décrit dans l'énumération PeerState
.
Peer.RoundTripTime
renvoie un temps d'aller-retour en millisecondes.
Peer.LastRoundTripTime
renvoie un temps aller-retour depuis le dernier accusé de réception en millisecondes.
Peer.LastSendTime
renvoie l'heure d'envoi du dernier paquet en millisecondes.
Peer.LastReceiveTime
renvoie l'heure de réception du dernier paquet en millisecondes.
Peer.PacketsSent
renvoie un nombre total de paquets envoyés lors de la connexion.
Peer.PacketsLost
renvoie un nombre total de paquets considérés comme perdus lors de la connexion en fonction de la logique de retransmission.
Peer.PacketsThrottle
renvoie un taux de limitation des paquets en fonction des conditions de connexion au homologue.
Peer.BytesSent
renvoie un nombre total d'octets envoyés lors de la connexion.
Peer.BytesReceived
renvoie un nombre total d'octets reçus lors de la connexion.
Peer.Data
obtient ou définit les données fournies par l'utilisateur. Doit être utilisé avec une conversion explicite vers le type de données approprié.
Peer.ConfigureThrottle(uint interval, uint acceleration, uint deceleration, uint threshold)
configure le paramètre d'accélérateur pour un homologue. Les paquets peu fiables sont abandonnés par ENet en réponse aux différentes conditions de connexion au homologue. La limitation représente une probabilité qu'un paquet peu fiable ne soit pas abandonné et donc envoyé par ENet au homologue. Le temps aller-retour moyen le plus bas entre l'envoi d'un paquet fiable et la réception de son accusé de réception est mesuré sur une durée spécifiée par le paramètre d'intervalle en millisecondes. Si un temps aller-retour mesuré s'avère être nettement inférieur au temps aller-retour moyen mesuré sur l'intervalle, alors la probabilité de limitation est augmentée pour permettre plus de trafic d'une quantité spécifiée dans le paramètre d'accélération, qui est un rapport à la Library.throttleScale
constante. Si un temps aller-retour mesuré s'avère nettement supérieur au temps aller-retour moyen mesuré sur l'intervalle, la probabilité de limitation est alors diminuée pour limiter le trafic d'une quantité spécifiée dans le paramètre de décélération, qui est un rapport à la Library.throttleScale
constante Library.throttleScale
. Lorsque la limitation a une valeur de Library.throttleScale
, aucun paquet peu fiable n'est abandonné par ENet et donc 100 % de tous les paquets non fiables seront envoyés. Lorsque la manette a une valeur de 0, tous les paquets non fiables sont abandonnés par ENet, et donc 0 % de tous les paquets non fiables seront envoyés. Les valeurs intermédiaires de la limitation représentent des probabilités intermédiaires comprises entre 0 % et 100 % de paquets non fiables envoyés. Les limites de bande passante des hôtes locaux et étrangers sont prises en compte pour déterminer une limite raisonnable pour la probabilité de limitation au-dessus de laquelle elle ne doit pas augmenter, même dans les meilleures conditions. Pour désactiver la limitation, le paramètre de décélération doit être réglé sur zéro. Le paramètre de seuil peut être utilisé pour réduire la limitation des paquets par rapport au temps aller-retour mesuré dans des environnements réseau instables avec une gigue élevée et une faible latence moyenne, ce qui est une condition courante pour les réseaux Wi-Fi dans des endroits très fréquentés. Par défaut, le paramètre de seuil est défini sur Library.throttleThreshold
en millisecondes.
Peer.Send(byte channelID, ref Packet packet)
met en file d'attente un paquet à envoyer. Renvoie vrai en cas de succès ou faux en cas d'échec.
Peer.Receive(out byte channelID, out Packet packet)
tente de retirer de la file d'attente tout paquet entrant en file d'attente. Renvoie vrai si un paquet a été retiré de la file d'attente ou faux si aucun paquet n'est disponible.
Peer.Ping()
envoie une requête ping à un homologue. ENet envoie automatiquement une requête ping à tous les homologues connectés à intervalles réguliers. Cependant, cette fonction peut être appelée pour garantir des requêtes ping plus fréquentes.
Peer.PingInterval(uint interval)
définit un intervalle auquel les pings seront envoyés à un homologue. Les pings sont utilisés à la fois pour surveiller l'activité de la connexion et également pour ajuster dynamiquement le régulateur pendant les périodes de faible trafic afin que le régulateur ait une réactivité raisonnable pendant les pics de trafic.
Peer.Timeout(uint timeoutLimit, uint timeoutMinimum, uint timeoutMaximum)
définit des paramètres de délai d'attente pour un homologue. Les paramètres de délai d'attente contrôlent comment et quand un homologue expirera en cas d'échec de l'accusé de réception d'un trafic fiable. Valeurs de délai d'attente utilisées dans le mécanisme semi-linéaire, où si un paquet fiable n'est pas reconnu dans un temps aller-retour moyen plus une tolérance de variance jusqu'à ce que le délai d'attente atteigne une limite définie. Si le délai d'attente atteint cette limite et que des paquets fiables ont été envoyés mais n'ont pas été reconnus dans un certain délai minimum, l'homologue sera déconnecté. Alternativement, si des paquets fiables ont été envoyés mais n'ont pas été reconnus pendant une certaine période de temps maximale, l'homologue sera déconnecté quelle que soit la valeur limite actuelle du délai d'attente.
Peer.Disconnect(uint data)
demande une déconnexion d’un homologue.
Peer.DisconnectNow(uint data)
force une déconnexion immédiate d'un homologue.
Peer.DisconnectLater(uint data)
demande une déconnexion d'un homologue, mais seulement après l'envoi de tous les paquets sortants en file d'attente.
Peer.Reset()
déconnecte de force un homologue. L'hôte étranger représenté par l'homologue n'est pas informé de la déconnexion et expirera lors de sa connexion à l'hôte local.
Contient un pointeur géré vers l’hôte.
Host.Dispose()
détruit l'hôte.
Host.IsSet
renvoie un état du pointeur géré.
Host.PeersCount
renvoie un certain nombre de pairs connectés.
Host.PacketsSent
renvoie le nombre total de paquets envoyés au cours de la session.
Host.PacketsReceived
renvoie le nombre total de paquets reçus au cours de la session.
Host.BytesSent
renvoie un nombre total d'octets envoyés pendant la session.
Host.BytesReceived
renvoie un nombre total d'octets reçus au cours de la session.
Host.Create(Address? address, int peerLimit, int channelLimit, uint incomingBandwidth, uint outgoingBandwidth, int bufferSize)
crée un hôte pour communiquer avec les pairs. Les paramètres de bande passante déterminent la taille de la fenêtre d'une connexion, ce qui limite le nombre de paquets fiables pouvant être en transit à un moment donné. ENet supprimera stratégiquement les paquets sur des côtés spécifiques d'une connexion entre les hôtes pour garantir que la bande passante de l'hôte ne soit pas submergée. Le paramètre buffer size est utilisé pour définir la taille du tampon socket pour l’envoi et la réception de datagrammes. Tous les paramètres sont facultatifs à l'exception de l'adresse et de la limite d'homologues dans les cas où la fonction est utilisée pour créer un hôte qui écoutera les connexions entrantes.
Host.PreventConnections(bool state)
empêche l’accès à l’hôte pour les nouvelles connexions entrantes. Cette fonction rend l'hôte complètement invisible sur le réseau, tout homologue qui tente de s'y connecter sera dépassé.
Host.Broadcast(byte channelID, ref Packet packet, Peer[] peers)
met en file d'attente un paquet à envoyer à une plage de pairs ou à tous les pairs associés à l'hôte si le paramètre facultatif de pairs n'est pas utilisé. Toute structure Peer
mise à zéro dans un tableau sera exclue de la diffusion. Au lieu d'un tableau, un seul Peer
peut être transmis à une fonction qui sera exclue de la diffusion.
Host.CheckEvents(out Event @event)
vérifie tous les événements en file d'attente sur l'hôte et en distribue un s'il est disponible. Renvoie > 0 si un événement a été distribué, 0 si aucun événement n'est disponible, < 0 en cas d'échec.
Host.Connect(Address address, int channelLimit, uint data)
initie une connexion à un hôte étranger. Renvoie un homologue représentant l'hôte étranger en cas de succès ou lève une exception en cas d'échec. L'homologue renvoyé n'aura pas terminé la connexion tant que Host.Service()
ne notifiera pas un événement EventType.Connect
. La limite de canal et les paramètres de données fournis par l'utilisateur sont facultatifs.
Host.Service(int timeout, out Event @event)
attend les événements sur l'hôte spécifié et fait la navette entre l'hôte et ses pairs. ENet utilise un modèle d'événements interrogés pour informer l'utilisateur des événements importants. Les hôtes ENet sont interrogés sur les événements avec cette fonction, où une valeur de délai d'attente facultative en millisecondes peut être spécifiée pour contrôler la durée pendant laquelle ENet interrogera. Si un délai d'attente de 0 est spécifié, cette fonction sera renvoyée immédiatement s'il n'y a aucun événement à distribuer. Sinon, il renverra 1 si un événement a été distribué dans le délai spécifié. Cette fonction doit être appelée régulièrement pour garantir que les paquets sont envoyés et reçus, sinon des pics de trafic se produiront, entraînant une latence accrue. Le paramètre timeout fixé à 0 signifie non bloquant, ce qui est nécessaire dans les cas où la fonction est appelée dans une boucle de jeu.
Host.SetBandwidthLimit(uint incomingBandwidth, uint outgoingBandwidth)
ajuste les limites de bande passante d'un hôte en octets par seconde.
Host.SetChannelLimit(int channelLimit)
limite le nombre maximal de canaux autorisés pour les futures connexions entrantes.
Host.SetMaxDuplicatePeers(ushort number)
limite le nombre maximum de pairs en double autorisés à partir du même hôte et empêche la connexion en cas de dépassement. Par défaut, défini sur Library.maxPeers
, ne peut pas être inférieur à un.
Host.SetInterceptCallback(InterceptCallback callback)
définit le rappel pour avertir lorsqu'un paquet UDP brut est intercepté. Un pointeur IntPtr
vers un rappel peut être utilisé à la place d'une référence à un délégué.
Host.SetChecksumCallback(ChecksumCallback callback)
définit le rappel pour avertir quand une somme de contrôle doit être calculée. Un pointeur IntPtr
vers un rappel peut être utilisé à la place d'une référence à un délégué.
Host.Flush()
envoie tous les paquets en file d'attente sur l'hôte spécifié à ses pairs désignés.
Contient des champs constants.
Library.maxChannelCount
le nombre maximum possible de canaux.
Library.maxPeers
le nombre maximum possible de pairs.
Library.maxPacketSize
la taille maximale d'un paquet.
Library.version
la version de compatibilité actuelle par rapport à la bibliothèque native.
Library.Time
renvoie une heure monotone locale actuelle en millisecondes. Il ne se réinitialise jamais tant que l'application reste en vie.
Library.Initialize(Callbacks callbacks)
initialise la bibliothèque native. Le paramètre Callbacks est facultatif et doit être utilisé uniquement avec un allocateur de mémoire personnalisé. Doit être appelé avant de commencer les travaux. Renvoie vrai en cas de succès ou faux en cas d'échec.
Library.Deinitialize()
désinitialise la bibliothèque native. Doit être appelé une fois les travaux terminés.
Library.CRC64(IntPtr buffers, int bufferCount)
calcule une somme de contrôle pour les tampons non gérés.
Ce projet est sponsorisé par :
Divertissement d’écureuil volant
Studios racine carrée
Jeux de boucles étranges