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 package melody
import ( import (
"errors"
"net/http" "net/http"
"sync" "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. // 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 { func (m *Melody) HandleRequestWithKeys(w http.ResponseWriter, r *http.Request, keys map[string]interface{}) error {
if m.hub.closed() { if m.hub.closed() {
return errors.New("melody instance is closed") return ErrClosed
} }
conn, err := m.Upgrader.Upgrade(w, r, w.Header()) 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. // Broadcast broadcasts a text message to all sessions.
func (m *Melody) Broadcast(msg []byte) error { func (m *Melody) Broadcast(msg []byte) error {
if m.hub.closed() { if m.hub.closed() {
return errors.New("melody instance is closed") return ErrClosed
} }
message := &envelope{t: websocket.TextMessage, msg: msg} 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. // BroadcastFilter broadcasts a text message to all sessions that fn returns true for.
func (m *Melody) BroadcastFilter(msg []byte, fn func(*Session) bool) error { func (m *Melody) BroadcastFilter(msg []byte, fn func(*Session) bool) error {
if m.hub.closed() { if m.hub.closed() {
return errors.New("melody instance is closed") return ErrClosed
} }
message := &envelope{t: websocket.TextMessage, msg: msg, filter: fn} 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. // BroadcastBinary broadcasts a binary message to all sessions.
func (m *Melody) BroadcastBinary(msg []byte) error { func (m *Melody) BroadcastBinary(msg []byte) error {
if m.hub.closed() { if m.hub.closed() {
return errors.New("melody instance is closed") return ErrClosed
} }
message := &envelope{t: websocket.BinaryMessage, msg: msg} 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. // BroadcastBinaryFilter broadcasts a binary message to all sessions that fn returns true for.
func (m *Melody) BroadcastBinaryFilter(msg []byte, fn func(*Session) bool) error { func (m *Melody) BroadcastBinaryFilter(msg []byte, fn func(*Session) bool) error {
if m.hub.closed() { if m.hub.closed() {
return errors.New("melody instance is closed") return ErrClosed
} }
message := &envelope{t: websocket.BinaryMessage, msg: msg, filter: fn} 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. // Close closes the melody instance and all connected sessions.
func (m *Melody) Close() error { func (m *Melody) Close() error {
if m.hub.closed() { if m.hub.closed() {
return errors.New("melody instance is already closed") return ErrClosed
} }
m.hub.exit <- &envelope{t: websocket.CloseMessage, msg: []byte{}} 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. // Use the FormatCloseMessage function to format a proper close message payload.
func (m *Melody) CloseWithMsg(msg []byte) error { func (m *Melody) CloseWithMsg(msg []byte) error {
if m.hub.closed() { if m.hub.closed() {
return errors.New("melody instance is already closed") return ErrClosed
} }
m.hub.exit <- &envelope{t: websocket.CloseMessage, msg: msg} m.hub.exit <- &envelope{t: websocket.CloseMessage, msg: msg}
+7 -8
View File
@@ -1,7 +1,6 @@
package melody package melody
import ( import (
"errors"
"net/http" "net/http"
"sync" "sync"
"time" "time"
@@ -23,20 +22,20 @@ type Session struct {
func (s *Session) writeMessage(message *envelope) { func (s *Session) writeMessage(message *envelope) {
if s.closed() { if s.closed() {
s.melody.errorHandler(s, errors.New("tried to write to closed a session")) s.melody.errorHandler(s, ErrWriteClosed)
return return
} }
select { select {
case s.output <- message: case s.output <- message:
default: default:
s.melody.errorHandler(s, errors.New("session message buffer is full")) s.melody.errorHandler(s, ErrMessageBufferFull)
} }
} }
func (s *Session) writeRaw(message *envelope) error { func (s *Session) writeRaw(message *envelope) error {
if s.closed() { 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)) s.conn.SetWriteDeadline(time.Now().Add(s.melody.Config.WriteWait))
@@ -144,7 +143,7 @@ func (s *Session) readPump() {
// Write writes message to session. // Write writes message to session.
func (s *Session) Write(msg []byte) error { func (s *Session) Write(msg []byte) error {
if s.closed() { if s.closed() {
return errors.New("session is closed") return ErrSessionClosed
} }
s.writeMessage(&envelope{t: websocket.TextMessage, msg: msg}) 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. // WriteBinary writes a binary message to session.
func (s *Session) WriteBinary(msg []byte) error { func (s *Session) WriteBinary(msg []byte) error {
if s.closed() { if s.closed() {
return errors.New("session is closed") return ErrSessionClosed
} }
s.writeMessage(&envelope{t: websocket.BinaryMessage, msg: msg}) s.writeMessage(&envelope{t: websocket.BinaryMessage, msg: msg})
@@ -166,7 +165,7 @@ func (s *Session) WriteBinary(msg []byte) error {
// Close closes session. // Close closes session.
func (s *Session) Close() error { func (s *Session) Close() error {
if s.closed() { if s.closed() {
return errors.New("session is already closed") return ErrSessionClosed
} }
s.writeMessage(&envelope{t: websocket.CloseMessage, msg: []byte{}}) 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. // Use the FormatCloseMessage function to format a proper close message payload.
func (s *Session) CloseWithMsg(msg []byte) error { func (s *Session) CloseWithMsg(msg []byte) error {
if s.closed() { if s.closed() {
return errors.New("session is already closed") return ErrSessionClosed
} }
s.writeMessage(&envelope{t: websocket.CloseMessage, msg: msg}) s.writeMessage(&envelope{t: websocket.CloseMessage, msg: msg})