mqttagent

MQTT Lua Agent
git clone https://git.instinctive.eu/mqttagent.git
Log | Files | Refs | README | LICENSE

commit d5bad368c580097dc1816146da1e8d704c29e733
parent ef831c88454c740546eaa1b6d0e9a3f4b563dd4b
Author: Natasha Kerensikova <natgh@instinctive.eu>
Date:   Sun, 23 Feb 2025 20:00:34 +0000

Reload infrastructure
Diffstat:
Mmqttagent.go | 27+++++++++++++++++++++++++++
1 file changed, 27 insertions(+), 0 deletions(-)

diff --git a/mqttagent.go b/mqttagent.go @@ -87,6 +87,12 @@ func Run(agent MqttAgent, main_script string, capacity int) { runTimers(L, timer) + if stateReloadRequested(L) { + L = reload(L, agent, main_script) + runTimers(L, timer) + stateRequestReload(L, lua.LNil) + } + if tableIsEmpty(stateCnxTable(L)) && tableIsEmpty(stateTimerTable(L)) { break } @@ -211,6 +217,11 @@ func mqttRead(client *mqtt.Client, toLua chan<- MqttMessage, id int) { } } +func reload(oldL *lua.LState, agent MqttAgent, main_script string) *lua.LState { + log.Println("Reload is not implemented yet") + return oldL +} + func dup(src []byte) []byte { res := make([]byte, len(src)) copy(res, src) @@ -232,6 +243,7 @@ const keyClientNextId = 3 const keyCfgMap = 4 const keyCnxTable = 5 const keyTimerTable = 6 +const keyReloadRequest = 7 func registerState(L *lua.LState, clientPrefix string, toLua chan<- MqttMessage) { st := L.NewTable() @@ -242,6 +254,7 @@ func registerState(L *lua.LState, clientPrefix string, toLua chan<- MqttMessage) L.RawSetInt(st, keyCnxTable, L.NewTable()) L.RawSetInt(st, keyTimerTable, L.NewTable()) L.SetGlobal(luaStateName, st) + L.SetGlobal("reload", L.NewFunction(requestReload)) } func stateValue(L *lua.LState, key int) lua.LValue { @@ -274,6 +287,20 @@ func stateTimerTable(L *lua.LState) *lua.LTable { return stateValue(L, keyTimerTable).(*lua.LTable) } +func stateReloadRequested(L *lua.LState) bool { + return lua.LVAsBool(stateValue(L, keyReloadRequest)) +} + +func stateRequestReload(L *lua.LState, v lua.LValue) { + st := L.GetGlobal(luaStateName).(*lua.LTable) + L.RawSetInt(st, keyReloadRequest, v) +} + +func requestReload(L *lua.LState) int { + stateRequestReload(L, lua.LTrue) + return 0 +} + /********** Lua Object for MQTT client **********/ const luaMqttClientTypeName = "mqttclient"