server-go/socket/client-conn-handler.go
2018-08-22 17:37:12 +09:00

65 lines
1.4 KiB
Go

package socket
import (
"sync/atomic"
"time"
"git.loafle.net/overflow/server-go"
)
type ClientConnHandler interface {
server.ConnectionHandler
GetReconnectInterval() time.Duration
GetReconnectTryTime() int
}
type ClientConnHandlers struct {
server.ConnectionHandlers
ReconnectInterval time.Duration `json:"reconnectInterval,omitempty"`
ReconnectTryTime int `json:"reconnectTryTime,omitempty"`
validated atomic.Value
}
func (cch *ClientConnHandlers) GetReconnectInterval() time.Duration {
return cch.ReconnectInterval
}
func (cch *ClientConnHandlers) GetReconnectTryTime() int {
return cch.ReconnectTryTime
}
func (cch *ClientConnHandlers) Clone() *ClientConnHandlers {
return &ClientConnHandlers{
ConnectionHandlers: *cch.ConnectionHandlers.Clone(),
ReconnectInterval: cch.ReconnectInterval,
ReconnectTryTime: cch.ReconnectTryTime,
validated: cch.validated,
}
}
func (cch *ClientConnHandlers) Validate() error {
if nil != cch.validated.Load() {
return nil
}
cch.validated.Store(true)
if err := cch.ConnectionHandlers.Validate(); nil != err {
return err
}
if cch.ReconnectInterval <= 0 {
cch.ReconnectInterval = server.DefaultReconnectInterval
} else {
cch.ReconnectInterval = cch.ReconnectInterval * time.Second
}
if cch.ReconnectTryTime <= 0 {
cch.ReconnectTryTime = server.DefaultReconnectTryTime
}
return nil
}