GrandMA3 Plugin ile MAnet Üzerinden Veri Alışverişi

GrandMA3 plugin geliştirirken MAnet protokolü üzerinden nasıl veri gönderip alabileceğinizi öğrenin.

MAnet ve Plugin Entegrasyonu Neden Önemli?

GrandMA3 ekosisteminde birden fazla konsol veya Node cihazı aynı ağ üzerinde çalışırken aralarındaki veri akışı MAnet protokolü üzerinden sağlanır. Plugin geliştirirken bu protokole erişebilmek, sahnedeki diğer cihazlardan veri okumak veya onlara komut göndermek için kritik bir yetenektir.

MAnet'e Plugin İçinden Erişim

GrandMA3 Lua API'si, MAnet katmanına doğrudan erişim sağlayan birkaç temel fonksiyon sunar. Plugin dosyanızın başında gerekli modülleri tanımlamanız gerekir.

Temel Bağlantı Nesneleri

MAnet üzerinden veri alışverişi yapmak için öncelikle DataPool ve Session nesnelerine erişmeniz gerekir:

  • GetSessionIndex() — Aktif session numarasını döner
  • GetDataPool() — Paylaşımlı veri havuzuna erişim sağlar
  • GetMAnet() — MAnet katmanını temsil eden nesneyi döner

Veri Okuma Örneği

Aşağıdaki kod parçası, MAnet üzerinden bağlı cihazların listesini okur ve konsola yazdırır:

local manet = GetMAnet() local devices = manet:GetAllDevices() for i, device in ipairs(devices) do Printf("%s - IP: %s", device:GetName(), device:GetIPAddress()) end
İpucu: GetAllDevices() yalnızca aynı session içindeki cihazları döner. Farklı session'lardaki cihazlara erişmek için önce session ID'sini doğrulamanız gerekir.

MAnet Üzerinden Veri Gönderme

Plugin içinden diğer cihazlara veri göndermek için SendMAnetData() fonksiyonu kullanılır. Bu fonksiyon özellikle özel mesajlaşma ve durum senkronizasyonu senaryolarında işe yarar.

Mesaj Yapısı

MAnet mesajları bir header ve payload bölümünden oluşur. Header, hedef cihazı ve mesaj tipini tanımlar; payload ise taşınan veriyi içerir:

  1. Hedef cihazın GUID veya IP adresi belirlenir
  2. Mesaj tipi tanımlanır (MSG_TYPE_CUSTOM plugin mesajları için önerilir)
  3. Payload tablo olarak hazırlanır ve serialize edilir
  4. SendMAnetData(target, msgType, payload) çağrısı yapılır

Gelen Veri Dinleme

Diğer cihazlardan gelen verileri yakalamak için plugin içinde bir callback fonksiyonu kaydetmeniz gerekir:

RegisterMAnetCallback("MyPlugin", function(sender, msgType, data) if msgType == MSG_TYPE_CUSTOM then Printf("Veri geldi: %s -> %s", sender, tostring(data)) end end)
Önemli Not: Callback'i plugin kapatılırken mutlaka UnregisterMAnetCallback("MyPlugin") ile kaldırın. Aksi hâlde sistem kaynaklarında sızıntı oluşabilir ve konsol kararsız davranabilir.

Pratik Kullanım Senaryoları

  • Cue senkronizasyonu: Birden fazla konsolun aynı anda aynı cue'yu tetiklemesi
  • Durum takibi: Backup konsolun aktif konsolun fixture durumunu anlık izlemesi
  • Özel veri transferi: Harici bir sistemden alınan sensör verisinin tüm konsollara dağıtılması
  • Hata bildirimi: Herhangi bir Node cihazında oluşan hatanın operatör konsoluna iletilmesi

Dikkat Edilmesi Gereken Noktalar

MAnet üzerinden yoğun veri göndermek ağ trafiğini artırır ve konsol performansını etkileyebilir. Plugin içinde gönderim sıklığını throttle mekanizmasıyla sınırlandırın; örneğin her frame yerine her 100ms'de bir gönderim yapacak şekilde zamanlayıcı kullanın. Ayrıca payload boyutunu küçük tutmak, özellikle büyük session'larda gecikmeyi minimize eder.