Use envelope as value
This commit is contained in:
@@ -61,10 +61,10 @@ func (ss *sessionSet) all() []*Session {
|
||||
|
||||
type hub struct {
|
||||
sessions sessionSet
|
||||
broadcast chan *envelope
|
||||
broadcast chan envelope
|
||||
register chan *Session
|
||||
unregister chan *Session
|
||||
exit chan *envelope
|
||||
exit chan envelope
|
||||
open atomic.Bool
|
||||
}
|
||||
|
||||
@@ -73,10 +73,10 @@ func newHub() *hub {
|
||||
sessions: sessionSet{
|
||||
members: make(map[*Session]struct{}),
|
||||
},
|
||||
broadcast: make(chan *envelope),
|
||||
broadcast: make(chan envelope),
|
||||
register: make(chan *Session),
|
||||
unregister: make(chan *Session),
|
||||
exit: make(chan *envelope),
|
||||
exit: make(chan envelope),
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -161,7 +161,7 @@ func (m *Melody) HandleRequestWithKeys(w http.ResponseWriter, r *http.Request, k
|
||||
Request: r,
|
||||
Keys: keys,
|
||||
conn: conn,
|
||||
output: make(chan *envelope, m.Config.MessageBufferSize),
|
||||
output: make(chan envelope, m.Config.MessageBufferSize),
|
||||
outputDone: make(chan struct{}),
|
||||
melody: m,
|
||||
open: true,
|
||||
@@ -193,7 +193,7 @@ func (m *Melody) Broadcast(msg []byte) error {
|
||||
return ErrClosed
|
||||
}
|
||||
|
||||
message := &envelope{t: websocket.TextMessage, msg: msg}
|
||||
message := envelope{t: websocket.TextMessage, msg: msg}
|
||||
m.hub.broadcast <- message
|
||||
|
||||
return nil
|
||||
@@ -205,7 +205,7 @@ func (m *Melody) BroadcastFilter(msg []byte, fn func(*Session) bool) error {
|
||||
return ErrClosed
|
||||
}
|
||||
|
||||
message := &envelope{t: websocket.TextMessage, msg: msg, filter: fn}
|
||||
message := envelope{t: websocket.TextMessage, msg: msg, filter: fn}
|
||||
m.hub.broadcast <- message
|
||||
|
||||
return nil
|
||||
@@ -234,7 +234,7 @@ func (m *Melody) BroadcastBinary(msg []byte) error {
|
||||
return ErrClosed
|
||||
}
|
||||
|
||||
message := &envelope{t: websocket.BinaryMessage, msg: msg}
|
||||
message := envelope{t: websocket.BinaryMessage, msg: msg}
|
||||
m.hub.broadcast <- message
|
||||
|
||||
return nil
|
||||
@@ -246,7 +246,7 @@ func (m *Melody) BroadcastBinaryFilter(msg []byte, fn func(*Session) bool) error
|
||||
return ErrClosed
|
||||
}
|
||||
|
||||
message := &envelope{t: websocket.BinaryMessage, msg: msg, filter: fn}
|
||||
message := envelope{t: websocket.BinaryMessage, msg: msg, filter: fn}
|
||||
m.hub.broadcast <- message
|
||||
|
||||
return nil
|
||||
@@ -273,7 +273,7 @@ func (m *Melody) Close() error {
|
||||
return ErrClosed
|
||||
}
|
||||
|
||||
m.hub.exit <- &envelope{t: websocket.CloseMessage, msg: []byte{}}
|
||||
m.hub.exit <- envelope{t: websocket.CloseMessage, msg: []byte{}}
|
||||
|
||||
return nil
|
||||
}
|
||||
@@ -285,7 +285,7 @@ func (m *Melody) CloseWithMsg(msg []byte) error {
|
||||
return ErrClosed
|
||||
}
|
||||
|
||||
m.hub.exit <- &envelope{t: websocket.CloseMessage, msg: msg}
|
||||
m.hub.exit <- envelope{t: websocket.CloseMessage, msg: msg}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
+2
-2
@@ -573,8 +573,8 @@ func TestErrSessionClosed(t *testing.T) {
|
||||
assert.ErrorIs(t, s.Close(), ErrSessionClosed)
|
||||
assert.ErrorIs(t, ws.m.BroadcastMultiple(TestMsg, []*Session{s}), ErrSessionClosed)
|
||||
|
||||
assert.ErrorIs(t, s.writeRaw(nil), ErrWriteClosed)
|
||||
s.writeMessage(nil)
|
||||
assert.ErrorIs(t, s.writeRaw(envelope{}), ErrWriteClosed)
|
||||
s.writeMessage(envelope{})
|
||||
}
|
||||
|
||||
func TestErrMessageBufferFull(t *testing.T) {
|
||||
|
||||
+8
-8
@@ -14,14 +14,14 @@ type Session struct {
|
||||
Request *http.Request
|
||||
Keys map[string]interface{}
|
||||
conn *websocket.Conn
|
||||
output chan *envelope
|
||||
output chan envelope
|
||||
outputDone chan struct{}
|
||||
melody *Melody
|
||||
open bool
|
||||
rwmutex *sync.RWMutex
|
||||
}
|
||||
|
||||
func (s *Session) writeMessage(message *envelope) {
|
||||
func (s *Session) writeMessage(message envelope) {
|
||||
if s.closed() {
|
||||
s.melody.errorHandler(s, ErrWriteClosed)
|
||||
return
|
||||
@@ -34,7 +34,7 @@ func (s *Session) writeMessage(message *envelope) {
|
||||
}
|
||||
}
|
||||
|
||||
func (s *Session) writeRaw(message *envelope) error {
|
||||
func (s *Session) writeRaw(message envelope) error {
|
||||
if s.closed() {
|
||||
return ErrWriteClosed
|
||||
}
|
||||
@@ -68,7 +68,7 @@ func (s *Session) close() {
|
||||
}
|
||||
|
||||
func (s *Session) ping() {
|
||||
s.writeRaw(&envelope{t: websocket.PingMessage, msg: []byte{}})
|
||||
s.writeRaw(envelope{t: websocket.PingMessage, msg: []byte{}})
|
||||
}
|
||||
|
||||
func (s *Session) writePump() {
|
||||
@@ -156,7 +156,7 @@ func (s *Session) Write(msg []byte) error {
|
||||
return ErrSessionClosed
|
||||
}
|
||||
|
||||
s.writeMessage(&envelope{t: websocket.TextMessage, msg: msg})
|
||||
s.writeMessage(envelope{t: websocket.TextMessage, msg: msg})
|
||||
|
||||
return nil
|
||||
}
|
||||
@@ -167,7 +167,7 @@ func (s *Session) WriteBinary(msg []byte) error {
|
||||
return ErrSessionClosed
|
||||
}
|
||||
|
||||
s.writeMessage(&envelope{t: websocket.BinaryMessage, msg: msg})
|
||||
s.writeMessage(envelope{t: websocket.BinaryMessage, msg: msg})
|
||||
|
||||
return nil
|
||||
}
|
||||
@@ -178,7 +178,7 @@ func (s *Session) Close() error {
|
||||
return ErrSessionClosed
|
||||
}
|
||||
|
||||
s.writeMessage(&envelope{t: websocket.CloseMessage, msg: []byte{}})
|
||||
s.writeMessage(envelope{t: websocket.CloseMessage, msg: []byte{}})
|
||||
|
||||
return nil
|
||||
}
|
||||
@@ -190,7 +190,7 @@ func (s *Session) CloseWithMsg(msg []byte) error {
|
||||
return ErrSessionClosed
|
||||
}
|
||||
|
||||
s.writeMessage(&envelope{t: websocket.CloseMessage, msg: msg})
|
||||
s.writeMessage(envelope{t: websocket.CloseMessage, msg: msg})
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user