server/client/socket_builders.go
crusader 1c8bef954e ing
2017-11-30 18:57:09 +09:00

80 lines
1.6 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 {
Network string
Address string
TLSConfig *tls.Config
KeepAlive time.Duration
Timeout time.Duration
LocalAddress net.Addr
}
func (sb *SocketBuilders) SocketContext(parent cuc.Context) SocketContext {
return newSocketContext(parent)
}
func (sb *SocketBuilders) SocketHandler() SocketHandler {
return NewSocketHandler()
}
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(dialer *net.Dialer, network, address string) (net.Conn, error) {
if nil == sb.TLSConfig {
return dialer.Dial(network, address)
}
return tls.DialWithDialer(dialer, network, address, sb.TLSConfig)
}
func (sb *SocketBuilders) GetKeepAlive() time.Duration {
return sb.KeepAlive
}
func (sb *SocketBuilders) GetTimeout() time.Duration {
return sb.Timeout
}
func (sb *SocketBuilders) GetLocalAddress() net.Addr {
return sb.LocalAddress
}
func (sb *SocketBuilders) Validate() {
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.Timeout {
sb.Timeout = cs.DefaultConnectTimeout
}
}