crusader bed2ea7985 ing
2017-08-24 20:29:22 +09:00

101 lines
2.4 KiB
Go

package clients
import (
"time"
"github.com/valyala/fasthttp"
)
type (
OnDisconnectedFunc func(c Client)
OnRequestFunc func(c Client, method string, params interface{}) (interface{}, error)
OnNotifyFunc func(c Client, method string, params interface{}) error
OnErrorFunc func(ctx *fasthttp.RequestCtx, status int, reason error)
)
const (
// 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
)
// Options is configuration of the websocket server
type Options struct {
OnRequest OnRequestFunc
OnNotify OnNotifyFunc
OnDisconnected OnDisconnectedFunc
MaxMessageSize int64
ReadBufferSize int
WriteBufferSize int
WriteTimeout time.Duration
ReadTimeout time.Duration
PongTimeout time.Duration
PingTimeout time.Duration
PingPeriod time.Duration
BinaryMessage bool
}
// 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.OnRequest == nil {
o.OnRequest = func(c Client, method string, params interface{}) (interface{}, error) {
return nil, nil
}
}
if o.OnNotify == nil {
o.OnNotify = func(c Client, method string, params interface{}) error {
return nil
}
}
if o.OnDisconnected == nil {
o.OnDisconnected = func(c Client) {
}
}
return o
}