Proyek ini menyediakan kelas pembantu untuk deteksi dan pemberitahuan tentang paket hilang yang tidak dapat diandalkan. Ini adalah bagian penting dari banyak strategi sinkronisasi tingkat lanjut. Misalnya, Konsistensi Akhirnya menggunakannya.
Untuk mempermudah, server hanya mendukung satu klien.
Ringkasan |
---|
Deteksi bekerja dengan menambahkan header tersebut ke setiap paket yang dikirim:
ushort
Id Urutan Lokalushort
Id Urutan Jarak Jauh Terakhiruint
Bitmask untuk 32 Id urutan jarak jauh sebelumnyaAlur kerjanya seperti itu:
AddPeer
di pembantuAddHeaderForPeerId
EnqueueData
ReadHeaderOfPeerId
dengan ituExecuteLostPackets
ClearHeader
RemovePeer
Jika paket dianggap Hilang , kemungkinan besar paket tersebut hilang. Ketika paket dianggap Tiba , maka paket pasti sudah sampai.
ILossHandler.OnPacketLost
akan dipanggil untuk setiap paket yang hilang DAN untuk setiap paket yang diantrekan dan masih dilacak ketika rekan tersebut terputus.
Jika ada simbol LOSS_DETECTOR_DEBUG
, maka semua rangkaian paket yang hilang akan dikeluarkan ke logger.
ILossHandler handler, ushort maxPeerCount, ushort ackWindow
) - Implementasi ILossHandler
akan dipanggil untuk setiap paket yang hilang. MaxPeerCount
- Jumlah maksimal rekan yang terhubung ke rekan tersebut. AckWindow
- Jumlah maksimum paket terlacak lokal per rekan.ushort peerId
) - Menghapus nomor urut untuk peerId tersebut.ushort peerId
) - Mengantrekan setiap paket yang dilacak untuk peerId tersebut sebagai hilang.ushort peerId, BitBuffer data
) - Menulis informasi header ke BitBuffer untuk peerId tersebut.ushort peerId, BitBuffer data
) - Membaca header dari BitBuffer dan mendeteksi apakah ada paket yang dilacak yang ACK atau NACKed. Dalam kasus detektor ACK akan membebaskan memori yang dialokasikan. Mengembalikan True jika sequenceId lebih besar dari lastSequenceId untuk peerId tersebut.ushort peerId, PacketData data
) - Mencoba memasukkan data ke dalam antrian paket yang dilacak untuk rekan tersebut. Mengembalikan False jika antrian sudah penuh. Mungkin Anda sudah terlalu lama tidak menerima paket dari rekan lain dan harus memutuskan sambungannya.BitBuffer data
) - Menghapus header dari BitBuffer. Jika ada simbol LOSS_DETECTOR_DEBUG
, maka metode tersebut juga tersedia:
StringBuilder builder
) - Menulis status buffer penuh untuk setiap peerId ke dalam StringBuilder.ushort peerId, StringBuilder builder
) - Menulis status buffer untuk peerId tersebut. Helper itu sendiri bersifat transport-agnostic, tetapi proyek contoh menggunakan ENet
fholm - Master of Networking - telah banyak membantu.