Constant errors

This commit is contained in:
Ola
2022-09-13 15:51:28 +02:00
parent 5dfe76a8fb
commit 964c1f0660
3 changed files with 24 additions and 16 deletions
+10
View File
@@ -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")
)
+7 -8
View File
@@ -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
View File
@@ -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})