natsim

NATS ↔ Instant Messaging Bridge
git clone https://git.instinctive.eu/natsim.git
Log | Files | Refs | README | LICENSE

commit 13de439291f9284d7faba3d59ce534db79d5dc1d
parent 441fc0e62f070a4b3b47bf8f707b33361049d5b5
Author: Natasha Kerensikova <natgh@instinctive.eu>
Date:   Mon, 16 Jun 2025 19:00:16 +0000

NATS connection status changes are output on IRC
Diffstat:
Mmain.go | 27+++++++++++++++++++++++++--
1 file changed, 25 insertions(+), 2 deletions(-)

diff --git a/main.go b/main.go @@ -146,12 +146,17 @@ func NewNatsIM(configPath string) (*NatsIM, error) { natsim.cmdQueue = make(chan command, 10) natsim.ircQueue = make(chan string, 10) - opt, err := nats.NkeyOptionFromSeed(natsim.Nats.NkeySeed) + optSeed, err := nats.NkeyOptionFromSeed(natsim.Nats.NkeySeed) if err != nil { return nil, err } - natsim.nc, err = nats.Connect(natsim.Nats.Server, opt) + natsim.nc, err = nats.Connect(natsim.Nats.Server, + optSeed, + nats.ConnectHandler(natsim.natsConnected), + nats.DisconnectErrHandler(natsim.natsDisconnected), + nats.ReconnectHandler(natsim.natsReconnected), + nats.ReconnectErrHandler(natsim.natsReconnectErr)) if err != nil { return nil, err } @@ -340,6 +345,16 @@ func (natsim *NatsIM) ircSplit(s string) []string { /**************** Nats Callbacks ****************/ +func (natsim *NatsIM) natsConnected(c *nats.Conn) { + natsim.ircSend("Connected to " + c.ConnectedUrlRedacted()) +} + +func (natsim *NatsIM) natsDisconnected(c *nats.Conn, err error) { + if err != nil { + natsim.ircSendError("Disconnected", err) + } +} + func (natsim *NatsIM) natsReceive(m *nats.Msg) { if !IsKept(m.Subject, m.Data, natsim.Nats.Filter, true) { return @@ -349,6 +364,14 @@ func (natsim *NatsIM) natsReceive(m *nats.Msg) { natsim.ircSend(msg) } +func (natsim *NatsIM) natsReconnected(c *nats.Conn) { + natsim.ircSend("Reconnected to " + c.ConnectedUrlRedacted()) +} + +func (natsim *NatsIM) natsReconnectErr(c *nats.Conn, err error) { + natsim.ircSendError("Reconnect", err) +} + /**************** Filters ****************/ type FilterElement struct {