Class DrasylNode
- java.lang.Object
-
- org.drasyl.DrasylNode
-
- Direct Known Subclasses:
BehavioralDrasylNode
@Beta public abstract class DrasylNode extends Object
Represents a node in the drasyl Overlay Network. Applications that want to run on drasyl must implement this class.Example usage:
DrasylNode node = new DrasylNode() { @Override public void onEvent(Event event) { // handle incoming events (messages) here System.out.println("Event received: " + event); } }; node.start(); // wait till NodeOnlineEvent has been received // send message to another node node.send("0229041b273dd5ee1c2bef2d77ae17dbd00d2f0a2e939e22d42ef1c4bf05147ea9", "Hello World"); // shutdown node node.shutdown();
-
-
Constructor Summary
Constructors Modifier Constructor Description protected
DrasylNode()
Creates a new drasyl Node.protected
DrasylNode(DrasylConfig config)
Creates a new drasyl Node with the givenconfig
.protected
DrasylNode(DrasylConfig config, Identity identity, PeersManager peersManager, Pipeline pipeline, PluginManager pluginManager, AtomicReference<CompletableFuture<Void>> startFuture, AtomicReference<CompletableFuture<Void>> shutdownFuture, io.reactivex.rxjava3.core.Scheduler scheduler)
-
Method Summary
All Methods Static Methods Instance Methods Abstract Methods Concrete Methods Modifier and Type Method Description static String
getVersion()
Returns the version of the node.Identity
identity()
Returns theIdentity
of this node.static void
irrevocablyTerminate()
This method stops the shared threads (EventLoopGroup
s), but only if noneDrasylNode
is using them anymore.abstract void
onEvent(Event event)
Sendsevent
to the application and tells it information about the local node, other peers, connections or incoming messages.Pipeline
pipeline()
Returns thePipeline
to allow users to add own handlers.CompletableFuture<Void>
send(String recipient, Object payload)
Sends the content ofpayload
to the identityrecipient
.CompletableFuture<Void>
send(CompressedPublicKey recipient, Object payload)
Sends the content ofpayload
to the identityrecipient
.CompletableFuture<Void>
shutdown()
Shut the drasyl node down.CompletableFuture<Void>
start()
Start the drasyl node.
-
-
-
Constructor Detail
-
DrasylNode
protected DrasylNode() throws DrasylException
Creates a new drasyl Node. The node is only being created, it neither connects to the Overlay Network, nor can send or receive messages. To do this you have to callstart()
.Note: This is a blocking method, because when a node is started for the first time, its identity must be created. This can take up to a minute because of the proof of work.
- Throws:
DrasylException
- if identity could not be loaded or createdDrasylConfigException
- if config is invalid
-
DrasylNode
protected DrasylNode(DrasylConfig config) throws DrasylException
Creates a new drasyl Node with the givenconfig
. The node is only being created, it neither connects to the Overlay * Network, nor can send or receive messages. To do this you have to callstart()
.Note: This is a blocking method, because when a node is started for the first time, its identity must be created. This can take up to a minute because of the proof of work.
- Parameters:
config
- custom configuration used for this node- Throws:
NullPointerException
- ifconfig
isnull
DrasylException
- if identity could not be loaded or created
-
DrasylNode
protected DrasylNode(DrasylConfig config, Identity identity, PeersManager peersManager, Pipeline pipeline, PluginManager pluginManager, AtomicReference<CompletableFuture<Void>> startFuture, AtomicReference<CompletableFuture<Void>> shutdownFuture, io.reactivex.rxjava3.core.Scheduler scheduler)
-
-
Method Detail
-
getVersion
@Nullable public static String getVersion()
Returns the version of the node. If the version could not be read,null
is returned.- Returns:
- the version of the node. If the version could not be read,
null
is returned
-
irrevocablyTerminate
public static void irrevocablyTerminate()
This method stops the shared threads (EventLoopGroup
s), but only if noneDrasylNode
is using them anymore.This operation cannot be undone. After performing this operation, no new DrasylNodes can be created!
-
onEvent
public abstract void onEvent(@NonNull Event event)
Sendsevent
to the application and tells it information about the local node, other peers, connections or incoming messages.- Parameters:
event
- the event
-
send
@NonNull public CompletableFuture<Void> send(@NonNull String recipient, Object payload)
Sends the content ofpayload
to the identityrecipient
. Returns a failed future with aIllegalStateException
if the message could not be sent to the recipient or a super peer. Important: Just because the future did not fail does not automatically mean that the message could be delivered. Delivery confirmations must be implemented by the application.Note: It is possible that the passed object cannot be serialized. In this case it is not sent and the future is fulfilled with an exception. Serializable objects can be added on start via the
DrasylConfig
or on demand viaHandlerContext.inboundSerialization()
orHandlerContext.outboundSerialization()
.- Parameters:
recipient
- the recipient of a message as compressed public keypayload
- the payload of a message- Returns:
- a completed future if the message was successfully processed, otherwise an exceptionally future
- Since:
- 0.1.3-SNAPSHOT
- See Also:
Handler
,MessageSerializer
-
send
@NonNull public CompletableFuture<Void> send(@Nullable CompressedPublicKey recipient, Object payload)
Sends the content ofpayload
to the identityrecipient
. Returns a failed future with aIllegalStateException
if the message could not be sent to the recipient or a super peer. Important: Just because the future did not fail does not automatically mean that the message could be delivered. Delivery confirmations must be implemented by the application.Note: It is possible that the passed object cannot be serialized. In this case it is not sent and the future is fulfilled with an exception. Serializable objects can be added on start via the
DrasylConfig
or on demand viaHandlerContext.inboundSerialization()
orHandlerContext.outboundSerialization()
.- Parameters:
recipient
- the recipient of a messagepayload
- the payload of a message- Returns:
- a completed future if the message was successfully processed, otherwise an exceptionally future
- Since:
- 0.1.3-SNAPSHOT
- See Also:
Handler
,MessageSerializer
-
shutdown
@NonNull public CompletableFuture<Void> shutdown()
Shut the drasyl node down.If there is a connection to a Super Peer, our node will deregister from that Super Peer.
If the local server has been started, it will now be stopped.
This method does not stop the shared threads. To kill the shared threads, you have to call the
irrevocablyTerminate()
method.- Returns:
- this method returns a future, which complements if all shutdown steps have been completed.
-
start
@NonNull public CompletableFuture<Void> start()
Start the drasyl node.First, the identity of the node is loaded. If none exists, a new one is generated.
If activated, a local server is started. This allows other nodes to discover our node.
If a super peer has been configured, a client is started which connects to this super peer. Our node uses the Super Peer to discover and communicate with other nodes.
- Returns:
- this method returns a future, which complements if all components necessary for the operation have been started.
-
pipeline
@NonNull public Pipeline pipeline()
Returns thePipeline
to allow users to add own handlers.- Returns:
- the pipeline
-
-