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 }