This commit is contained in:
crusader 2017-08-25 11:33:00 +09:00
parent b2dc806b5b
commit 24f7b3d3d6
7 changed files with 38 additions and 53 deletions

View File

@ -1,4 +1,4 @@
package clients
package overflow_gateway_websocket
import (
"encoding/json"
@ -8,7 +8,7 @@ import (
"sync"
"time"
"git.loafle.net/overflow/overflow_gateway_websocket/clients/protocol"
"git.loafle.net/overflow/overflow_gateway_websocket/protocol"
"git.loafle.net/overflow/overflow_gateway_websocket/websocket"
"github.com/valyala/fasthttp"
@ -22,14 +22,14 @@ type Client interface {
type client struct {
id string
o *Options
o *ClientOptions
fastHTTPCtx *fasthttp.RequestCtx
conn *websocket.Conn
messageType int
writeMTX sync.Mutex
}
func New(id string, o *Options, ctx *fasthttp.RequestCtx, conn *websocket.Conn) Client {
func NewClient(id string, o *ClientOptions, ctx *fasthttp.RequestCtx, conn *websocket.Conn) Client {
c := &client{
id: id,
o: o,

View File

@ -1,4 +1,4 @@
package clients
package overflow_gateway_websocket
import (
"time"
@ -7,10 +7,9 @@ import (
)
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)
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 (
@ -26,31 +25,25 @@ const (
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 {
// ClientOptions is configuration of the websocket server
type ClientOptions 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
MaxMessageSize int64
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 {
func (o *ClientOptions) Validate() *ClientOptions {
if o.WriteTimeout < 0 {
o.WriteTimeout = DefaultWriteTimeout
}
@ -71,14 +64,6 @@ func (o *Options) Validate() *Options {
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

View File

@ -3,7 +3,6 @@ package overflow_gateway_websocket
import (
"log"
"git.loafle.net/overflow/overflow_gateway_websocket/clients"
"git.loafle.net/overflow/overflow_gateway_websocket/websocket"
"github.com/valyala/fasthttp"
)
@ -12,21 +11,21 @@ type ()
type Server interface {
ListenAndServe(addr string) error
HandleClient(pattern string, o *clients.Options)
HandleClient(pattern string, o *ClientOptions)
}
type server struct {
_option *Options
_option *ServerOptions
_upgrader *websocket.Upgrader
_handlers map[string]*clients.Options
_clients map[string]clients.Client
_handlers map[string]*ClientOptions
_clients map[string]Client
}
func NewServer(o *Options) Server {
func NewServer(o *ServerOptions) Server {
s := &server{
_option: o.Validate(),
_handlers: make(map[string]*clients.Options, 1),
_clients: make(map[string]clients.Client, 100),
_handlers: make(map[string]*ClientOptions, 1),
_clients: make(map[string]Client, 100),
}
s._upgrader = &websocket.Upgrader{
@ -45,7 +44,7 @@ func (s *server) onPush(cb OnPushFunc) {
}
func (s *server) onDisconnected(c clients.Client) {
func (s *server) onDisconnected(c Client) {
delete(s._clients, c.ID())
s._option.OnDisconnected(c)
@ -66,13 +65,14 @@ func (s *server) onConnection(ctx *fasthttp.RequestCtx) {
}
cid := s._option.IDGenerator(ctx)
c := clients.New(cid, co, ctx, conn)
c := NewClient(cid, co, ctx, conn)
s._clients[cid] = c
s._option.OnConnection(path, c)
})
}
func (s *server) HandleClient(pattern string, o *clients.Options) {
func (s *server) HandleClient(pattern string, o *ClientOptions) {
s._handlers[pattern] = o.Validate()
}

View File

@ -3,14 +3,13 @@ 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(path string, c clients.Client)
OnDisconnectedFunc func(c clients.Client)
OnConnectionFunc func(path string, c Client)
OnDisconnectedFunc func(c Client)
OnPushFunc func()
)
@ -20,7 +19,8 @@ const (
// DefaultReadBufferSize is default value of Read Buffer Size
DefaultReadBufferSize = 4096
// DefaultWriteBufferSize is default value of Write Buffer Size
DefaultWriteBufferSize = 4096
DefaultWriteBufferSize = 4096
// DefaultEnableCompression is default value of support compression
DefaultEnableCompression = false
)
@ -29,8 +29,8 @@ var (
DefaultIDGenerator = func(ctx *fasthttp.RequestCtx) string { return uuid.NewV4().String() }
)
// Options is configuration of the websocket server
type Options struct {
// ServerOptions is configuration of the websocket server
type ServerOptions struct {
OnConnection OnConnectionFunc
OnDisconnected OnDisconnectedFunc
OnCheckOrigin func(ctx *fasthttp.RequestCtx) bool
@ -44,7 +44,7 @@ type Options struct {
}
// Validate validates the configuration
func (o *Options) Validate() *Options {
func (o *ServerOptions) Validate() *ServerOptions {
if o.ReadBufferSize <= 0 {
o.ReadBufferSize = DefaultReadBufferSize
}
@ -54,12 +54,12 @@ func (o *Options) Validate() *Options {
}
if o.OnConnection == nil {
o.OnConnection = func(path string, c clients.Client) {
o.OnConnection = func(path string, c Client) {
}
}
if o.OnDisconnected == nil {
o.OnDisconnected = func(c clients.Client) {
o.OnDisconnected = func(c Client) {
}
}