crusader 37ce0a3668 ing
2017-08-24 19:42:40 +09:00

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
}