natsbot

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

commit fef175d112af373859834f9a107d65f7afe92f04
parent 6ce21cb4ca5904c8507e97e46a8a57bd1ea846a8
Author: Natasha Kerensikova <natgh@instinctive.eu>
Date:   Wed, 10 Sep 2025 18:01:14 +0000

Internal events are generated
Diffstat:
Mnatsbot.go | 30+++++++++++++++++++++++++++---
1 file changed, 27 insertions(+), 3 deletions(-)

diff --git a/natsbot.go b/natsbot.go @@ -341,8 +341,14 @@ func toConfig(L *lua.LState, lv lua.LValue) (*natsConfig, natsCbMap, error) { } } -func newConn(cfg *natsConfig) (*nats.Conn, error) { - opt := []nats.Option{} +func newConn(evtChan chan *internalEvent, cfg *natsConfig) (*nats.Conn, error) { + opt := []nats.Option{ + nats.DisconnectErrHandler(newConnErrHandler(evtChan, "disconnected")), + nats.ReconnectHandler(newConnHandler(evtChan, "reconnected")), + nats.ReconnectErrHandler(newConnErrHandler(evtChan, "reconnect_error")), + nats.ClosedHandler(newConnHandler(evtChan, "closed")), + nats.ErrorHandler(newErrHandler(evtChan, "error")), + } if cfg.name != "" { opt = append(opt, nats.Name(cfg.name)) @@ -400,7 +406,7 @@ func natsConnect(L *lua.LState) int { } } - nc, err := newConn(pcfg) + nc, err := newConn(stateEvtChan(L), pcfg) if err != nil { log.Println("newConn", err) L.Push(lua.LNil) @@ -440,6 +446,24 @@ func wrapConn(L *lua.LState, nc *nats.Conn, cbmap natsCbMap) lua.LValue { return luaConn } +func newConnHandler(evtChan chan *internalEvent, name string) nats.ConnHandler { + return func(nc *nats.Conn) { + evtChan <- &internalEvent{name: name, nc: nc} + } +} + +func newConnErrHandler(evtChan chan *internalEvent, name string) nats.ConnErrHandler { + return func(nc *nats.Conn, err error) { + evtChan <- &internalEvent{name: name, nc: nc, err: err} + } +} + +func newErrHandler(evtChan chan *internalEvent, name string) nats.ErrHandler { + return func(nc *nats.Conn, s *nats.Subscription, err error) { + evtChan <- &internalEvent{name: name, nc: nc, subs: s, err: err} + } +} + func checkConn(L *lua.LState, index int) *nats.Conn { ud := L.CheckUserData(index)