net
Net kütüphanesi, istemci ve sunucu arasında veri göndermenin birkaç yolundan biridir.
Net kütüphanesinin başlıca avantajları, büyük boyut sınırı (mesaj başına 64kb) ve veriyi geriye doğru - istemciden sunucuya - gönderebilme yeteneğidir.
Kısa bir başlangıç için Net Kütüphanesi Kullanımı sayfasına bakın.
Alanlar
Bu dahili olarak kullanılır - kullanabilseniz de muhtemelen kullanmamalısınız.
net.ReadType aracılığıyla ağ üzerinden gönderilebilen türlerin bir listesidir.
Bu dahili olarak kullanılır - kullanabilseniz de muhtemelen kullanmamalısınız.
Bu bir fonksiyon DEĞİLDİR, net kütüphanesi tarafından net.Receive ile eklenen net alıcılarını saklamak için dahili olarak kullanılan bir tablodur.
Anahtar, küçük harfli net mesajı adıdır ve değer, mesajın geri arama (callback) fonksiyonudur.
net.Receivers tablosunu değiştirmek, util.AddNetworkString içinde kullanılan net dize havuzunu (string pool) etkilemez.
Metotlar
net.Abort()
net.Start ile başlatılmış bir net mesajını iptal eder, böylece hemen hatasız yeni bir tane başlatabilirsiniz.
net.Broadcast()
O anda oluşturulmuş net mesajını (bkz. net.Start) bağlı olan tüm oyunculara gönderir.
Daha fazla bilgi Net Kütüphanesi Kullanımı sayfasında bulunabilir.
Mevcut mesajda okunacak kalan veri miktarını döndürür. Veri gönderirken hiçbir şey yapmaz.
Bu, motor tarafından dahili olarak kullanılan 6 ekstra biti (veya yukarı yuvarlanmış 1 baytı) içerecektir.
Mevcut mesajın boyutunu döndürür.
Bu, veriyi ağ üzerinden göndermek için motor tarafından dahili olarak kullanılan 3 ekstra baytı (24 bit) içerecektir.
Bu dahili olarak kullanılır - kullanabilseniz de muhtemelen kullanmamalısınız.
Muhtemelen net.Receive fonksiyonunu arıyorsunuz.
Motor tarafından Lua durumuna bir mesajın geldiğini bildirmek için çağrılan fonksiyondur.
Alınan net mesajından bir açı (angle) okur.
Bilgiyi yazdığınız sırayla okumanız gerekir.
Alınan net mesajından bir bit okur.
Bilgiyi yazdığınız sırayla okumanız gerekir.
Alınan net mesajından bir boolean (doğru/yanlış değeri) okur.
Bilgiyi yazdığınız sırayla okumanız gerekir.
Mevcut net mesajından bir Renk (Color) okur.
Bilgiyi yazdığınız sırayla okumanız gerekir.
Mesajdan saf ikili (binary) veri okur.
Bilgiyi yazdığınız sırayla okumanız gerekir.
number net.ReadDouble()
Alınan net mesajından çift duyarlıklı bir sayı okur.
Bilgiyi yazdığınız sırayla okumanız gerekir.
Entity net.ReadEntity()
Alınan net mesajından bir varlık (entity) okur. Belirtilen varlığın var olup olmadığını her zaman kontrol etmelisiniz, çünkü kaldırılmış olabilir ve bu nedenle oyuncunun PVS'sinin (Potansiyel Görünürlük Seti) dışındaysa veya zaten kaldırılmışsa NULL olabilir.
Bilgiyi yazdığınız sırayla okumanız gerekir.
Alınan net mesajından bir ondalıklı sayı (floating point number) okur.
Bilgiyi yazdığınız sırayla okumanız gerekir.
number net.ReadHeader()
Bu dahili olarak kullanılır - kullanabilseniz de muhtemelen kullanmamalısınız.
Bir 'word', yani temel olarak işaretsiz kısa (unsigned short) bir tamsayı okur. Bu, mesajın 'başlığını' (header) okumak için dahili olarak kullanılır. Bu başlık, util.NetworkIDToString aracılığıyla karşılık gelen mesaj adına dönüştürülebilen işaretsiz kısa bir tamsayıdır.
Alınan net mesajından bir tamsayı (integer) okur.
Bilgiyi yazdığınız sırayla okumanız gerekir.
VMatrix net.ReadMatrix()
Alınan net mesajından bir VMatrix okur.
Bilgiyi yazdığınız sırayla okumanız gerekir.
Vector net.ReadNormal()
Net mesajından bir normal vektör okur.
Bilgiyi yazdığınız sırayla okumanız gerekir.
Player net.ReadPlayer()
Alınan net mesajından net.WritePlayer ile yazılmış bir oyuncu varlığını okur.
Belirtilen varlığın var olup olmadığını her zaman kontrol etmelisiniz, çünkü kaldırılmış olabilir ve bu nedenle yerel oyuncunun PVS'sinin dışındaysa veya zaten kaldırılmışsa NULL olabilir.
Bilgiyi yazdığınız sırayla okumanız gerekir.
string net.ReadString()
Net akışından null ile sonlandırılmış bir dize (string) okur. Dizenin boyutu, dizedeki her bir ASCII karakteri için 8 bit artı 8 bittir.
Bilgiyi yazdığınız sırayla okumanız gerekir.
Alınan net mesajından bir tablo (table) okur.
Ekstra bilgi için net.WriteTable sayfasına bakın.
Bazen net kütüphanesi aracılığıyla bir tablo gönderilirken anahtarların sırası değişebilir. Bu yüzden karşılaştırma yaparken dikkatli olun (Bkz. Örnek 1).
Fonksiyonun yürütülmesi sırasında `net.ReadType: Couldn't read type X` hatası alabilirsiniz, sorun ağ üzerinden serileştirilemeyen/gönderilemeyen nesneler gönderiyor olmanızdır. Bilgiyi yazdığınız sırayla okumanız gerekir.
Bu dahili olarak kullanılır - kullanabilseniz de muhtemelen kullanmamalısınız.
net.ReadTable tarafından dahili olarak kullanılır.
net.WriteType ile yazılmış, belirtilen türdeki bir değeri net mesajından okur.
Bilgiyi yazdığınız sırayla okumanız gerekir.
Alınan net mesajından belirtilen bit sayısına sahip işaretsiz bir tamsayı (unsigned integer) okur.
Bilgiyi yazdığınız sırayla okumanız gerekir.
string net.ReadUInt64()
Alınan net mesajından 64 bitlik işaretsiz bir tamsayı okur.
Bilgiyi yazdığınız sırayla okumanız gerekir.
Vector net.ReadVector()
Alınan net mesajından bir vektör (vector) okur. Bu fonksiyonla gönderilen vektörler sıkıştırılır, bu da hassasiyet kaybına neden olabilir. Daha fazla bilgi için net.WriteVector sayfasına bakın.
Bilgiyi yazdığınız sırayla okumanız gerekir.
Bir net mesajı işleyicisi (handler) ekler. Net mesajını almak için yalnızca bir alıcı kullanılabilir.
Mesaj işleyicisi geri aramasının (callback) içinde net.Read* fonksiyonlarını kullanabilirsiniz.
Ne yaptığınızı bilmiyorsanız, düzgün çalışması için bu fonksiyonu diğer herhangi bir fonksiyonun veya kancanın (hook) dışına koymalısınız!
Bilgiyi yazdığınız sırayla okumanız gerekir.
Her net mesajının 64KB'lık bir uzunluk sınırı vardır!
Mevcut mesajı (bkz. net.Start) belirtilen oyuncu veya oyuncular hariç herkese gönderir.
Mevcut net mesajını (bkz. net.Start) pozisyonla aynı Potansiyel Duyulabilir Set'te (PAS) bulunan tüm oyunculara gönderir veya basitçe söylemek gerekirse, bu pozisyondan sesleri potansiyel olarak duyabilecek tüm oyuncuları ekler.
Mevcut net mesajını (bkz. net.Start) pozisyonun PVS'sindeki (Potansiyel Görünürlük Seti) tüm oyunculara gönderir veya daha basit bir ifadeyle, mesajı bu pozisyonu potansiyel olarak görebilen oyunculara gönderir.
net.SendToServer()
Mevcut net mesajını (bkz. net.Start) sunucuya gönderir. Net mesajının sunucu tarafından başarıyla alınabilmesi için oyuncu nesnesinin sunucuda mevcut olması gerekir.
Her net mesajının 65.533 bayt (yaklaşık 64 KiB) uzunluk sınırı vardır ve net mesajınız bundan büyükse hata verir ve gönderilemez.
Mesaj adı önceden util.AddNetworkString ile havuza eklenmelidir!
Yeni bir net mesajı başlatır. Eğer başka bir net mesajı zaten başlatılmış ve henüz gönderilmemişse, o mesaj atılacaktır.
Bu fonksiyonu çağırdıktan sonra, verilerinizi yazmak için (eğer varsa) net.Write fonksiyonlarını çağırmak ve ardından aşağıdaki fonksiyonlardan birini çağırarak bitirmek isteyeceksiniz:
net.Send
net.SendOmit
net.SendPAS
net.SendPVS
net.Broadcast
net.SendToServer
Her net mesajının 65.533 bayt (yaklaşık 64 KiB) uzunluk sınırı vardır ve net mesajınız bundan büyükse hata verir ve gönderilemez.
Net kütüphanesinin, gönderilen mesajların eklendiği ve aynı anda kabaca 256 kb tutabilen dahili bir arabelleği (buffer) vardır. Daha fazlasını göndermeye çalışmak, arabellek taşması nedeniyle istemcinin sunucudan atılmasına yol açacaktır. Net kütüphanesi limitleri hakkında daha fazla bilgi burada bulunabilir.
Mesaj adı önceden util.AddNetworkString ile havuza eklenmelidir!
Net mesajları, istemcinin GM:InitPostEntity kancası çağrılana kadar istemciye güvenilir bir şekilde ulaşmaz.
net.WriteAngle( Angle angle )
Mevcut net mesajına bir açı (angle) yazar.
Mevcut net mesajına bir boolean (1 veya 0 olarak) ekler.
Lütfen bit'in burada bir boolean'dan (true/false) yazıldığını, ancak net.ReadBit'in bir sayı döndürdüğünü unutmayın.
Mevcut net mesajına bir boolean ekler. net.WriteBit'in takma adıdır (alias).
Mevcut net mesajına bir Renk (Color) ekler.
Mesaja bir parça ikili (binary) veri yazar.
net.WriteDouble( number double )
Mevcut net mesajına çift duyarlıklı bir sayı ekler.
net.WriteEntity( Entity entity )
Entity:EntIndex'ini kullanarak mevcut net mesajına bir varlık (entity) ekler.
Varlığı okumak için olan fonksiyon için net.ReadEntity sayfasına bakın.
net.WriteFloat( number float )
Mevcut net mesajına bir float (ondalıklı sayı) ekler.
Mevcut net mesajına işaretli bir tamsayı - pozitif/negatif bir tam sayı - ekler. Alıcı tarafta net.ReadInt ile geri okunabilir.
İşaretsiz bir sayı (asla negatif olmayacağını bildiğiniz bir sayı) göndermek için net.WriteUInt kullanın. Tam sayı olmayan bir sayı (ör. 2.25) için net.WriteFloat kullanın.
net.WriteMatrix( VMatrix matrix )
Mevcut net mesajına bir VMatrix yazar.
net.WriteNormal( Vector normal )
Net mesajına normalleştirilmiş/yön vektörü (uzunluğu 1 olan Vektör) yazar.
Bu fonksiyon, net.WriteVector'a kıyasla daha az bant genişliği kullanır ve uzunluğu > 1 olan vektörleri düzgün bir şekilde göndermez.
net.WritePlayer( Player ply )
Entity:EntIndex'ini kullanarak mevcut net mesajına bir oyuncu varlığı ekler. Bu, net.WriteEntity'ye göre az miktarda ağ bant genişliğinden tasarruf sağlar.
Varlığı okumak için olan fonksiyon için net.ReadPlayer sayfasına bakın.
net.WriteString( string string )
Mevcut net mesajına bir dize (string) ekler. Yazılan verinin boyutu, dizedeki her bir ASCII karakteri için 8 bit + null sonlandırıcı için 8 bittir.
Tek bir yazılan dizenin izin verilen maksimum uzunluğu 65532 karakterdir. (yani net mesajının kendi sınırı)
Mevcut net mesajına bir tablo (table) ekler. Her anahtar/değer çifti başına 16 ekstra bit ekler, bu nedenle mümkünse her bir anahtar/değeri tam türüyle ayrı ayrı yazmanız daha iyidir.
Tüm net mesajlarının 64kb'lık bir arabelleği vardır. Bu fonksiyon, bu arabellek aşıldığında kontrol etmez veya hata vermez. util.TableToJSON ve util.Compress kullanarak ortaya çıkan dizeyi 60kb'lık parçalar halinde göndermeyi ve alıcı tarafta tersini yapmayı düşünebilirsiniz.
Bu dahili olarak kullanılır - kullanabilseniz de muhtemelen kullanmamalısınız.
net.WriteTable tarafından dahili olarak kullanılır.
Mevcut net mesajına herhangi bir türde değer ekler.
net.ReadType ile okumayı kolaylaştırmak için, türü belirten ek bir 8-bitlik işaretsiz tamsayı, değerden önce pakete otomatik olarak yazılacaktır. Yazdığınız veri türünü biliyorsanız, gönderilen veri miktarını azaltmak için o özel veri türü için tasarlanmış bir fonksiyon kullanın.
Mevcut net mesajına belirtilen bit sayısına sahip işaretsiz bir tamsayı ekler.
Negatif ve pozitif sayılar göndermek istiyorsanız net.WriteInt kullanın. Tam sayı olmayan bir sayı (ör. 2.25) için net.WriteFloat kullanın.
İşaretsiz sayılar negatif sayıları desteklemez.
net.WriteUInt64( string uint64 )
Mevcut net mesajına 64 bitlik işaretsiz bir tamsayı ekler.
Bir uint64 için sınır 18.446.744.073.709.551.615'tir.
Sınırın üzerindeki her şey sınıra ayarlanacaktır.
İşaretsiz sayılar negatif sayıları desteklemez.
net.WriteVector( Vector vector )
Mevcut net mesajına bir vektör (vector) ekler.
Bu fonksiyonla gönderilen vektörler sıkıştırılır, bu da hassasiyet kaybına neden olabilir. 16384'ten büyük veya -16384'ten küçük XYZ bileşenleri geri döndürülemez şekilde değiştirilir (en anlamlı bitler kırpılır) ve ondalık noktadan sonraki hassasiyet düşüktür.
Tüm sunucular · GmodTR Launcher · Rehber · GMod Wiki · GmodTR nedir? · Sunucu ekle · Discord