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.

ENetPacketPeer

Eredita: PacketPeer < RefCounted < Object

Una classe wrapper per un ENetPeer.

Descrizione

Un'implementazione PacketPeer che rappresenta un peer di un ENetConnection.

Questa classe non può essere istanziata direttamente, ma può essere recuperata durante ENetConnection.service() o tramite ENetConnection.get_peers().

Nota: Quando si esporta su Android, assicurarsi di abilitare l'autorizzazione INTERNET nella preimpostazione d'esportazione Android prima di esportare il progetto o di utilizzare la distribuzione con un clic. Altrimenti, qualsiasi tipo di comunicazione di rete sarà bloccata da Android.

Tutorial

Metodi

int

get_channels() const

int

get_packet_flags() const

String

get_remote_address() const

int

get_remote_port() const

PeerState

get_state() const

float

get_statistic(statistic: PeerStatistic)

bool

is_active() const

void

peer_disconnect(data: int = 0)

void

peer_disconnect_later(data: int = 0)

void

peer_disconnect_now(data: int = 0)

void

ping()

void

ping_interval(ping_interval: int)

void

reset()

Error

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

void

set_timeout(timeout: int, timeout_min: int, timeout_max: int)

void

throttle_configure(interval: int, acceleration: int, deceleration: int)


Enumerazioni

enum PeerState: 🔗

PeerState STATE_DISCONNECTED = 0

Il peer è disconnesso.

PeerState STATE_CONNECTING = 1

Il peer sta attualmente tentando di connettersi.

PeerState STATE_ACKNOWLEDGING_CONNECT = 2

Il peer ha riconosciuto la richiesta di connessione.

PeerState STATE_CONNECTION_PENDING = 3

Il peer si sta attualmente connettendo.

PeerState STATE_CONNECTION_SUCCEEDED = 4

Il peer si è connesso con successo, ma non è ancora pronto per comunicare (STATE_CONNECTED).

PeerState STATE_CONNECTED = 5

Il peer è attualmente connesso e pronto per comunicare.

PeerState STATE_DISCONNECT_LATER = 6

Il peer è previsto a disconnettersi quando non avrà più pacchetti in uscita da inviare.

PeerState STATE_DISCONNECTING = 7

Il peer si sta attualmente disconnettendo.

PeerState STATE_ACKNOWLEDGING_DISCONNECT = 8

Il peer ha riconosciuto la richiesta di disconnessione.

PeerState STATE_ZOMBIE = 9

Il peer ha perso la connessione, ma non è considerato disconnesso veramente (poiché il peer non ha riconosciuto la richiesta di disconnessione).


enum PeerStatistic: 🔗

PeerStatistic PEER_PACKET_LOSS = 0

Perdita media di pacchetti affidabili come rapporto rispetto a PACKET_LOSS_SCALE.

PeerStatistic PEER_PACKET_LOSS_VARIANCE = 1

Variazione della perdita di pacchetti.

PeerStatistic PEER_PACKET_LOSS_EPOCH = 2

Il tempo in cui le statistiche sulla perdita di pacchetti sono state aggiornate l'ultima volta (in millisecondi dall'inizio della connessione). L'intervallo per gli aggiornamenti delle statistiche sulla perdita di pacchetti è di 10 secondi e almeno un pacchetto deve essere stato inviato dall'ultimo aggiornamento delle statistiche.

PeerStatistic PEER_ROUND_TRIP_TIME = 3

Tempo medio di andata e ritorno per i pacchetti affidabili.

PeerStatistic PEER_ROUND_TRIP_TIME_VARIANCE = 4

Variazione del tempo medio di andata e ritorno.

PeerStatistic PEER_LAST_ROUND_TRIP_TIME = 5

Ultimo tempo di andata e ritorno registrato per un pacchetto affidabile.

PeerStatistic PEER_LAST_ROUND_TRIP_TIME_VARIANCE = 6

Varianza dell'ultimo tempo registrato di andata e ritorno.

PeerStatistic PEER_PACKET_THROTTLE = 7

Lo stato attuale del throttle del peer.

PeerStatistic PEER_PACKET_THROTTLE_LIMIT = 8

Il numero massimo di pacchetti inaffidabili che non dovrebbero essere scartati. Questo valore è sempre maggiore o uguale a 1. Il valore iniziale è uguale a PACKET_THROTTLE_SCALE.

PeerStatistic PEER_PACKET_THROTTLE_COUNTER = 9

Valore interno utilizzato per incrementare il contatore di throttle dei pacchetti. Il valore è fissato su 7 e non può essere modificato. Probabilmente vorrai invece dare un'occhiata a PEER_PACKET_THROTTLE_ACCELERATION.

PeerStatistic PEER_PACKET_THROTTLE_EPOCH = 10

Il tempo in cui le statistiche di throttle sono state aggiornate l'ultima volta (in millisecondi dall'inizio della connessione). L'intervallo per gli aggiornamenti delle statistiche di throttle è PEER_PACKET_THROTTLE_INTERVAL.

PeerStatistic PEER_PACKET_THROTTLE_ACCELERATION = 11

Il fattore di accelerazione del throttle. Valori più alti faranno sì che ENet si adatti più velocemente alle condizioni fluttuanti di rete, causando l'invio di pacchetti inaffidabili più spesso. Il valore predefinito è 2.

PeerStatistic PEER_PACKET_THROTTLE_DECELERATION = 12

Il fattore di decelerazione del throttle. Valori più alti faranno sì che ENet si adatti più velocemente alle condizioni fluttuanti di rete, causando l'invio di pacchetti inaffidabili meno spesso. Il valore predefinito è 2.

PeerStatistic PEER_PACKET_THROTTLE_INTERVAL = 13

Intervallo in cui deve essere misurato il tempo medio di andata e ritorno più basso, utilizzato dal meccanismo del throttle (in millisecondi). Il valore predefinito è 5000.


Costanti

PACKET_LOSS_SCALE = 65536 🔗

La scala di riferimento per la perdita di pacchetti. Vedi get_statistic() e PEER_PACKET_LOSS.

PACKET_THROTTLE_SCALE = 32 🔗

Il valore di riferimento per la configurazione del throttle. Il valore predefinito è 32. Vedi throttle_configure().

FLAG_RELIABLE = 1 🔗

Marca il pacchetto da inviare come affidabile.

FLAG_UNSEQUENCED = 2 🔗

Marca il pacchetto da inviare come non sequenziato (inaffidabile).

FLAG_UNRELIABLE_FRAGMENT = 8 🔗

Marca il pacchetto da inviare come inaffidabile anche se è troppo grande e necessita di frammentazione (aumentando la probabilità che venga scartato).


Descrizioni dei metodi

int get_channels() const 🔗

Restituisce il numero di canali assegnati per la comunicazione con il peer.


int get_packet_flags() const 🔗

Restituisce i flag ENet del pacchetto successivo nella coda ricevuta. Vedi le costanti FLAG_* per i flag dei pacchetti disponibili. Nota che non tutti i flag sono replicati dal peer mittente al peer ricevente.


String get_remote_address() const 🔗

Restituisce l'indirizzo IP di questo peer.


int get_remote_port() const 🔗

Restituisce la porta remota di questo peer.


PeerState get_state() const 🔗

Restituisce lo stato attuale del peer.


float get_statistic(statistic: PeerStatistic) 🔗

Restituisce la statistica richiesta per questo peer.


bool is_active() const 🔗

Restituisce true se il peer è attualmente attivo (cioè il ENetConnection associato è ancora valido).


void peer_disconnect(data: int = 0) 🔗

Richiedi una disconnessione da un peer. Un ENetConnection.EVENT_DISCONNECT verrà generato durante ENetConnection.service() una volta completata la disconnessione.


void peer_disconnect_later(data: int = 0) 🔗

Richiede una disconnessione da un peer, ma solo dopo che tutti i pacchetti accodati in uscita sono stati inviati. Un ENetConnection.EVENT_DISCONNECT verrà generato durante ENetConnection.service() una volta completata la disconnessione.


void peer_disconnect_now(data: int = 0) 🔗

Forza una disconnessione immediata da un peer. Non verrà generato alcun ENetConnection.EVENT_DISCONNECT. Non è garantito che il peer esterno riceva la notifica di disconnessione, e viene reimpostato immediatamente alla restituzione da questa funzione.


void ping() 🔗

Invia una richiesta del ping a un peer. ENet richiede automaticamente il ping di tutti i peer connessi a intervalli regolari, tuttavia, questa funzione può essere chiamata per garantire richieste del ping più frequenti.


void ping_interval(ping_interval: int) 🔗

Imposta l'intervallo in millisecondi in cui i ping saranno inviati a un peer su ping_interval. I ping sono usati sia per monitorare la vitalità della connessione, sia per regolare dinamicamente il throttle durante i periodi di traffico basso, in modo che il throttle abbia un tempo di risposta ragionevole durante i picchi di traffico. L'intervallo dei ping predefinito è 500 millisecondi.


void reset() 🔗

Disconnette forzatamente un peer. L'host esterno rappresentato dal peer non viene informato della disconnessione e scadrà la connessione all'host locale.


Error send(channel: int, packet: PackedByteArray, flags: int) 🔗

Mette in coda il pacchetto packet da inviare sul canale channel. Vedi le costanti FLAG_* per i flag dei pacchetti disponibili.


void set_timeout(timeout: int, timeout_min: int, timeout_max: int) 🔗

Imposta i parametri di timeout per un peer. I parametri di timeout controllano come e quando un peer andrà in timeout a causa di un errore nel riconoscere il traffico affidabile. I valori di timeout sono espressi in millisecondi.

Il timeout è un fattore che, moltiplicato per un valore basato sul tempo medio di andata e ritorno, determinerà il limite di timeout per un pacchetto affidabile. Quando si raggiunge tale limite, il timeout sarà raddoppiato e il peer sarà disconnesso se tale limite ha raggiunto timeout_min. Il parametro timeout_max, d'altra parte, definisce un timeout fisso per il quale qualsiasi pacchetto deve essere riconosciuto o il peer verrà eliminato.


void throttle_configure(interval: int, acceleration: int, deceleration: int) 🔗

Configura il parametro throttle per un peer.

I pacchetti inaffidabili vengono scartati da ENet in risposta alle diverse condizioni della connessione Internet al peer. Il throttle rappresenta una probabilità che un pacchetto inaffidabile non debba essere scartato e quindi inviato da ENet al peer. Misurando le fluttuazioni nei tempi di andata e ritorno dei pacchetti affidabili nell'intervallo interval specificato, ENet aumenterà la probabilità della quantità specificata nel parametro acceleration o la diminuirà della quantità specificata nel parametro deceleration (entrambi sono rapporti a PACKET_THROTTLE_SCALE).

Quando il throttle ha un valore di PACKET_THROTTLE_SCALE, nessun pacchetto inaffidabile viene scartato da ENet e quindi verrà inviato il 100% di tutti i pacchetti inaffidabili.

Quando il throttle ha un valore di 0, tutti i pacchetti inaffidabili vengono scartati da ENet e quindi verrà inviato lo 0% di tutti i pacchetti inaffidabili.

I valori intermedi per il throttle rappresentano probabilità intermedie tra lo 0% e il 100% di pacchetti inaffidabili inviati. I limiti di larghezza di banda degli host locali ed esterni vengono presi in considerazione per determinare un limite ragionevole per la probabilità di throttle, oltre la quale non dovrebbe aumentare nemmeno nelle migliori condizioni.