server/client/socket_builders.go
crusader 41382db599 ing
2017-12-05 16:21:32 +09:00

92 lines
1.8 KiB
Go

package client
import (
"crypto/tls"
"net"
"time"
"git.loafle.net/commons_go/logging"
cs "git.loafle.net/commons_go/server"
cuc "git.loafle.net/commons_go/util/context"
)
type SocketBuilders struct {
SocketHandler SocketHandler
Network string
Address string
TLSConfig *tls.Config
HandshakeTimeout time.Duration
KeepAlive time.Duration
LocalAddress net.Addr
}
func (sb *SocketBuilders) SocketContext(parent cuc.Context) SocketContext {
return newSocketContext(parent)
}
func (sb *SocketBuilders) GetSocketHandler() SocketHandler {
return sb.SocketHandler
}
func (sb *SocketBuilders) GetNetwork() string {
return sb.Network
}
func (sb *SocketBuilders) GetAddress() string {
return sb.Address
}
func (sb *SocketBuilders) GetTLSConfig() *tls.Config {
return sb.TLSConfig
}
func (sb *SocketBuilders) Dial(network, address string) (net.Conn, error) {
var deadline time.Time
if 0 != sb.HandshakeTimeout {
deadline = time.Now().Add(sb.HandshakeTimeout)
}
d := &net.Dialer{
KeepAlive: sb.KeepAlive,
Deadline: deadline,
LocalAddr: sb.LocalAddress,
}
return d.Dial(network, address)
}
func (sb *SocketBuilders) GetKeepAlive() time.Duration {
return sb.KeepAlive
}
func (sb *SocketBuilders) GetHandshakeTimeout() time.Duration {
return sb.HandshakeTimeout
}
func (sb *SocketBuilders) GetLocalAddress() net.Addr {
return sb.LocalAddress
}
func (sb *SocketBuilders) Validate() {
if nil == sb.SocketHandler {
logging.Logger().Panic("Client Socket: SocketHandler must be specified")
}
if "" == sb.Network {
logging.Logger().Panic("Client Socket: Network must be specified")
}
if "" == sb.Address {
logging.Logger().Panic("Client Socket: Address must be specified")
}
if 0 >= sb.KeepAlive {
sb.KeepAlive = cs.DefaultKeepAlive
}
if 0 >= sb.HandshakeTimeout {
sb.HandshakeTimeout = cs.DefaultHandshakeTimeout
}
}