summaryrefslogtreecommitdiff
path: root/server/session/session.go
diff options
context:
space:
mode:
Diffstat (limited to 'server/session/session.go')
-rw-r--r--server/session/session.go14
1 files changed, 12 insertions, 2 deletions
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() {