melody: github.com/olahol/melody Index | Files | Directories

package melody

import "github.com/olahol/melody"

Package melody implements a framework for dealing with WebSockets.

Example

A broadcasting echo server:

func main() {
	r := gin.Default()
	m := melody.New()
	r.GET("/ws", func(c *gin.Context) {
		m.HandleRequest(c.Writer, c.Request)
	})
	m.HandleMessage(func(s *melody.Session, msg []byte) {
		m.Broadcast(msg)
	})
	r.Run(":5000")
}

Index

Package Files

config.go doc.go envelope.go hub.go melody.go session.go

Constants

const (
    CloseNormalClosure           = 1000
    CloseGoingAway               = 1001
    CloseProtocolError           = 1002
    CloseUnsupportedData         = 1003
    CloseNoStatusReceived        = 1005
    CloseAbnormalClosure         = 1006
    CloseInvalidFramePayloadData = 1007
    ClosePolicyViolation         = 1008
    CloseMessageTooBig           = 1009
    CloseMandatoryExtension      = 1010
    CloseInternalServerErr       = 1011
    CloseServiceRestart          = 1012
    CloseTryAgainLater           = 1013
    CloseTLSHandshake            = 1015
)

Close codes defined in RFC 6455, section 11.7. Duplicate of codes from gorilla/websocket for convenience.

func FormatCloseMessage Uses

func FormatCloseMessage(closeCode int, text string) []byte

FormatCloseMessage formats closeCode and text as a WebSocket close message.

type Config Uses

type Config struct {
    WriteWait         time.Duration // Milliseconds until write times out.
    PongWait          time.Duration // Timeout for waiting on pong.
    PingPeriod        time.Duration // Milliseconds between pings.
    MaxMessageSize    int64         // Maximum size in bytes of a message.
    MessageBufferSize int           // The max amount of messages that can be in a sessions buffer before it starts dropping them.
}

Config melody configuration struct.

type Melody Uses

type Melody struct {
    Config   *Config
    Upgrader *websocket.Upgrader
    // contains filtered or unexported fields
}

Melody implements a websocket manager.

func New Uses

func New() *Melody

New creates a new melody instance with default Upgrader and Config.

func (*Melody) Broadcast Uses

func (m *Melody) Broadcast(msg []byte) error

Broadcast broadcasts a text message to all sessions.

func (*Melody) BroadcastBinary Uses

func (m *Melody) BroadcastBinary(msg []byte) error

BroadcastBinary broadcasts a binary message to all sessions.

func (*Melody) BroadcastBinaryFilter Uses

func (m *Melody) BroadcastBinaryFilter(msg []byte, fn func(*Session) bool) error

BroadcastBinaryFilter broadcasts a binary message to all sessions that fn returns true for.

func (*Melody) BroadcastBinaryOthers Uses

func (m *Melody) BroadcastBinaryOthers(msg []byte, s *Session) error

BroadcastBinaryOthers broadcasts a binary message to all sessions except session s.

func (*Melody) BroadcastFilter Uses

func (m *Melody) BroadcastFilter(msg []byte, fn func(*Session) bool) error

BroadcastFilter broadcasts a text message to all sessions that fn returns true for.

func (*Melody) BroadcastMultiple Uses

func (m *Melody) BroadcastMultiple(msg []byte, sessions []*Session) error

BroadcastMultiple broadcasts a text message to multiple sessions given in the sessions slice.

func (*Melody) BroadcastOthers Uses

func (m *Melody) BroadcastOthers(msg []byte, s *Session) error

BroadcastOthers broadcasts a text message to all sessions except session s.

func (*Melody) Close Uses

func (m *Melody) Close() error

Close closes the melody instance and all connected sessions.

func (*Melody) CloseWithMsg Uses

func (m *Melody) CloseWithMsg(msg []byte) error

CloseWithMsg closes the melody instance with the given close payload and all connected sessions. Use the FormatCloseMessage function to format a proper close message payload.

func (*Melody) HandleClose Uses

func (m *Melody) HandleClose(fn func(*Session, int, string) error)

HandleClose sets the handler for close messages received from the session. The code argument to h is the received close code or CloseNoStatusReceived if the close message is empty. The default close handler sends a close frame back to the session.

The application must read the connection to process close messages as described in the section on Control Frames above.

The connection read methods return a CloseError when a close frame is received. Most applications should handle close messages as part of their normal error handling. Applications should only set a close handler when the application must perform some action before sending a close frame back to the session.

func (*Melody) HandleConnect Uses

func (m *Melody) HandleConnect(fn func(*Session))

HandleConnect fires fn when a session connects.

func (*Melody) HandleDisconnect Uses

func (m *Melody) HandleDisconnect(fn func(*Session))

HandleDisconnect fires fn when a session disconnects.

func (*Melody) HandleError Uses

func (m *Melody) HandleError(fn func(*Session, error))

HandleError fires fn when a session has an error.

func (*Melody) HandleMessage Uses

func (m *Melody) HandleMessage(fn func(*Session, []byte))

HandleMessage fires fn when a text message comes in.

func (*Melody) HandleMessageBinary Uses

func (m *Melody) HandleMessageBinary(fn func(*Session, []byte))

HandleMessageBinary fires fn when a binary message comes in.

func (*Melody) HandlePong Uses

func (m *Melody) HandlePong(fn func(*Session))

HandlePong fires fn when a pong is received from a session.

func (*Melody) HandleRequest Uses

func (m *Melody) HandleRequest(w http.ResponseWriter, r *http.Request) error

HandleRequest upgrades http requests to websocket connections and dispatches them to be handled by the melody instance.

func (*Melody) HandleRequestWithKeys Uses

func (m *Melody) HandleRequestWithKeys(w http.ResponseWriter, r *http.Request, keys map[string]interface{}) error

HandleRequestWithKeys does the same as HandleRequest but populates session.Keys with keys.

func (*Melody) HandleSentMessage Uses

func (m *Melody) HandleSentMessage(fn func(*Session, []byte))

HandleSentMessage fires fn when a text message is successfully sent.

func (*Melody) HandleSentMessageBinary Uses

func (m *Melody) HandleSentMessageBinary(fn func(*Session, []byte))

HandleSentMessageBinary fires fn when a binary message is successfully sent.

func (*Melody) IsClosed Uses

func (m *Melody) IsClosed() bool

IsClosed returns the status of the melody instance.

func (*Melody) Len Uses

func (m *Melody) Len() int

Len return the number of connected sessions.

type Session Uses

type Session struct {
    Request *http.Request
    Keys    map[string]interface{}
    // contains filtered or unexported fields
}

Session wrapper around websocket connections.

func (*Session) Close Uses

func (s *Session) Close() error

Close closes session.

func (*Session) CloseWithMsg Uses

func (s *Session) CloseWithMsg(msg []byte) error

CloseWithMsg closes the session with the provided payload. Use the FormatCloseMessage function to format a proper close message payload.

func (*Session) Get Uses

func (s *Session) Get(key string) (value interface{}, exists bool)

Get returns the value for the given key, ie: (value, true). If the value does not exists it returns (nil, false)

func (*Session) IsClosed Uses

func (s *Session) IsClosed() bool

IsClosed returns the status of the connection.

func (*Session) MustGet Uses

func (s *Session) MustGet(key string) interface{}

MustGet returns the value for the given key if it exists, otherwise it panics.

func (*Session) Set Uses

func (s *Session) Set(key string, value interface{})

Set is used to store a new key/value pair exclusivelly for this session. It also lazy initializes s.Keys if it was not used previously.

func (*Session) Write Uses

func (s *Session) Write(msg []byte) error

Write writes message to session.

func (*Session) WriteBinary Uses

func (s *Session) WriteBinary(msg []byte) error

WriteBinary writes a binary message to session.

Directories

PathSynopsis
examples/chat
examples/chat-echo
examples/filewatch
examples/gophers
examples/multichat

Package melody imports 5 packages (graph) and is imported by 40 packages. Updated 2020-11-18. Refresh now. Tools for package owners.