mirror of https://github.com/grpc/grpc-go.git
53 lines
1.2 KiB
Go
53 lines
1.2 KiB
Go
package grpc
|
|
|
|
import (
|
|
"time"
|
|
)
|
|
|
|
// Picker picks a Conn for RPC requests.
|
|
// This is EXPERIMENTAL and Please do not implement your own Picker for now.
|
|
type Picker interface {
|
|
// Pick returns the Conn to use for the upcoming RPC. It may return different
|
|
// Conn's up to the implementation.
|
|
Pick() (*Conn, error)
|
|
State() ConnectivityState
|
|
WaitForStateChange(timeout time.Duration, sourceState ConnectivityState) bool
|
|
// Close closes all the Conn's owned by this Picker.
|
|
Close() error
|
|
}
|
|
|
|
func newUnicastPicker(target string, dopts dialOptions) (Picker, error) {
|
|
c, err := NewConn(target, dopts)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return &unicastPicker{
|
|
conn: c,
|
|
}, nil
|
|
}
|
|
|
|
// unicastPicker is the default Picker which is used when there is no custom Picker
|
|
// specified by users. It always picks the same Conn.
|
|
type unicastPicker struct {
|
|
conn *Conn
|
|
}
|
|
|
|
func (p *unicastPicker) Pick() (*Conn, error) {
|
|
return p.conn, nil
|
|
}
|
|
|
|
func (p *unicastPicker) State() ConnectivityState {
|
|
return p.conn.State()
|
|
}
|
|
|
|
func (p *unicastPicker) WaitForStateChange(timeout time.Duration, sourceState ConnectivityState) bool {
|
|
return p.conn.WaitForStateChange(timeout, sourceState)
|
|
}
|
|
|
|
func (p *unicastPicker) Close() error {
|
|
if p.conn != nil {
|
|
return p.conn.Close()
|
|
}
|
|
return nil
|
|
}
|