145 lines
3.6 KiB
Go
145 lines
3.6 KiB
Go
package overflow_gateway_websocket
|
|
|
|
import (
|
|
"time"
|
|
|
|
"git.loafle.net/overflow/overflow_gateway_websocket/clients"
|
|
uuid "github.com/satori/go.uuid"
|
|
"github.com/valyala/fasthttp"
|
|
)
|
|
|
|
type (
|
|
OnConnectionFunc func(c clients.Client)
|
|
OnDisconnectedFunc func(c clients.Client)
|
|
OnRequestFunc func(c clients.Client, method string, params interface{}) (interface{}, error)
|
|
OnNotifyFunc func(c clients.Client, method string, params interface{}) error
|
|
OnPushFunc func()
|
|
OnErrorFunc func(ctx *fasthttp.RequestCtx, status int, reason error)
|
|
OnCheckOriginFunc func(ctx *fasthttp.RequestCtx) bool
|
|
IDGeneratorFunc func(ctx *fasthttp.RequestCtx) string
|
|
)
|
|
|
|
const (
|
|
// DefaultHandshakeTimeout is default value of websocket handshake Timeout
|
|
DefaultHandshakeTimeout = 0
|
|
// DefaultWriteTimeout is default value of Write Timeout
|
|
DefaultWriteTimeout = 0
|
|
// DefaultReadTimeout is default value of Read Timeout
|
|
DefaultReadTimeout = 0
|
|
// DefaultPongTimeout is default value of Pong Timeout
|
|
DefaultPongTimeout = 60 * time.Second
|
|
// DefaultPingTimeout is default value of Ping Timeout
|
|
DefaultPingTimeout = 10 * time.Second
|
|
// DefaultPingPeriod is default value of Ping Period
|
|
DefaultPingPeriod = (DefaultPongTimeout * 9) / 10
|
|
// DefaultMaxMessageSize is default value of Max Message Size
|
|
DefaultMaxMessageSize = 1024
|
|
// DefaultReadBufferSize is default value of Read Buffer Size
|
|
DefaultReadBufferSize = 4096
|
|
// DefaultWriteBufferSize is default value of Write Buffer Size
|
|
DefaultWriteBufferSize = 4096
|
|
)
|
|
|
|
var (
|
|
// DefaultIDGenerator returns the UUID of the client
|
|
DefaultIDGenerator = func(ctx *fasthttp.RequestCtx) string { return uuid.NewV4().String() }
|
|
)
|
|
|
|
// Options is configuration of the websocket server
|
|
type Options struct {
|
|
OnConnection OnConnectionFunc
|
|
OnDisconnected OnDisconnectedFunc
|
|
OnRequest OnRequestFunc
|
|
OnNotify OnNotifyFunc
|
|
OnPush OnPushFunc
|
|
OnCheckOrigin OnCheckOriginFunc
|
|
OnError OnErrorFunc
|
|
IDGenerator IDGeneratorFunc
|
|
HandshakeTimeout time.Duration
|
|
WriteTimeout time.Duration
|
|
ReadTimeout time.Duration
|
|
PingTimeout time.Duration
|
|
PongTimeout time.Duration
|
|
PingPeriod time.Duration
|
|
MaxMessageSize int64
|
|
BinaryMessage bool
|
|
ReadBufferSize int
|
|
WriteBufferSize int
|
|
}
|
|
|
|
// Validate validates the configuration
|
|
func (o *Options) Validate() *Options {
|
|
|
|
if o.WriteTimeout < 0 {
|
|
o.WriteTimeout = DefaultWriteTimeout
|
|
}
|
|
|
|
if o.ReadTimeout < 0 {
|
|
o.ReadTimeout = DefaultReadTimeout
|
|
}
|
|
|
|
if o.PongTimeout < 0 {
|
|
o.PongTimeout = DefaultPongTimeout
|
|
}
|
|
|
|
if o.PingPeriod <= 0 {
|
|
o.PingPeriod = DefaultPingPeriod
|
|
}
|
|
|
|
if o.MaxMessageSize <= 0 {
|
|
o.MaxMessageSize = DefaultMaxMessageSize
|
|
}
|
|
|
|
if o.ReadBufferSize <= 0 {
|
|
o.ReadBufferSize = DefaultReadBufferSize
|
|
}
|
|
|
|
if o.WriteBufferSize <= 0 {
|
|
o.WriteBufferSize = DefaultWriteBufferSize
|
|
}
|
|
|
|
if o.OnConnection == nil {
|
|
o.OnConnection = func(c clients.Client) {
|
|
}
|
|
}
|
|
|
|
if o.OnDisconnected == nil {
|
|
o.OnDisconnected = func(c clients.Client) {
|
|
}
|
|
}
|
|
|
|
if o.OnRequest == nil {
|
|
o.OnRequest = func(c clients.Client, method string, params interface{}) (interface{}, error) {
|
|
return nil, nil
|
|
}
|
|
}
|
|
|
|
if o.OnNotify == nil {
|
|
o.OnNotify = func(c clients.Client, method string, params interface{}) error {
|
|
return nil
|
|
}
|
|
}
|
|
|
|
if o.OnPush == nil {
|
|
o.OnPush = func() {
|
|
}
|
|
}
|
|
|
|
if o.OnError == nil {
|
|
o.OnError = func(ctx *fasthttp.RequestCtx, status int, reason error) {
|
|
}
|
|
}
|
|
|
|
if o.OnCheckOrigin == nil {
|
|
o.OnCheckOrigin = func(ctx *fasthttp.RequestCtx) bool {
|
|
return true
|
|
}
|
|
}
|
|
|
|
if o.IDGenerator == nil {
|
|
o.IDGenerator = DefaultIDGenerator
|
|
}
|
|
|
|
return o
|
|
}
|