diff options
| author | Kyren223 <Kyren223@proton.me> | 2024-11-27 18:40:19 +0200 |
|---|---|---|
| committer | Kyren223 <Kyren223@proton.me> | 2024-11-27 18:40:19 +0200 |
| commit | 180bb557b1f82ce81fb042442b9bce75bbefb301 (patch) | |
| tree | 307fb647336218264b2f06c59f62f79f59599e55 /internal/server/session | |
| parent | 0aa83227da57ae67ad9d06f1032cebaaff4e8dfa (diff) | |
Fixed server hanging until the client closes the connection,
it now forcibly closes the connection when it's terminated
Diffstat (limited to 'internal/server/session')
| -rw-r--r-- | internal/server/session/session.go | 15 |
1 files changed, 12 insertions, 3 deletions
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 + } +} |
