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 }