58 lines
854 B
Go
58 lines
854 B
Go
package network
|
|
|
|
import (
|
|
"sync"
|
|
|
|
pb "github.com/micro/go-micro/network/proto"
|
|
)
|
|
|
|
type link struct {
|
|
// the embedded node
|
|
*node
|
|
|
|
// the link id
|
|
id string
|
|
|
|
// queue buffer for this link
|
|
queue chan *Message
|
|
|
|
// the socket for this link
|
|
socket *socket
|
|
|
|
// the lease for this link
|
|
lease *pb.Lease
|
|
|
|
// length and weight of the link
|
|
mtx sync.RWMutex
|
|
|
|
// determines the cost of the link
|
|
// based on queue length and roundtrip
|
|
length int
|
|
weight int
|
|
}
|
|
|
|
// link methods
|
|
|
|
// bring up the link
|
|
func (l *link) up() error {
|
|
// TODO: manage the length/weight of the link
|
|
return l.socket.accept()
|
|
}
|
|
|
|
// kill the link
|
|
func (l *link) down() error {
|
|
return l.socket.close()
|
|
}
|
|
|
|
func (l *link) Length() int {
|
|
l.mtx.RLock()
|
|
defer l.mtx.RUnlock()
|
|
return l.length
|
|
}
|
|
|
|
func (l *link) Weight() int {
|
|
l.mtx.RLock()
|
|
defer l.mtx.RUnlock()
|
|
return l.weight
|
|
}
|