Allow the socket to be specified

This commit is contained in:
Asim Aslam 2019-07-10 19:07:18 +01:00
parent 7e0d4fe0cf
commit 1f218f7b48
2 changed files with 21 additions and 3 deletions

View File

@ -43,6 +43,7 @@ type link struct {
func newLink(options options.Options) *link {
// default values
var sock transport.Socket
id := "local"
addr := "127.0.0.1:10001"
tr := transport.DefaultTransport
@ -62,11 +63,19 @@ func newLink(options options.Options) *link {
tr = ltr.(transport.Transport)
}
lsock, ok := options.Values().Get("link.socket")
if ok {
sock = lsock.(transport.Socket)
}
l := &link{
// the remote end to dial
addr: addr,
// transport to dial link
transport: tr,
// the socket to use
// this is nil if not specified
socket: sock,
// unique id assigned to the link
id: id,
// the closed channel used to close the conn

View File

@ -14,7 +14,8 @@ import (
type Link interface {
// provides the transport.Socket interface
transport.Socket
// Connect connects the link. It must be called first.
// 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
@ -40,12 +41,20 @@ func Id(id string) options.Option {
return options.WithValue("link.id", id)
}
// The address to use for the link
// The address to use for the link. Connect must be
// called for this to be used.
func Address(a string) options.Option {
return options.WithValue("link.address", a)
}
// The transport to use for the link
// 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 where it was accepted
// from a remote end.
func Socket(s transport.Socket) options.Option {
return options.WithValue("link.socket", s)
}