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

GrandMA3 plugin sistemi ve MAnet protokolü kullanarak konsollar arası gerçek zamanlı veri alışverişini nasıl yapacağınızı öğrenin.

MAnet ve Plugin Sistemi: Temel Kavramlar

MAnet, GrandMA3 ekosisteminin omurgasını oluşturan özel ağ protokolüdür. Konsollar, NPU'lar, onPC oturumları ve diğer MA donanımları bu protokol aracılığıyla birbirleriyle iletişim kurar. GrandMA3 plugin sistemi ise Lua tabanlı betikler sayesinde bu ağ katmanına doğrudan erişim imkânı tanır.

Plugin'ler yalnızca yerel show verisiyle çalışmak zorunda değildir. MAnet üzerinden veri göndermek ve almak, çok konsol kurulumlarında senkronizasyon, harici tetikleyiciler veya özel veri paylaşım senaryoları için son derece güçlü bir araç haline gelir.

Plugin İçinde Ağ İletişimine Giriş

GrandMA3, plugin'lere ağ erişimi için built-in Lua kütüphaneleri sağlar. Bu kütüphaneler arasında en sık kullanılanlar socket modülü ve MA'nın kendi gma API fonksiyonlarıdır.

Önemli Not: MAnet, kapalı bir MA protokolüdür. Plugin'ler doğrudan MAnet paketleri oluşturamaz; bunun yerine GrandMA3'ün sunduğu API katmanı üzerinden session verisine erişir ve UDP/TCP soketi aracılığıyla harici sistemlerle haberleşebilir.

Session İçi Veri Paylaşımı

Aynı MAnet session'ında bulunan cihazlar show verisini otomatik olarak senkronize eder. Plugin açısından bu şu anlama gelir: bir konsolda SetVar() ile yazılan bir global değişken, session'daki diğer konsollardan da okunabilir.

Örnek kullanım:

  • Ana konsolda bir plugin ile sahne numarasını global değişkene yazar
  • Yedek konsolda çalışan başka bir plugin bu değişkeni okuyarak kendi işlemini tetikler
  • İki sistem arasında ekstra bir ağ katmanına gerek kalmaz

UDP ile Harici Veri Alışverişi

MAnet dışındaki sistemlerle (örneğin bir medya sunucusu veya özel bir kontrol uygulaması) veri alışverişi için plugin içinde UDP soket açmak yaygın bir yöntemdir.

Basit bir UDP alıcı örneği:

local socket = require("socket") local udp = socket.udp() udp:setsockname("*", 7000) udp:settimeout(0) local data = udp:receive()

Bu yapıyla plugin, 7000 numaralı porta gelen UDP mesajlarını dinler. Gelen veriyi parse ederek bir cue'yu tetikleyebilir, bir fixture parametresini değiştirebilir veya başka bir plugin fonksiyonunu çağırabilirsiniz.

Pratik Bir Senaryo: İki Konsol Arası Durum Senkronizasyonu

  1. Ana konsolda bir Sender Plugin oluşturun; belirli aralıklarla veya olay bazlı olarak bir durum mesajı hazırlayın.
  2. Mesajı gma.echo() ile log'a düşürerek önce lokal test edin.
  3. UDP soketi açarak hedef konsolun IP adresine paketi gönderin.
  4. Hedef konsolda bir Receiver Plugin çalıştırın; soketi dinleyerek gelen veriyi işleyin.
  5. Her iki plugin'i de Executor'a bağlayıp GO butonu ile başlatın; böylece gösterge ışıkları üzerinden durumu takip edebilirsiniz.

Dikkat Edilmesi Gereken Noktalar

  • Plugin'ler bloklayıcı (blocking) çağrılardan kaçınmalıdır; settimeout(0) ile non-blocking mod kullanın.
  • Yüksek frekanslı veri gönderiminde paket kaybını göz önünde bulundurun; kritik veriler için basit bir onay (ACK) mekanizması ekleyin.
  • MAnet ağında gereksiz broadcast trafiği oluşturmaktan kaçının; hedef IP'yi her zaman unicast olarak belirtin.
  • Plugin hata yönetimini pcall() ile sarmalayın; ağ hatası tüm plugin'i çökertmemelidir.