From 180bb557b1f82ce81fb042442b9bce75bbefb301 Mon Sep 17 00:00:00 2001 From: Kyren223 Date: Wed, 27 Nov 2024 18:40:19 +0200 Subject: Fixed server hanging until the client closes the connection, it now forcibly closes the connection when it's terminated --- internal/server/session/session.go | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) (limited to 'internal/server/session/session.go') diff --git a/internal/server/session/session.go b/internal/server/session/session.go index 1f70ec7..dea9af2 100644 --- a/internal/server/session/session.go +++ b/internal/server/session/session.go @@ -24,7 +24,7 @@ type SessionManager interface { type Session struct { manager SessionManager addr *net.TCPAddr - WriteQueue chan packet.Packet + writeQueue chan packet.Packet issuedTime time.Time challenge []byte @@ -37,7 +37,7 @@ type Session struct { func NewSession(manager SessionManager, addr *net.TCPAddr, id snowflake.ID, pubKey ed25519.PublicKey) *Session { session := &Session{ - WriteQueue: make(chan packet.Packet, 10), + writeQueue: make(chan packet.Packet, 10), PubKey: pubKey, manager: manager, addr: addr, @@ -73,9 +73,18 @@ func (s *Session) Challenge() []byte { func (s *Session) Write(ctx context.Context, pkt packet.Packet) bool { select { - case s.WriteQueue <- pkt: + case s.writeQueue <- pkt: return true case <-ctx.Done(): return false } } + +func (s *Session) Read(ctx context.Context) (packet.Packet, bool) { + select { + case pkt := <-s.writeQueue: + return pkt, true + case <-ctx.Done(): + return packet.Packet{}, false + } +} -- cgit v1.3.1