gitee.com/liuxuezhan/go-micro-v1.18.0@v1.0.0/tunnel/options.go (about)

     1  package tunnel
     2  
     3  import (
     4  	"time"
     5  
     6  	"github.com/google/uuid"
     7  	"gitee.com/liuxuezhan/go-micro-v1.18.0/transport"
     8  	"gitee.com/liuxuezhan/go-micro-v1.18.0/transport/quic"
     9  )
    10  
    11  var (
    12  	// DefaultAddress is default tunnel bind address
    13  	DefaultAddress = ":0"
    14  	// The shared default token
    15  	DefaultToken = "go.micro.tunnel"
    16  )
    17  
    18  type Option func(*Options)
    19  
    20  // Options provides network configuration options
    21  type Options struct {
    22  	// Id is tunnel id
    23  	Id string
    24  	// Address is tunnel address
    25  	Address string
    26  	// Nodes are remote nodes
    27  	Nodes []string
    28  	// The shared auth token
    29  	Token string
    30  	// Transport listens to incoming connections
    31  	Transport transport.Transport
    32  }
    33  
    34  type DialOption func(*DialOptions)
    35  
    36  type DialOptions struct {
    37  	// Link specifies the link to use
    38  	Link string
    39  	// specify mode of the session
    40  	Mode Mode
    41  	// the dial timeout
    42  	Timeout time.Duration
    43  }
    44  
    45  type ListenOption func(*ListenOptions)
    46  
    47  type ListenOptions struct {
    48  	// specify mode of the session
    49  	Mode Mode
    50  	// The read timeout
    51  	Timeout time.Duration
    52  }
    53  
    54  // The tunnel id
    55  func Id(id string) Option {
    56  	return func(o *Options) {
    57  		o.Id = id
    58  	}
    59  }
    60  
    61  // The tunnel address
    62  func Address(a string) Option {
    63  	return func(o *Options) {
    64  		o.Address = a
    65  	}
    66  }
    67  
    68  // Nodes specify remote network nodes
    69  func Nodes(n ...string) Option {
    70  	return func(o *Options) {
    71  		o.Nodes = n
    72  	}
    73  }
    74  
    75  // Token sets the shared token for auth
    76  func Token(t string) Option {
    77  	return func(o *Options) {
    78  		o.Token = t
    79  	}
    80  }
    81  
    82  // Transport listens for incoming connections
    83  func Transport(t transport.Transport) Option {
    84  	return func(o *Options) {
    85  		o.Transport = t
    86  	}
    87  }
    88  
    89  // Listen options
    90  func ListenMode(m Mode) ListenOption {
    91  	return func(o *ListenOptions) {
    92  		o.Mode = m
    93  	}
    94  }
    95  
    96  // Timeout for reads and writes on the listener session
    97  func ListenTimeout(t time.Duration) ListenOption {
    98  	return func(o *ListenOptions) {
    99  		o.Timeout = t
   100  	}
   101  }
   102  
   103  // Dial options
   104  
   105  // Dial multicast sets the multicast option to send only to those mapped
   106  func DialMode(m Mode) DialOption {
   107  	return func(o *DialOptions) {
   108  		o.Mode = m
   109  	}
   110  }
   111  
   112  // DialTimeout sets the dial timeout of the connection
   113  func DialTimeout(t time.Duration) DialOption {
   114  	return func(o *DialOptions) {
   115  		o.Timeout = t
   116  	}
   117  }
   118  
   119  // DialLink specifies the link to pin this connection to.
   120  // This is not applicable if the multicast option is set.
   121  func DialLink(id string) DialOption {
   122  	return func(o *DialOptions) {
   123  		o.Link = id
   124  	}
   125  }
   126  
   127  // DefaultOptions returns router default options
   128  func DefaultOptions() Options {
   129  	return Options{
   130  		Id:        uuid.New().String(),
   131  		Address:   DefaultAddress,
   132  		Token:     DefaultToken,
   133  		Transport: quic.NewTransport(),
   134  	}
   135  }