Added Nodes method to Network interface

This commit is contained in:
Milos Gajdos 2019-09-02 12:39:26 +01:00
parent bf53c16e4b
commit 4f5a849211
No known key found for this signature in database
GPG Key ID: 8B31058CC55DFD4F
2 changed files with 56 additions and 14 deletions

View File

@ -33,12 +33,31 @@ type node struct {
id string
// address is node address
address string
// neighbours are node neightbours
// neighbours maps the node neighbourhood
neighbours map[string]*node
// network returns network node is in
network Network
}
// Id is node ide
func (n *node) Id() string {
return n.id
}
// Address returns node address
func (n *node) Address() string {
return n.address
}
// Network returns node network
func (n *node) Network() Network {
return n.network
}
// network implements Network interface
type network struct {
// node is network node
*node
// options configure the network
options Options
// rtr is network router
@ -60,8 +79,6 @@ type network struct {
connected bool
// closed closes the network
closed chan bool
// neighbours maps the node neighbourhood
neighbours map[string]*node
}
// newNetwork returns a new network node
@ -106,16 +123,24 @@ func newNetwork(opts ...Option) Network {
),
)
return &network{
options: options,
Router: options.Router,
Proxy: options.Proxy,
Tunnel: options.Tunnel,
server: server,
client: client,
tunClient: make(map[string]transport.Client),
neighbours: make(map[string]*node),
network := &network{
node: &node{
id: options.Id,
address: options.Address,
neighbours: make(map[string]*node),
},
options: options,
Router: options.Router,
Proxy: options.Proxy,
Tunnel: options.Tunnel,
server: server,
client: client,
tunClient: make(map[string]transport.Client),
}
network.node.network = network
return network
}
// Options returns network options
@ -695,6 +720,11 @@ func (n *network) Connect() error {
return nil
}
// Nodes returns a list of all network nodes
func (n *network) Nodes() []Node {
return nil
}
func (n *network) close() error {
// stop the server
if err := n.server.Stop(); err != nil {

View File

@ -21,14 +21,16 @@ var (
// Network is micro network
type Network interface {
// Node is network node
Node
// Options returns the network options
Options() Options
// Name of the network
Name() string
// Address returns network bind address
Address() string
// Connect starts the resolver and tunnel server
Connect() error
// Nodes returns list of network nodes
Nodes() []Node
// Close stops the tunnel and resolving
Close() error
// Client is micro client
@ -37,6 +39,16 @@ type Network interface {
Server() server.Server
}
// Node is network node
type Node interface {
// Id is node id
Id() string
// Address is node bind address
Address() string
// Network is the network node is in
Network() Network
}
// NewNetwork returns a new network interface
func NewNetwork(opts ...Option) Network {
return newNetwork(opts...)