87 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			87 lines
		
	
	
		
			1.7 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
 | |
| 
 | |
| 	HandshakeTimeout time.Duration
 | |
| 	KeepAlive        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(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 "" == 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
 | |
| 	}
 | |
| 
 | |
| }
 |