natsbot

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

commit 6ce21cb4ca5904c8507e97e46a8a57bd1ea846a8
parent 9b90910f15c4d7048f3c8a8312709dc52cc6d124
Author: Natasha Kerensikova <natgh@instinctive.eu>
Date:   Tue,  9 Sep 2025 17:46:48 +0000

Channel for internal message transmission
Diffstat:
Mnatsbot.go | 31+++++++++++++++++++++++++++++--
1 file changed, 29 insertions(+), 2 deletions(-)

diff --git a/natsbot.go b/natsbot.go @@ -32,7 +32,15 @@ type NatsBot interface { Teardown(L *lua.LState) } +type internalEvent struct { + name string + nc *nats.Conn + subs *nats.Subscription + err error +} + func Loop(cb NatsBot, mainScript string, capacity int) { + evtChan := make(chan *internalEvent, capacity) msgChan := make(chan *nats.Msg, capacity) toClean := make(map[*nats.Subscription]bool) @@ -44,7 +52,7 @@ func Loop(cb NatsBot, mainScript string, capacity int) { registerConnType(L) registerTimerType(L) - registerState(L, msgChan) + registerState(L, evtChan, msgChan) if err := L.DoFile(mainScript); err != nil { panic(err) @@ -57,6 +65,14 @@ func Loop(cb NatsBot, mainScript string, capacity int) { for { select { + case evt, ok := <-evtChan: + if !ok { + log.Println("evtChan is closed") + break + } + + processEvt(L, evt) + case msg, ok := <-msgChan: if !ok { @@ -97,6 +113,10 @@ func Loop(cb NatsBot, mainScript string, capacity int) { log.Println("natsbot finished") } +func processEvt(L *lua.LState, evt *internalEvent) { + // TODO +} + func processMsg(L *lua.LState, msg *nats.Msg) { tbl, idx := stateSubsTable(L) subs := L.RawGetInt(tbl, idx[msg.Sub]) @@ -116,6 +136,7 @@ func processMsg(L *lua.LState, msg *nats.Msg) { const luaStateName = "_natsbot" const ( _ = iota + keyEvtChan keyMsgChan keyCfgMap keyConnTable @@ -125,7 +146,7 @@ const ( type subsMap map[*nats.Subscription]int -func registerState(L *lua.LState, msgChan chan *nats.Msg) { +func registerState(L *lua.LState, evtChan chan *internalEvent, msgChan chan *nats.Msg) { conns := L.NewTable() L.RawSetInt(conns, 1, newUserData(L, make(connMap))) @@ -133,6 +154,7 @@ func registerState(L *lua.LState, msgChan chan *nats.Msg) { L.RawSetInt(subs, 1, newUserData(L, make(subsMap))) st := L.NewTable() + L.RawSetInt(st, keyEvtChan, newUserData(L, evtChan)) L.RawSetInt(st, keyMsgChan, newUserData(L, msgChan)) L.RawSetInt(st, keyCfgMap, newUserData(L, make(natsConfigMap))) L.RawSetInt(st, keyConnTable, conns) @@ -169,6 +191,11 @@ func stateValue(L *lua.LState, key int) lua.LValue { return L.RawGetInt(stateGet(L), key) } +func stateEvtChan(L *lua.LState) chan *internalEvent { + ud := stateValue(L, keyEvtChan) + return ud.(*lua.LUserData).Value.(chan *internalEvent) +} + func stateMsgChan(L *lua.LState) chan *nats.Msg { ud := stateValue(L, keyMsgChan) return ud.(*lua.LUserData).Value.(chan *nats.Msg)