mirror of
https://github.com/nadoo/glider.git
synced 2025-02-24 09:45:40 +08:00
32 lines
743 B
Go
32 lines
743 B
Go
package strategy
|
|
|
|
import (
|
|
"net"
|
|
|
|
"github.com/nadoo/glider/proxy"
|
|
)
|
|
|
|
// high availability forwarder
|
|
type haDialer struct{ *rrDialer }
|
|
|
|
// newHADialer .
|
|
func newHADialer(dialers []*proxy.Forwarder, webhost string, duration int) proxy.Dialer {
|
|
return &haDialer{rrDialer: newRRDialer(dialers, webhost, duration)}
|
|
}
|
|
|
|
func (ha *haDialer) nextDialer(dstAddr string) *proxy.Forwarder {
|
|
d := ha.fwdrs[ha.index]
|
|
if !d.Enabled() {
|
|
d = ha.nextDialer(dstAddr)
|
|
}
|
|
return d
|
|
}
|
|
|
|
func (ha *haDialer) Dial(network, addr string) (net.Conn, error) {
|
|
return ha.nextDialer(addr).Dial(network, addr)
|
|
}
|
|
|
|
func (ha *haDialer) DialUDP(network, addr string) (pc net.PacketConn, writeTo net.Addr, err error) {
|
|
return ha.nextDialer(addr).DialUDP(network, addr)
|
|
}
|