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 } }