package websocket_fasthttp import ( "time" "github.com/valyala/fasthttp" ) type SocketHandlers struct { // MaxMessageSize is the maximum size for a message read from the peer. If a // message exceeds the limit, the connection sends a close frame to the peer // and returns ErrReadLimit to the application. MaxMessageSize int64 // WriteTimeout is the write deadline on the underlying network // connection. After a write has timed out, the websocket state is corrupt and // all future writes will return an error. A zero value for t means writes will // not time out. WriteTimeout time.Duration // ReadTimeout is the read deadline on the underlying network connection. // After a read has timed out, the websocket connection state is corrupt and // all future reads will return an error. A zero value for t means reads will // not time out. ReadTimeout time.Duration PongTimeout time.Duration PingTimeout time.Duration PingPeriod time.Duration sockets map[string]Socket } func (sh *SocketHandlers) Init(serverCTX ServerContext) error { sh.sockets = make(map[string]Socket) return nil } func (sh *SocketHandlers) Handshake(serverCTX ServerContext, ctx *fasthttp.RequestCtx) (id string, extensionsHeader *fasthttp.ResponseHeader) { return "", nil } func (sh *SocketHandlers) SocketContext(serverCTX ServerContext) SocketContext { return newSocketContext(serverCTX) } func (sh *SocketHandlers) OnConnect(soc Socket) { // no op } func (sh *SocketHandlers) Handle(soc Socket, stopChan <-chan struct{}, doneChan chan<- error) { // no op } func (sh *SocketHandlers) OnDisconnect(soc Socket) { } func (sh *SocketHandlers) Destroy() { // no op } func (sh *SocketHandlers) GetSocket(id string) Socket { return sh.sockets[id] } func (sh *SocketHandlers) GetSockets() map[string]Socket { return sh.sockets } func (sh *SocketHandlers) GetMaxMessageSize() int64 { return sh.MaxMessageSize } func (sh *SocketHandlers) GetWriteTimeout() time.Duration { return sh.WriteTimeout } func (sh *SocketHandlers) GetReadTimeout() time.Duration { return sh.ReadTimeout } func (sh *SocketHandlers) GetPongTimeout() time.Duration { return sh.PongTimeout } func (sh *SocketHandlers) GetPingTimeout() time.Duration { return sh.PingTimeout } func (sh *SocketHandlers) GetPingPeriod() time.Duration { return sh.PingPeriod } func (sh *SocketHandlers) Validate() { if sh.MaxMessageSize <= 0 { sh.MaxMessageSize = DefaultMaxMessageSize } if sh.WriteTimeout <= 0 { sh.WriteTimeout = DefaultWriteTimeout } if sh.ReadTimeout <= 0 { sh.ReadTimeout = DefaultReadTimeout } if sh.PongTimeout <= 0 { sh.PongTimeout = DefaultPongTimeout } if sh.PingTimeout <= 0 { sh.PingTimeout = DefaultPingTimeout } if sh.PingPeriod <= 0 { sh.PingPeriod = DefaultPingPeriod } } func (sh *SocketHandlers) addSocket(soc Socket) { sh.sockets[soc.ID()] = soc } func (sh *SocketHandlers) removeSocket(soc Socket) { delete(sh.sockets, soc.ID()) }