Attention: Here be dragons

This is the latest (unstable) version of this documentation, which may document features not available in or compatible with released stable versions of Godot.

ENetConnection

Hérite de : RefCounted < Object

Une classe wrapper pour un ENetHost.

Description

L'objectif d'ENet est de fournir une couche de communication réseau relativement mince, simple et robuste par dessus l'UDP (User Datagram Protocol).

Tutoriels

Méthodes

void

bandwidth_limit(in_bandwidth: int = 0, out_bandwidth: int = 0)

void

broadcast(channel: int, packet: PackedByteArray, flags: int)

void

channel_limit(limit: int)

void

compress(mode: CompressionMode)

ENetPacketPeer

connect_to_host(address: String, port: int, channels: int = 0, data: int = 0)

Error

create_host(max_peers: int = 32, max_channels: int = 0, in_bandwidth: int = 0, out_bandwidth: int = 0)

Error

create_host_bound(bind_address: String, bind_port: int, max_peers: int = 32, max_channels: int = 0, in_bandwidth: int = 0, out_bandwidth: int = 0)

void

destroy()

Error

dtls_client_setup(hostname: String, client_options: TLSOptions = null)

Error

dtls_server_setup(server_options: TLSOptions)

void

flush()

int

get_local_port() const

int

get_max_channels() const

Array[ENetPacketPeer]

get_peers()

float

pop_statistic(statistic: HostStatistic)

void

refuse_new_connections(refuse: bool)

Array

service(timeout: int = 0)

void

socket_send(destination_address: String, destination_port: int, packet: PackedByteArray)


Énumérations

enum CompressionMode: 🔗

CompressionMode COMPRESS_NONE = 0

Aucune compression. Cela utilise le plus de bande passante, mais moins de ressource du CPU. Cette option peut également être utilisée pour faciliter le débogage du réseau en utilisant des outils comme Wireshark.

CompressionMode COMPRESS_RANGE_CODER = 1

L'encodage intégré d'ENet. Fonctionne bien sur les petits paquets, mais n'est pas l'algorithme le plus efficace pour les paquets de plus de 4 KB.

CompressionMode COMPRESS_FASTLZ = 2

Compression FastLZ. Cette option utilise moins de ressources CPU par rapport à COMPRESS_ZLIB, mais utilise plus de bande passante.

CompressionMode COMPRESS_ZLIB = 3

Compression Zlib. Cette option utilise moins de bande passante par rapport à COMPRESS_FASTLZ mais utilise plus de ressources CPU.

CompressionMode COMPRESS_ZSTD = 4

Compression Zstandard. Notez que cet algorithme n'est pas très efficace sur des paquets plus petits que 4 Ko. Ainsi, il est recommandé d'utiliser les autres algorithmes de compression dans la plupart des cas.


enum EventType: 🔗

EventType EVENT_ERROR = -1

Une erreur s'est produite lors de service(). Vous aurez probablement besoin de détruire l'hôte avec destroy() et de le recréer.

EventType EVENT_NONE = 0

Aucun événement n'a eu lieu dans le délai spécifié.

EventType EVENT_CONNECT = 1

Une demande de connexion initiée par enet_host_connect a été complétée. Le tableau contiendra le pair qui a été connecté avec succès.

EventType EVENT_DISCONNECT = 2

Un pair s'est déconnecté. Cet événement est généré par l'achèvement réussi d'une déconnexion initiée par ENetPacketPeer.peer_disconnect(), si un pair a timeout, ou si une demande de connexion initialisée par connect_to_host() a timeout. Le tableau contiendra le pair qui s'est déconnecté. Le champ de données contient des données fournies par l'utilisateur décrivant la déconnexion, ou 0, si aucune n'est disponible.

EventType EVENT_RECEIVE = 3

Un paquet a été reçu d'un pair. Le tableau contiendra le pair qui a envoyé le paquet et le numéro de canal sur lequel le paquet a été reçu. Le paquet reçu sera à la suite du ENetPacketPeer associé.


enum HostStatistic: 🔗

HostStatistic HOST_TOTAL_SENT_DATA = 0

Total de données envoyées.

HostStatistic HOST_TOTAL_SENT_PACKETS = 1

Total de paquets UDP envoyés.

HostStatistic HOST_TOTAL_RECEIVED_DATA = 2

Total de donnés reçues.

HostStatistic HOST_TOTAL_RECEIVED_PACKETS = 3

Total de paquets UDP reçus.


Descriptions des méthodes

void bandwidth_limit(in_bandwidth: int = 0, out_bandwidth: int = 0) 🔗

Ajuste les limites de bande passante d'un hôte.


void broadcast(channel: int, packet: PackedByteArray, flags: int) 🔗

Met en file d'attente un paquet packet à envoyer à tous les pairs associés à l'hôte sur le canal channel spécifié. Voir les constantes FLAG_* de ENetPacketPeer pour les drapeaux de paquet disponibles.


void channel_limit(limit: int) 🔗

Limite le maximum de canaux autorisés des futures connexions entrantes.


void compress(mode: CompressionMode) 🔗

Définit la méthode de compression utilisée pour les paquets réseau. Ceux-ci ont différents compromis de vitesse de compression par rapport à la bande passante, vous pouvez avoir besoin de tester quelle méthode fonctionne le mieux pour votre cas d'utilisation si jamais vous utilisez la compression.

Note : La conception réseau de la plupart des jeux nécessite l'envoi de nombreux petits paquets fréquemment (moins de 4 Ko chacun). Dans le doute, il est recommandé de garder l'algorithme de compression par défaut car il fonctionne le mieux avec ces petits paquets.

Note : Le mode de compression doit être défini à la même valeur sur le serveur et sur tous ses clients. Les clients échoueront à se connecter si le mode de compression d'un client diffère de celui du serveur.


ENetPacketPeer connect_to_host(address: String, port: int, channels: int = 0, data: int = 0) 🔗

Initie une connexion vers une adresse address étrangère en utilisant le port spécifié et en allouant les canaux channels demandés. Des données data facultatives peuvent être transmises pendant la connexion sous forme d'un entier de 32 bits.

Note : Vous devez appeler soit create_host() soit create_host_bound() sur les deux extrémités avant d'appeler cette méthode.


Error create_host(max_peers: int = 32, max_channels: int = 0, in_bandwidth: int = 0, out_bandwidth: int = 0) 🔗

Crée un ENetHost qui autorise jusqu'à max_peers pairs connectés, chacun allouant jusqu'à max_channels canaux, limitant en option la bande passante entre in_bandwidth et out_bandwidth (si supérieurs à zéro).

Cette méthode lie un port UDP dynamique disponible aléatoire sur la machine hôte à l'adresse non-spécifiée. Utilisez create_host_bound() pour spécifier l'adresse et le port.

Note : Il est nécessaire de créer un hôte chez le client et chez le serveur afin d'établir une connexion.


Error create_host_bound(bind_address: String, bind_port: int, max_peers: int = 32, max_channels: int = 0, in_bandwidth: int = 0, out_bandwidth: int = 0) 🔗

Crée un ENetHost lié à l'adresse bind_address et au port bind_port donnés qui autorise jusqu'à max_peers pairs connectés, chacun allouant jusqu'à max_channels canaux, limitant en option la bande passante entre in_bandwidth et out_bandwidth (si supérieurs à zéro).

Note : Il est nécessaire de créer un hôte chez le client et chez le serveur afin d'établir une connexion.


void destroy() 🔗

Détruit l'hôte et toutes les ressources qui y sont associées.


Error dtls_client_setup(hostname: String, client_options: TLSOptions = null) 🔗

Configure this ENetHost to use the custom Godot extension allowing DTLS encryption for ENet clients. Call this before connect_to_host() to have ENet connect using DTLS validating the server certificate against hostname. You can pass the optional client_options parameter to customize the trusted certification authorities, or disable the common name verification. See TLSOptions.client() and TLSOptions.client_unsafe().


Error dtls_server_setup(server_options: TLSOptions) 🔗

Configure cet ENetHost pour utiliser l'extension Godot personnalisée permettant le cryptage DTLS pour les serveurs ENet. Appelez ceci juste après create_host_bound() pour qu'ENet s'attende à ce que les pairs se connectent en utilisant le DTLS. Voir TLSOptions.server().


void flush() 🔗

Envoie tous les paquets en file d'attente sur l'hôte spécifié à ses pairs désignés.


int get_local_port() const 🔗

Renvoie le port local auquel ce pair est lié.


int get_max_channels() const 🔗

Renvoie le nombre maximal de canaux autorisés pour les pairs connectés.


Array[ENetPacketPeer] get_peers() 🔗

Renvoie la liste des pairs associés à cet hôte.

Note : Cette liste pourrait inclure certains pairs qui ne sont pas entièrement connectés ou sont actuellement en cours de déconnexion.


float pop_statistic(statistic: HostStatistic) 🔗

Renvoie et réinitialise des statistiques de l'hôte.


void refuse_new_connections(refuse: bool) 🔗

Configure le serveur DTLS pour couper automatiquement les nouvelles connexions.

Note : Cette méthode n'est pertinente qu'après avoir appelé dtls_server_setup().


Array service(timeout: int = 0) 🔗

Attend des événements sur cette connexion et achemine les paquets entre l'hôte et ses pairs, avec le timeout donné (en millisecondes). L'Array renvoyé aura 4 éléments. Un EventType, le ENetPacketPeer qui a généré l'événement, les données associées à l'événement (le cas échéant), le canal associé à l'événement (le cas échéant). Si l'événement généré est EVENT_RECEIVE, le paquet reçu sera à la suite de l'ENetPacketPeer associé.

Appelez cette fonction régulièrement pour gérer les connexions, les déconnections et pour recevoir de nouveaux paquets.

Note : Cette méthode doit être appelée sur les deux extrémités impliquées dans l'événement (l'hôte émetteur et l'hôte récepteur).


void socket_send(destination_address: String, destination_port: int, packet: PackedByteArray) 🔗

Sends a packet toward a destination from the address and port currently bound by this ENetConnection instance.

This is useful as it serves to establish entries in NAT routing tables on all devices between this bound instance and the public facing internet, allowing a prospective client's connection packets to be routed backward through the NAT device(s) between the public internet and this host.

This requires forward knowledge of a prospective client's address and communication port as seen by the public internet - after any NAT devices have handled their connection request. This information can be obtained by a STUN service, and must be handed off to your host by an entity that is not the prospective client. This will never work for a client behind a Symmetric NAT due to the nature of the Symmetric NAT routing algorithm, as their IP and Port cannot be known beforehand.