61 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			61 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| // Package link provides a measured link on top of a transport.Socket
 | |
| package link
 | |
| 
 | |
| import (
 | |
| 	"errors"
 | |
| 
 | |
| 	"github.com/micro/go-micro/config/options"
 | |
| 	"github.com/micro/go-micro/transport"
 | |
| )
 | |
| 
 | |
| // Link is a layer on top of a transport socket with the
 | |
| // buffering send and recv queue's with the ability to
 | |
| // measure the actual transport link and reconnect if
 | |
| // an address is specified.
 | |
| type Link interface {
 | |
| 	// provides the transport.Socket interface
 | |
| 	transport.Socket
 | |
| 	// Connect connects the link. It must be called first
 | |
| 	// if there's an expectation to create a new socket.
 | |
| 	Connect() error
 | |
| 	// Id of the link is "local" if not specified
 | |
| 	Id() string
 | |
| 	// Status of the link
 | |
| 	Status() string
 | |
| 	// Depth of the buffers
 | |
| 	Weight() int
 | |
| 	// Rate of the link
 | |
| 	Length() int
 | |
| }
 | |
| 
 | |
| var (
 | |
| 	ErrLinkClosed = errors.New("link closed")
 | |
| )
 | |
| 
 | |
| // NewLink creates a new link on top of a socket
 | |
| func NewLink(opts ...options.Option) Link {
 | |
| 	return newLink(options.NewOptions(opts...))
 | |
| }
 | |
| 
 | |
| // Sets the link id which otherwise defaults to "local"
 | |
| func Id(id string) options.Option {
 | |
| 	return options.WithValue("link.id", id)
 | |
| }
 | |
| 
 | |
| // The address to use for the link. Connect must be
 | |
| // called for this to be used, its otherwise unused.
 | |
| func Address(a string) options.Option {
 | |
| 	return options.WithValue("link.address", a)
 | |
| }
 | |
| 
 | |
| // The transport to use for the link where we
 | |
| // want to dial the connection first.
 | |
| func Transport(t transport.Transport) options.Option {
 | |
| 	return options.WithValue("link.transport", t)
 | |
| }
 | |
| 
 | |
| // Socket sets the socket to use instead of dialing.
 | |
| func Socket(s transport.Socket) options.Option {
 | |
| 	return options.WithValue("link.socket", s)
 | |
| }
 |