mirror of
https://github.com/yggdrasil-network/yggdrasil-go.git
synced 2025-04-28 22:25:07 +03:00
work in progress actorizing core.peers and replacing switch worker with per-peer switch-generated lookupTable
This commit is contained in:
parent
16309d2862
commit
e926a3be6d
7 changed files with 221 additions and 186 deletions
|
@ -110,7 +110,8 @@ type Session struct {
|
|||
// there is exactly one entry then this node is not connected to any other nodes
|
||||
// and is therefore isolated.
|
||||
func (c *Core) GetPeers() []Peer {
|
||||
ports := c.peers.ports.Load().(map[switchPort]*peer)
|
||||
var ports map[switchPort]*peer
|
||||
phony.Block(&c.peers, func() { ports = c.peers.ports })
|
||||
var peers []Peer
|
||||
var ps []switchPort
|
||||
for port := range ports {
|
||||
|
@ -143,10 +144,14 @@ func (c *Core) GetPeers() []Peer {
|
|||
// isolated or not connected to any peers.
|
||||
func (c *Core) GetSwitchPeers() []SwitchPeer {
|
||||
var switchpeers []SwitchPeer
|
||||
table := c.switchTable.table.Load().(lookupTable)
|
||||
peers := c.peers.ports.Load().(map[switchPort]*peer)
|
||||
var table *lookupTable
|
||||
var ports map[switchPort]*peer
|
||||
phony.Block(&c.peers, func() {
|
||||
table = c.peers.table
|
||||
ports = c.peers.ports
|
||||
})
|
||||
for _, elem := range table.elems {
|
||||
peer, isIn := peers[elem.port]
|
||||
peer, isIn := ports[elem.port]
|
||||
if !isIn {
|
||||
continue
|
||||
}
|
||||
|
@ -325,8 +330,8 @@ func (c *Core) EncryptionPublicKey() string {
|
|||
// connected to any other nodes (effectively making you the root of a
|
||||
// single-node network).
|
||||
func (c *Core) Coords() []uint64 {
|
||||
table := c.switchTable.table.Load().(lookupTable)
|
||||
return wire_coordsBytestoUint64s(table.self.getCoords())
|
||||
loc := c.switchTable.getLocator()
|
||||
return wire_coordsBytestoUint64s(loc.getCoords())
|
||||
}
|
||||
|
||||
// Address gets the IPv6 address of the Yggdrasil node. This is always a /128
|
||||
|
@ -490,7 +495,11 @@ func (c *Core) CallPeer(addr string, sintf string) error {
|
|||
// DisconnectPeer disconnects a peer once. This should be specified as a port
|
||||
// number.
|
||||
func (c *Core) DisconnectPeer(port uint64) error {
|
||||
c.peers.removePeer(switchPort(port))
|
||||
c.peers.Act(nil, func() {
|
||||
if p, isIn := c.peers.ports[switchPort(port)]; isIn {
|
||||
p.Act(&c.peers, p._removeSelf)
|
||||
}
|
||||
})
|
||||
return nil
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue