EventBus#
EventBus to system pub/sub do obsługi zdarzeń wewnętrznych. Zarządza callbackami modułów (OnInit, OnTimer, OnChange) oraz timerami (setTimeout/setInterval) z backendem w Go.
Dwa systemy zdarzeń#
vCLU ma dwa oddzielne systemy:
| System | Plik | Cel |
|---|---|---|
| EventBus | EventBusGo.lua | Eventy wewnętrzne modułów (OnInit, OnTimer, OnChange) |
| StateBus | StateBus.lua | Zmiany stanu dla integracji (MQTT, WebSocket, HomeKit) |
EventBus — eventy wewnętrzne#
-- Rejestracja eventu modułowego (styl Grenton)
EventBus:on(module, "OnSwitchOn", function()
print("switch on!")
end)
-- Rejestracja eventu po stringu (styl pluginów)
EventBus:on("custom_event", function(data)
print("received: " .. tostring(data))
end)StateBus — zmiany stanu#
-- Nasłuchiwanie zmian stanu (dla integracji)
StateBus:on("state_changed", function(data)
-- data = {path, value, type, obj}
print(data.path .. " = " .. tostring(data.value))
end)API EventBus#
Singleton#
local eb = EventBus:getShared()Rejestracja zdarzeń#
-- Moduł + nazwa eventu
eb:on(module, eventName, callback)
-- String event (pluginy)
eb:on(eventName, callback)Emitowanie zdarzeń#
-- Moduł event
eb:fire(module, eventName)
-- String event z argumentami
eb:emit(eventName, arg1, arg2, ...)Wyrejestrowanie#
eb:off(module, eventName, callback) -- zwraca true jeśli usuniętoTimery#
-- Jednorazowy timer
local id = eb:setTimeout(function()
print("once!")
end, 5000) -- 5 sekund
-- Powtarzający się timer
local id = eb:setInterval(function()
print("tick!")
end, 1000) -- co 1 sekundę
-- Anulowanie
eb:clearInterval(id)Klucz wewnętrzny eventu#
EventBus identyfikuje eventy kombinacją ID modułu i nazwy:
function EventBus:getKey(id, event)
return id .. '-' .. event -- np. "module_123-OnSwitchOn"
endObsługa błędów#
Callbacki są wywoływane wewnątrz pcall — błąd w jednym callbacku nie przerywa pozostałych:
local success, err = pcall(callback)
if not success then
Logger:getShared():error("EventBus callback error: " .. tostring(err))
endBackend Go#
Timery EventBus delegowane są do Go przez zarejestrowane funkcje:
| Lua | Go | Opis |
|---|---|---|
eb:setTimeout(cb, ms) | __go_setTimeout | Jednorazowy timer |
eb:setInterval(cb, ms) | __go_setInterval | Powtarzający się timer |
eb:clearInterval(id) | __go_clearTimer | Anulowanie |
Go zarządza precyzyjnym schedulingiem (goroutine z 10ms tickerem), a callbacki Lua są wywoływane w main loop.
Debug#
-- Wylistuj wszystkie zarejestrowane eventy
EventBus:getShared():debug()
-- Wylistuj wszystkie listenery StateBus
StateBus:debug()