Show / Hide Table of Contents

Class Swarm<T>

Inheritance
Object
Swarm<T>
Namespace: Libplanet.Net
Assembly: Libplanet.Net.dll
Syntax
public class Swarm<T> : IDisposable where T : IAction, new()
Type Parameters
Name Description
T

Constructors

| Improve this Doc View Source

Swarm(BlockChain<T>, PrivateKey, AppProtocolVersion, Int32, String, Nullable<Int32>, IEnumerable<IceServer>, DifferentAppProtocolVersionEncountered, IEnumerable<PublicKey>, SwarmOptions)

Creates a Swarm<T>. This constructor in only itself does not start any communication with the network.

Declaration
public Swarm(BlockChain<T> blockChain, PrivateKey privateKey, AppProtocolVersion appProtocolVersion, int workers = 100, string host = null, int? listenPort = null, IEnumerable<IceServer> iceServers = null, DifferentAppProtocolVersionEncountered differentAppProtocolVersionEncountered = null, IEnumerable<PublicKey> trustedAppProtocolVersionSigners = null, SwarmOptions options = null)
Parameters
Type Name Description
BlockChain<T> blockChain

A blockchain to publicize on the network.

PrivateKey privateKey

A private key to sign messages. The public part of this key become a part of its end address for being pointed by peers.

AppProtocolVersion appProtocolVersion

An app protocol to comply.

Int32 workers

The number of background workers (i.e., threads).

String host

A hostname to be a part of a public endpoint, that peers use when they connect to this node. Note that this is not a hostname to listen to; Swarm<T> always listens to 0.0.0.0 & ::/0.

Nullable<Int32> listenPort

A port number to listen to.

IEnumerable<IceServer> iceServers

ICE servers to use for TURN/STUN. Purposes to traverse NAT.

DifferentAppProtocolVersionEncountered differentAppProtocolVersionEncountered

A delegate called back when this node encounters a peer with one different from appProtocolVersion, and their version is signed by a trusted party (i.e., trustedAppProtocolVersionSigners).

IEnumerable<PublicKey> trustedAppProtocolVersionSigners

PublicKeys of parties who signed AppProtocolVersions to trust. To trust any party, pass null, which is the default.

SwarmOptions options

Options for Swarm<T>.

Properties

| Improve this Doc View Source

Address

Declaration
public Address Address { get; }
Property Value
Type Description
Address
| Improve this Doc View Source

AppProtocolVersion

The application protocol version to comply.

Declaration
public AppProtocolVersion AppProtocolVersion { get; }
Property Value
Type Description
AppProtocolVersion
| Improve this Doc View Source

AsPeer

Declaration
public BoundPeer AsPeer { get; }
Property Value
Type Description
BoundPeer
| Improve this Doc View Source

BlockCandidateTable

This is a table of waiting Block<T>s to enter the BlockChain. BlockCandidateTable<T>

Declaration
public BlockCandidateTable<T> BlockCandidateTable { get; }
Property Value
Type Description
BlockCandidateTable<T>
| Improve this Doc View Source

BlockChain

The BlockChain<T> instance this Swarm<T> instance synchronizes with.

Declaration
public BlockChain<T> BlockChain { get; }
Property Value
Type Description
BlockChain<T>
| Improve this Doc View Source

BlockDemandTable

Information of Swarm<T>'s demand for new blocks. It is empty when the Swarm<T> does not have any block to demand. BlockDemandTable<T>

Declaration
public BlockDemandTable<T> BlockDemandTable { get; }
Property Value
Type Description
BlockDemandTable<T>
| Improve this Doc View Source

EndPoint

Declaration
public DnsEndPoint EndPoint { get; }
Property Value
Type Description
DnsEndPoint
| Improve this Doc View Source

LastMessageTimestamp

The last time when any message was arrived. It can be null if no message has been arrived yet.

Declaration
public DateTimeOffset? LastMessageTimestamp { get; }
Property Value
Type Description
Nullable<DateTimeOffset>
| Improve this Doc View Source

LastSeenTimestamps

Declaration
public IDictionary<BoundPeer, DateTimeOffset> LastSeenTimestamps { get; }
Property Value
Type Description
IDictionary<BoundPeer, DateTimeOffset>
| Improve this Doc View Source

Peers

Declaration
public IReadOnlyList<BoundPeer> Peers { get; }
Property Value
Type Description
IReadOnlyList<BoundPeer>
| Improve this Doc View Source

Running

Declaration
public bool Running { get; }
Property Value
Type Description
Boolean
| Improve this Doc View Source

TrustedAppProtocolVersionSigners

PublicKeys of parties who signed AppProtocolVersions to trust. In case of null, any parties are trusted.

Declaration
public IImmutableSet<PublicKey> TrustedAppProtocolVersionSigners { get; }
Property Value
Type Description
IImmutableSet<PublicKey>

Methods

| Improve this Doc View Source

AddPeersAsync(IEnumerable<BoundPeer>, Nullable<TimeSpan>, CancellationToken)

Adds peers to routing table by sending a simple message.

Declaration
public async Task AddPeersAsync(IEnumerable<BoundPeer> peers, TimeSpan? timeout, CancellationToken cancellationToken = null)
Parameters
Type Name Description
IEnumerable<BoundPeer> peers

A list of peers to add.

Nullable<TimeSpan> timeout

Timeout for this operation. If it is set to null, wait infinitely until the requested operation is finished.

CancellationToken cancellationToken

A cancellation token used to propagate notification that this operation should be canceled.

Returns
Type Description
Task

An awaitable task without value.

| Improve this Doc View Source

BootstrapAsync(CancellationToken)

Join to the peer-to-peer network using seed peers.

Declaration
public async Task BootstrapAsync(CancellationToken cancellationToken = null)
Parameters
Type Name Description
CancellationToken cancellationToken

A cancellation token used to propagate notification that this operation should be canceled.

Returns
Type Description
Task

An awaitable task without value.

Exceptions
Type Condition
SwarmException

Thrown when this Swarm<T> instance is not Running.

| Improve this Doc View Source

BootstrapAsync(IEnumerable<BoundPeer>, Nullable<TimeSpan>, Int32, CancellationToken)

Join to the peer-to-peer network using seed peers.

Declaration
public async Task BootstrapAsync(IEnumerable<BoundPeer> seedPeers, TimeSpan? dialTimeout, int searchDepth, CancellationToken cancellationToken = null)
Parameters
Type Name Description
IEnumerable<BoundPeer> seedPeers

List of seed peers.

Nullable<TimeSpan> dialTimeout

Timeout for connecting to peers.

Int32 searchDepth

Maximum recursion depth when finding neighbors of current BoundPeer from seed peers.

CancellationToken cancellationToken

A cancellation token used to propagate notification that this operation should be canceled.

Returns
Type Description
Task

An awaitable task without value.

Exceptions
Type Condition
SwarmException

Thrown when this Swarm<T> instance is not Running.

| Improve this Doc View Source

BroadcastBlock(Block<T>)

Broadcasts the given block to peers.

The message is immediately broadcasted, and it is done if the same block has already been broadcasted before.

Declaration
public void BroadcastBlock(Block<T> block)
Parameters
Type Name Description
Block<T> block

The block to broadcast to peers.

Remarks

It does not have to be called manually, because Swarm<T> in itself watches BlockChain for Tip changes and immediately broadcasts updates if anything changes.

| Improve this Doc View Source

BroadcastTxs(IEnumerable<Transaction<T>>)

Declaration
public void BroadcastTxs(IEnumerable<Transaction<T>> txs)
Parameters
Type Name Description
IEnumerable<Transaction<T>> txs
| Improve this Doc View Source

CheckAllPeersAsync(Nullable<TimeSpan>, CancellationToken)

Validates all BoundPeers in the routing table by sending a simple message.

Declaration
public async Task CheckAllPeersAsync(TimeSpan? timeout = null, CancellationToken cancellationToken = null)
Parameters
Type Name Description
Nullable<TimeSpan> timeout

Timeout for this operation. If it is set to null, wait infinitely until the requested operation is finished.

CancellationToken cancellationToken

A cancellation token used to propagate notification that this operation should be canceled.

Returns
Type Description
Task

An awaitable task without value.

| Improve this Doc View Source

Dispose()

Declaration
public void Dispose()
| Improve this Doc View Source

Finalize()

Declaration
protected void Finalize()
| Improve this Doc View Source

FindSpecificPeerAsync(Address, Int32, Nullable<TimeSpan>, CancellationToken)

Use FindNeighborsMsg messages to to find a BoundPeer with Address of target.

Declaration
public async Task<BoundPeer> FindSpecificPeerAsync(Address target, int depth = 3, TimeSpan? timeout = null, CancellationToken cancellationToken = null)
Parameters
Type Name Description
Address target

The Address to find.

Int32 depth

Target depth of recursive operation. If -1 is given, will recursive until the closest BoundPeer to the target is found.

Nullable<TimeSpan> timeout

for waiting reply of FindNeighborsMsg. If null is given, will not be thrown.

CancellationToken cancellationToken

A cancellation token used to propagate notification that this operation should be canceled.

Returns
Type Description
Task<BoundPeer>

A BoundPeer with Address of target. Returns null if the peer with address does not exist.

| Improve this Doc View Source

GetPeerChainStateAsync(Nullable<TimeSpan>, CancellationToken)

Gets the PeerChainState of the connected Peers.

Declaration
public async Task<IEnumerable<PeerChainState>> GetPeerChainStateAsync(TimeSpan? dialTimeout, CancellationToken cancellationToken)
Parameters
Type Name Description
Nullable<TimeSpan> dialTimeout

When the Swarm<T> tries to dial each peer in Peers, the dial-up is cancelled after this timeout, and it tries another peer. If null is given it never gives up dial-ups.

CancellationToken cancellationToken

A cancellation token used to propagate notification that this operation should be canceled.

Returns
Type Description
Task<IEnumerable<PeerChainState>>

PeerChainState of the connected Peers.

| Improve this Doc View Source

PreloadAsync(IProgress<PreloadState>, Boolean, CancellationToken)

Preemptively downloads blocks from registered BoundPeers.

Declaration
public async Task PreloadAsync(IProgress<PreloadState> progress = null, bool render = false, CancellationToken cancellationToken = null)
Parameters
Type Name Description
IProgress<PreloadState> progress

An instance that receives progress updates for block downloads.

Boolean render

The value indicates whether to render blocks and actions while preloading.

CancellationToken cancellationToken

A cancellation token used to propagate notification that this operation should be canceled.

Returns
Type Description
Task

A task without value. You only can await until the method is completed.

Remarks

This does not render downloaded IActions, but fills states only.

| Improve this Doc View Source

PreloadAsync(Nullable<TimeSpan>, Int64, IProgress<PreloadState>, Boolean, CancellationToken)

Preemptively downloads blocks from registered BoundPeers.

Declaration
public async Task PreloadAsync(TimeSpan? dialTimeout, long tipDeltaThreshold, IProgress<PreloadState> progress = null, bool render = false, CancellationToken cancellationToken = null)
Parameters
Type Name Description
Nullable<TimeSpan> dialTimeout

When the Swarm<T> tries to dial each peer in Peers, the dial-up is cancelled after this timeout, and it tries another peer. If null is given it never gives up dial-ups.

Int64 tipDeltaThreshold

The threshold of the difference between the topmost tip among peers and the local tip. If the local tip is still behind the topmost tip among peers by more than this threshold after a preloading is once done, the preloading is repeated.

IProgress<PreloadState> progress

An instance that receives progress updates for block downloads.

Boolean render

The value indicates whether to render blocks and actions while preloading.

CancellationToken cancellationToken

A cancellation token used to propagate notification that this operation should be canceled.

Returns
Type Description
Task

A task without value. You only can await until the method is completed.

Remarks

This does not render downloaded IActions, but fills states only.

| Improve this Doc View Source

StartAsync(CancellationToken)

Starts to periodically synchronize the BlockChain.

Declaration
public async Task StartAsync(CancellationToken cancellationToken = null)
Parameters
Type Name Description
CancellationToken cancellationToken

A cancellation token used to propagate notification that this operation should be canceled.

Returns
Type Description
Task

An awaitable task without value.

Remarks

If the BlockChain has no blocks at all or there are long behind blocks to caught in the network this method could lead to unexpected behaviors, because this tries to render all actions in the behind blocks so that there are a lot of calls to methods of Renderers in a short period of time. This can lead a game startup slow. If you want to omit rendering of these actions in the behind blocks use PreloadAsync(IProgress<PreloadState>, Boolean, CancellationToken) method too.

Exceptions
Type Condition
SwarmException

Thrown when this Swarm<T> instance is already Running.

| Improve this Doc View Source

StartAsync(TimeSpan, TimeSpan, TimeSpan, CancellationToken)

Starts to periodically synchronize the BlockChain.

Declaration
public async Task StartAsync(TimeSpan dialTimeout, TimeSpan broadcastBlockInterval, TimeSpan broadcastTxInterval, CancellationToken cancellationToken = null)
Parameters
Type Name Description
TimeSpan dialTimeout

When the Swarm<T> tries to dial each peer in Peers, the dial-up is cancelled after this timeout, and it tries another peer. If null is given it never gives up dial-ups.

TimeSpan broadcastBlockInterval

Time interval between each broadcast of chain tip.

TimeSpan broadcastTxInterval

Time interval between each broadcast of staged transactions.

CancellationToken cancellationToken

A cancellation token used to propagate notification that this operation should be canceled.

Returns
Type Description
Task

An awaitable task without value.

Remarks

If the BlockChain has no blocks at all or there are long behind blocks to caught in the network this method could lead to unexpected behaviors, because this tries to render all actions in the behind blocks so that there are a lot of calls to methods of Renderers in a short period of time. This can lead a game startup slow. If you want to omit rendering of these actions in the behind blocks use PreloadAsync(IProgress<PreloadState>, Boolean, CancellationToken) method too.

Exceptions
Type Condition
SwarmException

Thrown when this Swarm<T> instance is already Running.

| Improve this Doc View Source

StopAsync(CancellationToken)

Declaration
public async Task StopAsync(CancellationToken cancellationToken = null)
Parameters
Type Name Description
CancellationToken cancellationToken
Returns
Type Description
Task
| Improve this Doc View Source

StopAsync(TimeSpan, CancellationToken)

Declaration
public async Task StopAsync(TimeSpan waitFor, CancellationToken cancellationToken = null)
Parameters
Type Name Description
TimeSpan waitFor
CancellationToken cancellationToken
Returns
Type Description
Task
| Improve this Doc View Source

WaitForRunningAsync()

Waits until this Swarm<T> instance gets started to run.

Declaration
public Task WaitForRunningAsync()
Returns
Type Description
Task

A completed when Running property becomes true.

See Also
WaitForRunningAsync()
  • Improve this Doc
  • View Source
In This Article
Back to top Copyright © 2018–2022 Planetarium