mqttagent

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

commit 114d7eb8dc936de6c74f0a443400ff21d9a6eefc
parent 765d377fcefa6e5bfc469a75831000b41ad324dc
Author: Natasha Kerensikova <natgh@instinctive.eu>
Date:   Mon, 10 Feb 2025 18:17:17 +0000

UserData object creation is factored
Diffstat:
Mmqttagent.go | 21+++++++++------------
1 file changed, 9 insertions(+), 12 deletions(-)

diff --git a/mqttagent.go b/mqttagent.go @@ -223,6 +223,12 @@ func dup(src []byte) []byte { return res } +func newUserData(L *lua.LState, v interface{}) *lua.LUserData { + res := L.NewUserData() + res.Value = v + return res +} + /********** State Object in the Lua Interpreter **********/ const luaStateName = "_mqttagent" @@ -232,11 +238,8 @@ const keyCnxTable = 3 const keyTimerTable = 4 func registerState(L *lua.LState, clientPrefix string, toLua chan<- MqttMessage) { - ud := L.NewUserData() - ud.Value = toLua - st := L.NewTable() - L.RawSetInt(st, keyChanToLua, ud) + L.RawSetInt(st, keyChanToLua, newUserData(L, toLua)) L.RawSetInt(st, keyClientPrefix, lua.LString(clientPrefix)) L.RawSetInt(st, keyCnxTable, L.NewTable()) L.RawSetInt(st, keyTimerTable, L.NewTable()) @@ -353,16 +356,10 @@ func newMqttClient(L *lua.LState) int { } go mqttRead(client, stateChanToLua(L), id) - ud_cli := L.NewUserData() - ud_cli.Value = client - - ud_cfg := L.NewUserData() - ud_cfg.Value = config - res := L.NewTable() - L.RawSetInt(res, keyClient, ud_cli) + L.RawSetInt(res, keyClient, newUserData(L, client)) L.RawSetInt(res, keySubTable, L.NewTable()) - L.RawSetInt(res, keyConfig, ud_cfg) + L.RawSetInt(res, keyConfig, newUserData(L, config)) L.SetMetatable(res, L.GetTypeMetatable(luaMqttClientTypeName)) L.RawSetInt(stateCnxTable(L), id, res) L.Push(res)