natsbot

NATS bot
git clone https://git.instinctive.eu/natsbot.git
Log | Files | Refs | README | LICENSE

commit 8a14413389567c4034d8e72fd34e93a7284ed088
parent 9bf547b547a69daa7fbf9a2649853b3ba863933d
Author: Natasha Kerensikova <natgh@instinctive.eu>
Date:   Fri, 12 Sep 2025 17:40:40 +0000

Callbacks for internal events can be changed
Diffstat:
Mnatsbot.go | 29+++++++++++++++++++++++++++++
1 file changed, 29 insertions(+), 0 deletions(-)

diff --git a/natsbot.go b/natsbot.go @@ -460,6 +460,7 @@ func wrapConn(L *lua.LState, nc *nats.Conn, cbmap natsCbMap) lua.LValue { mt := L.NewTable() L.SetField(mt, "__index", index) + L.SetField(mt, "__newindex", L.NewFunction(connNewIndex)) L.SetMetatable(luaConn, mt) tbl, idx := stateConnTable(L) @@ -474,6 +475,34 @@ func wrapConn(L *lua.LState, nc *nats.Conn, cbmap natsCbMap) lua.LValue { return luaConn } +func connNewIndex(L *lua.LState) int { + ud := L.CheckUserData(1) + + if _, ok := ud.Value.(*nats.Conn); !ok { + L.ArgError(1, "connection expected") + return 0 + } + + event := L.CheckString(2) + if event != "disconnected" && + event != "reconnected" && + event != "reconnect_error" && + event != "closed" && + event != "error" { + L.ArgError(2, "unsupported callback name") + } + + fn := L.Get(3) + if _, ok := fn.(*lua.LFunction); ok && fn != lua.LNil { + L.ArgError(3, "function expected") + } + + mt := L.GetMetatable(ud) + idx := L.GetField(mt, "__index").(*lua.LTable) + L.SetField(idx, event, fn) + return 0 +} + func newConnHandler(evtChan chan *internalEvent, name string) nats.ConnHandler { return func(nc *nats.Conn) { evtChan <- &internalEvent{name: name, nc: nc}