Ini adalah implementasi ENet independen dengan protokol yang dimodifikasi untuk C, C++, C#, dan bahasa lainnya.
Fitur:
Harap baca kesalahan umum untuk mendapatkan gambaran apa yang salah.
Untuk membangun perpustakaan asli diperlukan perangkat lunak yang sesuai:
Untuk platform desktop CMake dengan GNU Make atau Visual Studio.
Untuk platform seluler NDK untuk Android dan Xcode untuk iOS. Pastikan semua perpustakaan yang dikompilasi ditetapkan ke platform dan arsitektur CPU yang sesuai.
Untuk membangun perpustakaan untuk Nintendo Switch, ikuti panduan ini.
Rakitan terkelola dapat dibuat menggunakan platform kompilasi apa pun yang tersedia yang mendukung C# 3.0 atau lebih tinggi.
Anda dapat mengambil perpustakaan yang dikompilasi dari bagian rilis atau dari NuGet:
ENet-CSharp
berisi perakitan terkompilasi dengan perpustakaan asli untuk lingkungan .NET (.NET Standard 2.1).
ENet-Unity
berisi skrip dengan perpustakaan asli untuk Unity.
Sangat disarankan untuk menghapus folder dengan biner daripada menggantinya untuk memutakhirkan.
Paket-paket ini hanya disediakan untuk platform tradisional: Windows, Linux, dan macOS (x64).
Versi OS yang didukung:
Sebelum mulai bekerja, perpustakaan harus diinisialisasi menggunakan ENet.Library.Initialize();
fungsi.
Setelah pekerjaan selesai, deinisialisasi perpustakaan menggunakan ENet.Library.Deinitialize();
fungsi.
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" ) ;
Penggunaannya hampir sama dengan di lingkungan .NET, hanya saja fungsi konsol harus diganti dengan fungsi yang disediakan oleh Unity. Jika Host.Service()
akan dipanggil dalam game loop, pastikan parameter batas waktu disetel ke 0 yang berarti non-pemblokiran. Selain itu, tetap jalankan Unity di latar belakang dengan mengaktifkan opsi yang sesuai di pengaturan pemutar.
Strategi yang paling terkenal adalah dengan menggunakan ENet dalam thread I/O independen dan memanfaatkan teknik pesan antar-thread untuk mentransfer data melintasi thread/tugas tanpa kunci/mutex apa pun. Antrian non-pemblokiran seperti Ring Buffer dirancang untuk tujuan tersebut. Abstraksi dan logika tingkat tinggi dapat diparalelkan menggunakan pekerja, kemudian berkomunikasi dengan thread I/O dan pesan enqueue/dequeue untuk mengirim/menerima data melalui jaringan.
Secara umum, ENet tidak aman untuk thread, namun beberapa fungsinya dapat digunakan dengan aman jika pengguna cukup berhati-hati:
Struktur Packet
dan fungsinya aman sampai paket hanya bergerak melintasi thread berdasarkan nilai dan pengalokasi memori khusus tidak digunakan.
Peer.ID
segera setelah penunjuk ke rekan diperoleh dari sisi asli, ID akan di-cache dalam struktur Peer
untuk tindakan lebih lanjut dengan objek yang ditetapkan ke ID tersebut. Struktur Peer
dapat dipindahkan melintasi thread berdasarkan nilai, namun fungsinya tidak aman untuk thread karena data dalam memori dapat diubah oleh layanan di thread lain.
Library.Time
menggunakan atom primitif secara internal untuk mengelola waktu monotonik lokal.
Definisi flag untuk fungsi Peer.Send()
:
PacketFlags.None
urutannya tidak dapat diandalkan, pengiriman paket tidak dijamin.
PacketFlags.Reliable
andal sequence, sebuah paket harus diterima oleh rekan target dan upaya pengiriman ulang harus dilakukan hingga paket terkirim.
PacketFlags.Unsequenced
yang tidak diurutkan tidak akan diurutkan dengan paket lain dan mungkin dikirimkan secara tidak berurutan. Tanda ini membuat pengiriman tidak dapat diandalkan.
PacketFlags.NoAllocate
sebuah paket tidak akan mengalokasikan data, dan sebagai gantinya pengguna harus menyediakannya. Masa pakai paket harus dilacak menggunakan panggilan balik PacketFreeCallback
.
PacketFlags.UnreliableFragmented
sebuah paket akan terfragmentasi secara tidak dapat diandalkan jika melebihi MTU. Secara default, paket yang tidak dapat diandalkan yang melebihi MTU akan terfragmentasi dan dikirimkan dengan andal. Flag ini harus digunakan untuk secara eksplisit menunjukkan paket-paket yang seharusnya tetap tidak dapat diandalkan.
PacketFlags.Instant
sebuah paket tidak akan dibundel dengan paket lain pada iterasi layanan berikutnya dan dikirim secara instan. Jenis pengiriman ini memperdagangkan efisiensi multiplexing demi latensi. Paket yang sama tidak dapat digunakan untuk beberapa panggilan Peer.Send()
.
PacketFlags.Unthrottled
paket yang berada dalam antrean pengiriman yang tidak dapat diandalkan tidak boleh dihapus karena pembatasan dan dikirim jika memungkinkan.
PacketFlags.Sent
paket dikirim dari semua antrian yang telah dimasukkan.
Definisi tipe peristiwa untuk properti Event.Type
:
EventType.None
tidak ada peristiwa yang terjadi dalam batas waktu yang ditentukan.
EventType.Connect
permintaan koneksi yang dimulai oleh fungsi Peer.Connect()
telah selesai. Event.Peer
mengembalikan rekan yang berhasil terhubung. Event.Data
mengembalikan data yang disediakan pengguna yang menjelaskan koneksi atau 0 jika tidak ada yang tersedia.
EventType.Disconnect
rekan telah terputus. Peristiwa ini dihasilkan setelah berhasil menyelesaikan pemutusan hubungan yang dimulai oleh fungsi Peer.Disconnect()
. Event.Peer
mengembalikan rekan yang terputus. Event.Data
mengembalikan data yang disediakan pengguna yang menjelaskan pemutusan atau 0 jika tidak ada yang tersedia.
EventType.Receive
paket telah diterima dari rekan. Event.Peer
mengembalikan rekan yang mengirim paket. Event.ChannelID
menentukan nomor saluran tempat paket diterima. Event.Packet
mengembalikan paket yang diterima, dan paket ini harus dimusnahkan menggunakan fungsi Event.Packet.Dispose()
setelah digunakan.
EventType.Timeout
rekan telah habis waktunya. Peristiwa ini terjadi jika waktu rekan telah habis atau jika permintaan koneksi yang diinisialisasi oleh Peer.Connect()
telah waktu habis. Event.Peer
mengembalikan rekan yang waktunya habis.
Definisi status rekan untuk properti Peer.State
:
PeerState.Uninitialized
rekan yang tidak diinisialisasi.
PeerState.Disconnected
rekan terputus atau waktu habis.
PeerState.Connecting
koneksi peer sedang berlangsung.
PeerState.Connected
rekan berhasil terhubung.
PeerState.Disconnecting
sambungan pemutusan sambungan rekan sedang berlangsung.
PeerState.Zombie
rekan tidak terputus dengan benar.
Menyediakan per acara aplikasi.
AllocCallback(IntPtr size)
memberi tahu ketika memori diminta untuk alokasi. Mengharapkan penunjuk ke memori yang baru dialokasikan. Referensi kepada delegasi harus dilestarikan dari pengumpulan sampah.
FreeCallback(IntPtr memory)
memberi tahu kapan memori dapat dikosongkan. Referensi kepada delegasi harus dilestarikan dari pengumpulan sampah.
NoMemoryCallback()
memberi tahu ketika memori tidak cukup. Referensi kepada delegasi harus dilestarikan dari pengumpulan sampah.
Menyediakan acara per paket.
PacketFreeCallback(Packet packet)
memberi tahu ketika sebuah paket sedang dimusnahkan. Menunjukkan apakah paket yang dapat diandalkan telah diakui. Referensi kepada delegasi harus dilestarikan dari pengumpulan sampah.
Menyediakan per acara host.
InterceptCallback(ref Event @event, ref Address address, IntPtr receivedData, int receivedDataLength)
memberi tahu ketika paket UDP mentah disadap. Kode status yang dikembalikan dari panggilan balik ini menginstruksikan ENet bagaimana peristiwa yang ditetapkan harus ditangani. Mengembalikan 1 menunjukkan pengiriman acara yang ditetapkan oleh layanan. Mengembalikan 0 menunjukkan bahwa subsistem ENet harus menangani data yang diterima. Mengembalikan -1 menunjukkan kesalahan. Referensi kepada delegasi harus dilestarikan dari pengumpulan sampah.
ChecksumCallback(IntPtr buffers, int bufferCount)
memberi tahu kapan checksum harus dihitung untuk buffer saat mengirim dan menerima. Nilai yang dikembalikan dari panggilan balik ini adalah checksum 64-bit. ENet secara otomatis menangani verifikasi integritas paket jika mekanisme checksum diaktifkan di kedua ujungnya. Dapat digunakan dengan fungsi ENet.Library.CRC64()
. Referensi kepada delegasi harus dilestarikan dari pengumpulan sampah.
Berisi struktur dengan data host anonim dan nomor port.
Address.Port
mendapatkan atau menetapkan nomor port.
Address.GetIP()
mendapat alamat IP.
Address.SetIP(string ip)
menetapkan alamat IP. Untuk menggunakan siaran IPv4 di jaringan lokal, alamatnya dapat diatur ke 255.255.255.255 untuk klien. ENet akan secara otomatis merespons siaran dan memperbarui alamat ke IP server sebenarnya.
Address.GetHost()
mencoba melakukan pencarian terbalik dari alamat. Mengembalikan string dengan nama terselesaikan atau alamat IP.
Address.SetHost(string hostName)
menetapkan nama host atau alamat IP. Harus digunakan untuk mengikat antarmuka jaringan atau untuk koneksi ke host asing. Mengembalikan nilai benar jika berhasil atau salah jika gagal.
Berisi struktur dengan tipe kejadian, penunjuk terkelola ke rekan, ID saluran, data yang disediakan pengguna, dan penunjuk terkelola ke paket.
Event.Type
mengembalikan tipe acara.
Event.Peer
mengembalikan rekan yang menghasilkan peristiwa sambungkan, putuskan sambungan, terima, atau batas waktu.
Event.ChannelID
mengembalikan ID saluran pada rekan yang menghasilkan acara, jika sesuai.
Event.Data
mengembalikan data yang disediakan pengguna, jika sesuai.
Event.Packet
mengembalikan paket yang terkait dengan acara tersebut, jika sesuai.
Berisi penunjuk terkelola ke paket.
Packet.Dispose()
menghancurkan paket. Harus dipanggil hanya ketika paket diperoleh dari event EventType.Receive
.
Packet.IsSet
mengembalikan keadaan pointer yang dikelola.
Packet.Data
mengembalikan pointer terkelola ke data paket.
Packet.UserData
mendapatkan atau menyetel data yang disediakan pengguna.
Packet.Length
mengembalikan panjang payload dalam paket.
Packet.HasReferences
memeriksa referensi ke paket.
Packet.SetFreeCallback(PacketFreeCallback callback)
menyetel panggilan balik untuk memberi tahu ketika paket yang sesuai sedang dimusnahkan. Pointer IntPtr
ke callback dapat digunakan sebagai pengganti referensi ke delegasi.
Packet.Create(byte[] data, int offset, int length, PacketFlags flags)
membuat paket yang dapat dikirim ke rekan. Parameter offset menunjukkan titik awal data dalam array, panjangnya adalah titik akhir data dalam array. Semua parameter bersifat opsional. Beberapa flag paket dapat ditentukan sekaligus. Pointer IntPtr
ke buffer asli dapat digunakan sebagai pengganti referensi ke array byte.
Packet.CopyTo(byte[] destination)
menyalin payload dari paket ke array tujuan.
Berisi penunjuk terkelola ke rekan dan ID cache.
Peer.IsSet
mengembalikan status pointer yang dikelola.
Peer.ID
mengembalikan ID rekan. Itu selalu nol di sisi klien.
Peer.IP
mengembalikan alamat IP dalam bentuk yang dapat dicetak.
Peer.Port
mengembalikan nomor port.
Peer.MTU
mengembalikan MTU.
Peer.State
mengembalikan status rekan yang dijelaskan dalam enumerasi PeerState
.
Peer.RoundTripTime
mengembalikan waktu pulang pergi dalam milidetik.
Peer.LastRoundTripTime
mengembalikan waktu pulang pergi sejak pengakuan terakhir dalam milidetik.
Peer.LastSendTime
mengembalikan waktu pengiriman paket terakhir dalam milidetik.
Peer.LastReceiveTime
mengembalikan waktu penerimaan paket terakhir dalam milidetik.
Peer.PacketsSent
mengembalikan jumlah total paket yang dikirim selama koneksi.
Peer.PacketsLost
mengembalikan jumlah total paket yang dianggap hilang selama koneksi berdasarkan logika transmisi ulang.
Peer.PacketsThrottle
mengembalikan rasio paket throttle tergantung pada kondisi koneksi ke peer.
Peer.BytesSent
mengembalikan jumlah total byte yang dikirim selama koneksi.
Peer.BytesReceived
mengembalikan jumlah total byte yang diterima selama koneksi.
Peer.Data
mendapatkan atau menyetel data yang disediakan pengguna. Harus digunakan dengan pemeran eksplisit ke tipe data yang sesuai.
Peer.ConfigureThrottle(uint interval, uint acceleration, uint deceleration, uint threshold)
mengonfigurasi parameter throttle untuk rekan. Paket yang tidak dapat diandalkan akan dibuang oleh ENet sebagai respons terhadap berbagai kondisi koneksi ke peer. Throttle mewakili kemungkinan bahwa paket yang tidak dapat diandalkan tidak boleh dibuang dan dikirim oleh ENet ke peer. Rata-rata waktu pulang-pergi terendah dari pengiriman paket yang dapat diandalkan hingga penerimaan pengakuannya diukur dalam jangka waktu yang ditentukan oleh parameter interval dalam milidetik. Jika waktu pulang-pergi yang diukur secara signifikan lebih kecil daripada waktu pulang-pergi rata-rata yang diukur selama interval, maka probabilitas throttle ditingkatkan untuk memungkinkan lebih banyak lalu lintas dengan jumlah yang ditentukan dalam parameter percepatan, yang merupakan rasio terhadap Library.throttleScale
konstan. Jika waktu pulang pergi yang diukur secara signifikan lebih besar daripada waktu pulang pergi rata-rata yang diukur selama interval, maka probabilitas throttle dikurangi untuk membatasi lalu lintas dengan jumlah yang ditentukan dalam parameter perlambatan, yang merupakan rasio terhadap Library.throttleScale
Konstanta Library.throttleScale
. Ketika throttle memiliki nilai Library.throttleScale
, tidak ada paket yang tidak dapat diandalkan yang dibuang oleh ENet, sehingga 100% dari semua paket yang tidak dapat diandalkan akan dikirim. Ketika throttle bernilai 0, semua paket yang tidak dapat diandalkan akan dibuang oleh ENet, sehingga 0% dari semua paket yang tidak dapat diandalkan akan dikirim. Nilai antara untuk throttle mewakili probabilitas antara 0% dan 100% dari paket yang tidak dapat diandalkan yang dikirim. Batas bandwidth dari host lokal dan asing diperhitungkan untuk menentukan batas yang masuk akal untuk probabilitas throttle yang melebihi batas tersebut tidak boleh dinaikkan bahkan dalam kondisi terbaik. Untuk menonaktifkan pembatasan, parameter perlambatan harus disetel ke nol. Parameter ambang batas dapat digunakan untuk mengurangi pembatasan paket relatif terhadap waktu pulang pergi yang diukur di lingkungan jaringan yang tidak stabil dengan jitter tinggi dan latensi rata-rata rendah yang merupakan kondisi umum untuk jaringan Wi-Fi di tempat ramai. Secara default, parameter ambang batas disetel ke Library.throttleThreshold
dalam milidetik.
Peer.Send(byte channelID, ref Packet packet)
mengantri paket yang akan dikirim. Mengembalikan nilai benar jika berhasil atau salah jika gagal.
Peer.Receive(out byte channelID, out Packet packet)
berupaya menghapus antrean paket antri yang masuk. Mengembalikan nilai benar jika paket di-dequeued atau salah jika tidak ada paket yang tersedia.
Peer.Ping()
mengirimkan permintaan ping ke rekan. ENet secara otomatis melakukan ping ke semua rekan yang terhubung secara berkala, namun fungsi ini dapat dipanggil untuk memastikan permintaan ping lebih sering.
Peer.PingInterval(uint interval)
menetapkan interval di mana ping akan dikirim ke rekan. Ping digunakan untuk memantau keaktifan koneksi dan juga untuk menyesuaikan throttle secara dinamis selama periode lalu lintas rendah sehingga throttle memiliki respons yang wajar selama lonjakan lalu lintas.
Peer.Timeout(uint timeoutLimit, uint timeoutMinimum, uint timeoutMaximum)
menetapkan parameter batas waktu untuk rekan. Parameter batas waktu mengontrol bagaimana dan kapan rekan akan kehabisan waktu karena kegagalan dalam mengakui lalu lintas yang andal. Nilai timeout digunakan pada mekanisme semi-linear, dimana jika paket yang reliabel tidak diakui dalam waktu rata-rata pulang pergi ditambah toleransi varians hingga timeout mencapai batas yang ditentukan. Jika batas waktu berada pada batas ini dan paket yang dapat diandalkan telah dikirim tetapi tidak diakui dalam jangka waktu minimum tertentu, maka peer akan terputus. Alternatifnya, jika paket yang dapat diandalkan telah dikirim tetapi tidak diakui selama jangka waktu maksimum tertentu, peer akan terputus terlepas dari nilai batas waktu habis saat ini.
Peer.Disconnect(uint data)
meminta pemutusan sambungan dari rekan.
Peer.DisconnectNow(uint data)
memaksa pemutusan hubungan langsung dari rekan.
Peer.DisconnectLater(uint data)
meminta pemutusan sambungan dari rekan, tetapi hanya setelah semua paket keluar yang antri dikirim.
Peer.Reset()
secara paksa memutuskan sambungan rekan. Host asing yang diwakili oleh peer tidak diberitahu tentang pemutusan koneksi dan akan habis waktu koneksinya ke host lokal.
Berisi penunjuk terkelola ke host.
Host.Dispose()
menghancurkan host.
Host.IsSet
mengembalikan status penunjuk yang dikelola.
Host.PeersCount
mengembalikan sejumlah rekan yang terhubung.
Host.PacketsSent
mengembalikan jumlah total paket yang dikirim selama sesi.
Host.PacketsReceived
mengembalikan jumlah total paket yang diterima selama sesi tersebut.
Host.BytesSent
mengembalikan jumlah total byte yang dikirim selama sesi.
Host.BytesReceived
mengembalikan jumlah total byte yang diterima selama sesi.
Host.Create(Address? address, int peerLimit, int channelLimit, uint incomingBandwidth, uint outgoingBandwidth, int bufferSize)
membuat host untuk berkomunikasi dengan rekan-rekan. Parameter bandwidth menentukan ukuran jendela koneksi yang membatasi jumlah paket yang dapat diandalkan yang mungkin transit pada waktu tertentu. ENet secara strategis akan menjatuhkan paket pada sisi tertentu dari koneksi antar host untuk memastikan bandwidth host tidak kewalahan. Parameter ukuran buffer digunakan untuk mengatur ukuran buffer soket untuk mengirim dan menerima datagram. Semua parameter bersifat opsional kecuali alamat dan batas rekan jika fungsi tersebut digunakan untuk membuat host yang akan mendengarkan koneksi masuk.
Host.PreventConnections(bool state)
mencegah akses ke host untuk koneksi masuk baru. Fungsi ini membuat host sama sekali tidak terlihat di jaringan, setiap rekan yang mencoba menyambung ke host tersebut akan kehabisan waktu.
Host.Broadcast(byte channelID, ref Packet packet, Peer[] peers)
mengantri paket untuk dikirim ke sejumlah peer atau ke semua peer yang terkait dengan host jika parameter opsional peers tidak digunakan. Setiap struktur Peer
yang di-nolkan dalam array akan dikecualikan dari siaran. Alih-alih sebuah array, satu Peer
dapat diteruskan ke fungsi yang akan dikecualikan dari siaran.
Host.CheckEvents(out Event @event)
memeriksa setiap acara yang diantrekan di host dan mengirimkannya jika tersedia. Mengembalikan > 0 jika acara dikirimkan, 0 jika tidak ada acara yang tersedia, < 0 jika gagal.
Host.Connect(Address address, int channelLimit, uint data)
memulai koneksi ke host asing. Mengembalikan rekan yang mewakili host asing jika berhasil atau memberikan pengecualian jika gagal. Rekan yang dikembalikan tidak akan menyelesaikan koneksi sampai Host.Service()
memberitahukan peristiwa EventType.Connect
. Batas saluran dan parameter data yang disediakan pengguna bersifat opsional.
Host.Service(int timeout, out Event @event)
menunggu event pada host yang ditentukan dan mengirimkan paket antara host dan rekan-rekannya. ENet menggunakan model peristiwa yang disurvei untuk memberi tahu pengguna tentang peristiwa penting. Host ENet disurvei untuk kejadian dengan fungsi ini, di mana nilai batas waktu opsional dalam milidetik dapat ditentukan untuk mengontrol berapa lama ENet akan melakukan polling. Jika batas waktu 0 ditentukan, fungsi ini akan segera kembali jika tidak ada peristiwa untuk dikirim. Jika tidak, ia akan mengembalikan 1 jika suatu peristiwa dikirim dalam batas waktu yang ditentukan. Fungsi ini harus dipanggil secara berkala untuk memastikan paket dikirim dan diterima, jika tidak, lonjakan lalu lintas akan terjadi yang menyebabkan peningkatan latensi. Parameter batas waktu yang disetel ke 0 berarti non-pemblokiran yang diperlukan untuk kasus di mana fungsi dipanggil dalam game loop.
Host.SetBandwidthLimit(uint incomingBandwidth, uint outgoingBandwidth)
menyesuaikan batas bandwidth host dalam byte per detik.
Host.SetChannelLimit(int channelLimit)
membatasi saluran maksimum yang diperbolehkan untuk koneksi masuk di masa mendatang.
Host.SetMaxDuplicatePeers(ushort number)
membatasi maksimum duplikat rekan yang diperbolehkan dari host yang sama dan mencegah koneksi jika terlampaui. Secara default disetel ke Library.maxPeers
, tidak boleh kurang dari satu.
Host.SetInterceptCallback(InterceptCallback callback)
menyetel panggilan balik untuk memberi tahu ketika paket UDP mentah disadap. Pointer IntPtr
ke callback dapat digunakan sebagai pengganti referensi ke delegasi.
Host.SetChecksumCallback(ChecksumCallback callback)
menyetel panggilan balik untuk memberi tahu kapan checksum harus dihitung. Pointer IntPtr
ke callback dapat digunakan sebagai pengganti referensi ke delegasi.
Host.Flush()
mengirimkan paket apa pun yang antri pada host tertentu ke rekan yang ditunjuk.
Berisi bidang konstan.
Library.maxChannelCount
jumlah saluran maksimum yang mungkin.
Library.maxPeers
jumlah rekan semaksimal mungkin.
Library.maxPacketSize
ukuran maksimum sebuah paket.
Library.version
versi kompatibilitas saat ini relatif terhadap perpustakaan asli.
Library.Time
mengembalikan waktu monoton lokal saat ini dalam milidetik. Itu tidak pernah diatur ulang saat aplikasi masih hidup.
Library.Initialize(Callbacks callbacks)
menginisialisasi perpustakaan asli. Parameter panggilan balik bersifat opsional dan hanya boleh digunakan dengan pengalokasi memori khusus. Harus dipanggil sebelum memulai pekerjaan. Mengembalikan nilai benar jika berhasil atau salah jika gagal.
Library.Deinitialize()
mendeinisialisasi perpustakaan asli. Harus dipanggil setelah pekerjaan selesai.
Library.CRC64(IntPtr buffers, int bufferCount)
menghitung checksum untuk buffer yang tidak dikelola.
Proyek ini disponsori oleh:
Hiburan Tupai Terbang
Studio Akar Kuadrat
Game Lingkaran Aneh