We instantiate a p2p network and call start(). This will begin running a single
p2p network until stop() is called.
There are 3 session types:
InboundSession, concerned with incoming connectionsOutboundSession, concerned with outgoing connectionsSeedSession is a special session type which connects to seed nodes to populate
the hosts pool, then finishes once synced.Connections are made by either Acceptor or Connector for incoming or outgoing
respectively. They have multiple transport types; see src/net/transport/ for the
full list.
Connections are then wrapped in a Channel abstraction which allows
protocols to be attached. See src/net/protocol/ and run fd protocol for custom
application specific network protocols. Also see the follow tutorial:
The outbound session is responsible to ensure the hosts pool is populated, either through currently connected nodes or using the seed session. It performs this algorithm:
status = ACTIVEThen each slot performs this algorithm:
status ≟ DISCOVERY or status ≟ SEED then
let status = SLEEP and wait for a wakeup signal.p2p then let status = DISCOVERY
else skip this step, and let status = SEED.
status ≟ DISCOVERY and no hosts are found then let status = SEED.status ≟ DISCOVERY or status = SEED and we manage to find
new hosts, then wakeup the other sleeping slots.status = SLEEP.The slots are able to communicate to each other through pipes to signal status changes such as wakeup requests.
Sleeping slots are woken up periodically by the session. They can be forcefully woken up
by calling session.wakeup().