Constant errors
This commit is contained in:
@@ -0,0 +1,10 @@
|
||||
package melody
|
||||
|
||||
import "errors"
|
||||
|
||||
var (
|
||||
ErrClosed = errors.New("melody instance is closed")
|
||||
ErrSessionClosed = errors.New("session is closed")
|
||||
ErrWriteClosed = errors.New("tried to write to closed a session")
|
||||
ErrMessageBufferFull = errors.New("session message buffer is full")
|
||||
)
|
||||
@@ -1,7 +1,6 @@
|
||||
package melody
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"net/http"
|
||||
"sync"
|
||||
|
||||
@@ -164,7 +163,7 @@ func (m *Melody) HandleRequest(w http.ResponseWriter, r *http.Request) error {
|
||||
// HandleRequestWithKeys does the same as HandleRequest but populates session.Keys with keys.
|
||||
func (m *Melody) HandleRequestWithKeys(w http.ResponseWriter, r *http.Request, keys map[string]interface{}) error {
|
||||
if m.hub.closed() {
|
||||
return errors.New("melody instance is closed")
|
||||
return ErrClosed
|
||||
}
|
||||
|
||||
conn, err := m.Upgrader.Upgrade(w, r, w.Header())
|
||||
@@ -206,7 +205,7 @@ func (m *Melody) HandleRequestWithKeys(w http.ResponseWriter, r *http.Request, k
|
||||
// Broadcast broadcasts a text message to all sessions.
|
||||
func (m *Melody) Broadcast(msg []byte) error {
|
||||
if m.hub.closed() {
|
||||
return errors.New("melody instance is closed")
|
||||
return ErrClosed
|
||||
}
|
||||
|
||||
message := &envelope{t: websocket.TextMessage, msg: msg}
|
||||
@@ -218,7 +217,7 @@ func (m *Melody) Broadcast(msg []byte) error {
|
||||
// BroadcastFilter broadcasts a text message to all sessions that fn returns true for.
|
||||
func (m *Melody) BroadcastFilter(msg []byte, fn func(*Session) bool) error {
|
||||
if m.hub.closed() {
|
||||
return errors.New("melody instance is closed")
|
||||
return ErrClosed
|
||||
}
|
||||
|
||||
message := &envelope{t: websocket.TextMessage, msg: msg, filter: fn}
|
||||
@@ -247,7 +246,7 @@ func (m *Melody) BroadcastMultiple(msg []byte, sessions []*Session) error {
|
||||
// BroadcastBinary broadcasts a binary message to all sessions.
|
||||
func (m *Melody) BroadcastBinary(msg []byte) error {
|
||||
if m.hub.closed() {
|
||||
return errors.New("melody instance is closed")
|
||||
return ErrClosed
|
||||
}
|
||||
|
||||
message := &envelope{t: websocket.BinaryMessage, msg: msg}
|
||||
@@ -259,7 +258,7 @@ func (m *Melody) BroadcastBinary(msg []byte) error {
|
||||
// BroadcastBinaryFilter broadcasts a binary message to all sessions that fn returns true for.
|
||||
func (m *Melody) BroadcastBinaryFilter(msg []byte, fn func(*Session) bool) error {
|
||||
if m.hub.closed() {
|
||||
return errors.New("melody instance is closed")
|
||||
return ErrClosed
|
||||
}
|
||||
|
||||
message := &envelope{t: websocket.BinaryMessage, msg: msg, filter: fn}
|
||||
@@ -278,7 +277,7 @@ func (m *Melody) BroadcastBinaryOthers(msg []byte, s *Session) error {
|
||||
// Close closes the melody instance and all connected sessions.
|
||||
func (m *Melody) Close() error {
|
||||
if m.hub.closed() {
|
||||
return errors.New("melody instance is already closed")
|
||||
return ErrClosed
|
||||
}
|
||||
|
||||
m.hub.exit <- &envelope{t: websocket.CloseMessage, msg: []byte{}}
|
||||
@@ -290,7 +289,7 @@ func (m *Melody) Close() error {
|
||||
// Use the FormatCloseMessage function to format a proper close message payload.
|
||||
func (m *Melody) CloseWithMsg(msg []byte) error {
|
||||
if m.hub.closed() {
|
||||
return errors.New("melody instance is already closed")
|
||||
return ErrClosed
|
||||
}
|
||||
|
||||
m.hub.exit <- &envelope{t: websocket.CloseMessage, msg: msg}
|
||||
|
||||
+7
-8
@@ -1,7 +1,6 @@
|
||||
package melody
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"net/http"
|
||||
"sync"
|
||||
"time"
|
||||
@@ -23,20 +22,20 @@ type Session struct {
|
||||
|
||||
func (s *Session) writeMessage(message *envelope) {
|
||||
if s.closed() {
|
||||
s.melody.errorHandler(s, errors.New("tried to write to closed a session"))
|
||||
s.melody.errorHandler(s, ErrWriteClosed)
|
||||
return
|
||||
}
|
||||
|
||||
select {
|
||||
case s.output <- message:
|
||||
default:
|
||||
s.melody.errorHandler(s, errors.New("session message buffer is full"))
|
||||
s.melody.errorHandler(s, ErrMessageBufferFull)
|
||||
}
|
||||
}
|
||||
|
||||
func (s *Session) writeRaw(message *envelope) error {
|
||||
if s.closed() {
|
||||
return errors.New("tried to write to a closed session")
|
||||
return ErrWriteClosed
|
||||
}
|
||||
|
||||
s.conn.SetWriteDeadline(time.Now().Add(s.melody.Config.WriteWait))
|
||||
@@ -144,7 +143,7 @@ func (s *Session) readPump() {
|
||||
// Write writes message to session.
|
||||
func (s *Session) Write(msg []byte) error {
|
||||
if s.closed() {
|
||||
return errors.New("session is closed")
|
||||
return ErrSessionClosed
|
||||
}
|
||||
|
||||
s.writeMessage(&envelope{t: websocket.TextMessage, msg: msg})
|
||||
@@ -155,7 +154,7 @@ func (s *Session) Write(msg []byte) error {
|
||||
// WriteBinary writes a binary message to session.
|
||||
func (s *Session) WriteBinary(msg []byte) error {
|
||||
if s.closed() {
|
||||
return errors.New("session is closed")
|
||||
return ErrSessionClosed
|
||||
}
|
||||
|
||||
s.writeMessage(&envelope{t: websocket.BinaryMessage, msg: msg})
|
||||
@@ -166,7 +165,7 @@ func (s *Session) WriteBinary(msg []byte) error {
|
||||
// Close closes session.
|
||||
func (s *Session) Close() error {
|
||||
if s.closed() {
|
||||
return errors.New("session is already closed")
|
||||
return ErrSessionClosed
|
||||
}
|
||||
|
||||
s.writeMessage(&envelope{t: websocket.CloseMessage, msg: []byte{}})
|
||||
@@ -178,7 +177,7 @@ func (s *Session) Close() error {
|
||||
// Use the FormatCloseMessage function to format a proper close message payload.
|
||||
func (s *Session) CloseWithMsg(msg []byte) error {
|
||||
if s.closed() {
|
||||
return errors.New("session is already closed")
|
||||
return ErrSessionClosed
|
||||
}
|
||||
|
||||
s.writeMessage(&envelope{t: websocket.CloseMessage, msg: msg})
|
||||
|
||||
Reference in New Issue
Block a user