Net Kütüphanesi Örneği
net kütüphanesinin nasıl kullanılacağına dair basit bir örnek. Bu dosyayı garrysmod/garrysmod/lua/autorun/net_example.lua olarak kaydedebilirsiniz.
--[[
Temel olaylar dizisi:
0. "MsgName" için ağ (network) dizelerini ve geri çağırma (callback) fonksiyonlarını kaydederiz.
Bu, mesajları göndermeye veya almaya başlamadan ÇOK önce gerçekleşir.
Çoğu durumda, bunu dosyalar ilk yüklendiğinde yaparsınız.
1. net.Start() çağrılır ve ağ mesajının adı kaydedilir.
2. Gelecekteki tüm net.WriteBlah() çağrıları bir yerde bir tabloda saklanır.
3. net.Send(target) veya net.SendToServer() çağrılır.
4. Kaydedilen tüm veriler (mesaj adı dahil) kodlanır ve doğrudan alıcıya gönderilir.
5. Alıcı mesajı alır.
6. Alıcı mesajın adını okur.
7. Bu isimle bir net.Receive() girdisi varsa (bkz. adım 0), ona bağlı olan fonksiyonu çalıştırırız.
8. Bu fonksiyon içinde çalışan herhangi bir net.ReadBlah(), ağ mesajından bir veri parçası alır.
9. Fonksiyon bittiğinde, alınan mesajın kullanılmayan kısmı atılır.
]]
if SERVER then
-- "MsgName"i bir noktada görmeyi beklediğimiz bir ağ mesajı olarak kaydet.
util.AddNetworkString( "MsgName" )
-- Bir geri çağırma (callback) fonksiyonu tanımla:
-- 1) Player argümanı sadece sunucuya özeldir.
-- 2) İstemciler sadece, mesajın bayt cinsinden toplam boyutunu belirten length argümanına sahiptir (örneğin 1024, alınan 1 KB'lık veriye eşittir).
local MsgNameReceived = function( lengthOfMessageReceived, playerWhoSentTheMessageToUs )
-- Hepsini, yazıldıkları sırayla okuduğumuza dikkat edin:
local var1 = net.ReadType() --Mesajın ilk bölümünü oku.
local var2 = net.ReadString() --Mesajın ikinci bölümünü oku.
local var3 = net.ReadEntity() --Mesajın üçüncü bölümünü oku.
local var4 = net.ReadString() --Mesajın dördüncü bölümünü oku.
-- Şimdi her birinin arasına sekme koyarak yazdıralım:
print( lengthOfMessageReceived, playerWhoSentTheMessageToUs, var1, var2, var3, var4 )
end
-- Bir geri çağırma fonksiyonu tanımladığımıza göre, şimdi bunu net.Receive() kullanarak net sistemine kaydediyoruz.
net.Receive( "MsgName", MsgNameReceived )
-- Artık "MsgName" adında bir mesaj aldığımızda, MsgNameReceived() fonksiyonunu 'lengthOfMessageReceived' ve 'playerWhoSentTheMessageToUs' argümanlarıyla çalıştıracağız.
elseif CLIENT then
-- Test ağ mesajımızda kullanılacak bazı verileri tanımla:
local data1 = 3
local data2 = "swagswag"
local data3 = Player(1)
local data4 = "other string"
function SendOurData()
-- Bir paket oluşturmaya başla. Bundan sonraki tüm net.WriteBlah() çağrıları, biz gönder diyene kadar saklanacaktır.
net.Start( "MsgName" )
-- Öğe 1: bilinmeyen veri türü.
net.WriteType( data1 ) -- Gönderdiğiniz verinin türünden emin değilseniz bu fonksiyonu gerçekten kullanabilirsiniz. (Bu fonksiyon gizlice, alıcıya verinin türünü açıklayan bir tamsayı gönderir, bu yüzden biraz daha az verimlidir.)
-- Öğe 2: bir dize.
net.WriteString( data2 )
-- Öğe 3: bir entity'ye (varlığa) işaretçi.
net.WriteEntity( data3 )
-- Öğe 4: Başka bir dize.
net.WriteString( data4 )
net.SendToServer() --Şu an ile son net.Start() arasındaki tüm veriyi sunucuya gönder.
end
-- Bu dosyayı test etmek için aşağıdaki konsol komutunu kullanın.
concommand.Add( "test_net_messages", SendOurData )
end
18:21, 11 Şubat 2016 (UTC)
Tüm sunucular · GmodTR Launcher · Rehber · GMod Wiki · GmodTR nedir? · Sunucu ekle · Discord