59 lines
1.0 KiB
Go
59 lines
1.0 KiB
Go
package client
|
|
|
|
import (
|
|
"sync/atomic"
|
|
)
|
|
|
|
type OnDisconnectedFunc func(connector Connector)
|
|
|
|
type Connector interface {
|
|
Connect() (readChan <-chan []byte, writeChan chan<- []byte, err error)
|
|
Disconnect() error
|
|
|
|
GetName() string
|
|
GetOnDisconnected() OnDisconnectedFunc
|
|
SetOnDisconnected(fnc OnDisconnectedFunc)
|
|
|
|
Clone() Connector
|
|
Validate() error
|
|
}
|
|
|
|
type Connectors struct {
|
|
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,
|
|
validated: c.validated,
|
|
}
|
|
}
|
|
|
|
func (c *Connectors) Validate() error {
|
|
if nil != c.validated.Load() {
|
|
return nil
|
|
}
|
|
c.validated.Store(true)
|
|
|
|
if "" == c.Name {
|
|
c.Name = "Connector"
|
|
}
|
|
|
|
return nil
|
|
}
|