project initialized
This commit is contained in:
19
socket/client/client-ctx.go
Normal file
19
socket/client/client-ctx.go
Normal file
@@ -0,0 +1,19 @@
|
||||
package client
|
||||
|
||||
import (
|
||||
ouc "git.loafle.net/overflow/util-go/ctx"
|
||||
)
|
||||
|
||||
type ClientCtx interface {
|
||||
ouc.Ctx
|
||||
}
|
||||
|
||||
func NewClientCtx(parent ouc.Ctx) ClientCtx {
|
||||
return &clientCtx{
|
||||
Ctx: ouc.NewCtx(parent),
|
||||
}
|
||||
}
|
||||
|
||||
type clientCtx struct {
|
||||
ouc.Ctx
|
||||
}
|
||||
72
socket/client/client-handler.go
Normal file
72
socket/client/client-handler.go
Normal file
@@ -0,0 +1,72 @@
|
||||
package client
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"sync/atomic"
|
||||
)
|
||||
|
||||
type ClientHandler interface {
|
||||
GetName() string
|
||||
GetConnector() Connector
|
||||
|
||||
ClientCtx() ClientCtx
|
||||
|
||||
Init(clientCtx ClientCtx) error
|
||||
OnStart(clientCtx ClientCtx) error
|
||||
OnStop(clientCtx ClientCtx)
|
||||
Destroy(clientCtx ClientCtx)
|
||||
|
||||
Validate() error
|
||||
}
|
||||
|
||||
type ClientHandlers struct {
|
||||
Name string `json:"name,omitempty"`
|
||||
Connector Connector `json:"-"`
|
||||
|
||||
validated atomic.Value
|
||||
}
|
||||
|
||||
func (ch *ClientHandlers) ClientCtx() ClientCtx {
|
||||
return NewClientCtx(nil)
|
||||
}
|
||||
|
||||
func (ch *ClientHandlers) Init(clientCtx ClientCtx) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (ch *ClientHandlers) OnStart(clientCtx ClientCtx) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (ch *ClientHandlers) OnStop(clientCtx ClientCtx) {
|
||||
|
||||
}
|
||||
|
||||
func (ch *ClientHandlers) Destroy(clientCtx ClientCtx) {
|
||||
|
||||
}
|
||||
|
||||
func (ch *ClientHandlers) GetName() string {
|
||||
return ch.Name
|
||||
}
|
||||
|
||||
func (ch *ClientHandlers) GetConnector() Connector {
|
||||
return ch.Connector
|
||||
}
|
||||
|
||||
func (ch *ClientHandlers) Validate() error {
|
||||
if nil != ch.validated.Load() {
|
||||
return nil
|
||||
}
|
||||
ch.validated.Store(true)
|
||||
|
||||
if nil == ch.Connector {
|
||||
return fmt.Errorf("Connector is not valid")
|
||||
}
|
||||
|
||||
if err := ch.Connector.Validate(); nil != err {
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
75
socket/client/connector.go
Normal file
75
socket/client/connector.go
Normal file
@@ -0,0 +1,75 @@
|
||||
package client
|
||||
|
||||
import (
|
||||
"sync/atomic"
|
||||
|
||||
"git.loafle.net/overflow/server-go/socket"
|
||||
)
|
||||
|
||||
type OnDisconnectedFunc func(connector Connector)
|
||||
|
||||
type Connector interface {
|
||||
socket.ClientConnHandler
|
||||
socket.ReadWriteHandler
|
||||
|
||||
Connect() (readChan <-chan socket.SocketMessage, writeChan chan<- socket.SocketMessage, err error)
|
||||
Disconnect() error
|
||||
|
||||
GetName() string
|
||||
GetOnDisconnected() OnDisconnectedFunc
|
||||
SetOnDisconnected(fnc OnDisconnectedFunc)
|
||||
|
||||
Clone() Connector
|
||||
Validate() error
|
||||
}
|
||||
|
||||
type Connectors struct {
|
||||
socket.ClientConnHandlers
|
||||
socket.ReadWriteHandlers
|
||||
|
||||
Name string `json:"name,omitempty"`
|
||||
OnDisconnected OnDisconnectedFunc `json:"-"`
|
||||
|
||||
validated atomic.Value
|
||||
}
|
||||
|
||||
func (c *Connectors) GetName() string {
|
||||
return c.Name
|
||||
}
|
||||
|
||||
func (c *Connectors) GetOnDisconnected() OnDisconnectedFunc {
|
||||
return c.OnDisconnected
|
||||
}
|
||||
|
||||
func (c *Connectors) SetOnDisconnected(fnc OnDisconnectedFunc) {
|
||||
c.OnDisconnected = fnc
|
||||
}
|
||||
|
||||
func (c *Connectors) Clone() *Connectors {
|
||||
return &Connectors{
|
||||
Name: c.Name,
|
||||
ClientConnHandlers: *c.ClientConnHandlers.Clone(),
|
||||
ReadWriteHandlers: *c.ReadWriteHandlers.Clone(),
|
||||
validated: c.validated,
|
||||
}
|
||||
}
|
||||
|
||||
func (c *Connectors) Validate() error {
|
||||
if nil != c.validated.Load() {
|
||||
return nil
|
||||
}
|
||||
c.validated.Store(true)
|
||||
|
||||
if err := c.ClientConnHandlers.Validate(); nil != err {
|
||||
return err
|
||||
}
|
||||
if err := c.ReadWriteHandlers.Validate(); nil != err {
|
||||
return err
|
||||
}
|
||||
|
||||
if "" == c.Name {
|
||||
c.Name = "Connector"
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
Reference in New Issue
Block a user