From 194c63381a8b19f6a9198ff30a307b65acc2af76 Mon Sep 17 00:00:00 2001 From: citrons Date: Fri, 30 May 2025 17:41:53 -0500 Subject: fix trying to send lines to disconnected clients --- server/session/session.go | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) (limited to 'server/session/session.go') diff --git a/server/session/session.go b/server/session/session.go index cd36a7b..b6f9e5d 100644 --- a/server/session/session.go +++ b/server/session/session.go @@ -2,12 +2,14 @@ package session import ( "citrons.xyz/talk/proto" + "sync/atomic" ) type Session struct { send chan<- proto.Line UserId string subscribedTo map[*Stream]bool + disconnected atomic.Bool } func NewSession(send chan<- proto.Line) *Session { @@ -18,7 +20,9 @@ func NewSession(send chan<- proto.Line) *Session { } func (s *Session) Event(ev proto.Command) { - s.send <- proto.Line {'*', "", ev} + if !s.disconnected.Load() { + s.send <- proto.Line {'*', "", ev} + } } func (s *Session) Subscriptions() map[*Stream]bool { @@ -40,6 +44,10 @@ func (s *Session) Unsubscribe(to *Stream) { } } +func (s *Session) Close() { + s.disconnected.Store(true) +} + type Stream struct { subscribers map[*Session]bool } @@ -67,7 +75,9 @@ type Request struct { } func (r Request) Reply(reply proto.Command) { - r.From.send <- proto.Line {'!', r.RequestId, reply} + if !r.From.disconnected.Load() { + r.From.send <- proto.Line {'!', r.RequestId, reply} + } } func (r Request) ReplyOk() { -- cgit v1.2.3