Package org.drasyl

Class DrasylNode


  • @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 Detail

      • DrasylNode

        public 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 call start().

        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
      • DrasylNode

        public DrasylNode​(DrasylConfig config)
                   throws DrasylException
        Creates a new drasyl Node with the given config. 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 call start().

        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:
        DrasylException
    • Method Detail

      • onEvent

        public abstract void onEvent​(Event event)
        Sends event to the application and tells it information about the local node, other peers, connections or incoming messages.
        Parameters:
        event - the event
      • send

        public CompletableFuture<Void> send​(String recipient,
                                            Object payload)
        Sends the content of payload to the identity recipient. Returns a failed future with a MessengerException 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. By default, drasyl allows the serialization of Java's primitive types, as well as String and Number. Further objects can be added on start via the DrasylConfig or on demand via HandlerContext.validator(). If the DefaultCodec does not support these objects, a custom Codec can be added to the beginning of the Pipeline.

        Parameters:
        recipient - the recipient of a message
        payload - 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:
        Codec, DefaultCodec, TypeValidator
      • send

        public CompletableFuture<Void> send​(CompressedPublicKey recipient,
                                            Object payload)
        Sends the content of payload to the identity recipient. Returns a failed future with a MessengerException 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. By default, drasyl allows the serialization of Java's primitive types, as well as String and Number. Further objects can be added on start via the DrasylConfig or on demand via HandlerContext.validator(). If the DefaultCodec does not support these objects, a custom Codec can be added to the beginning of the Pipeline.

        Parameters:
        recipient - the recipient of a message
        payload - 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:
        Codec, DefaultCodec, TypeValidator
      • shutdown

        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

        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.
      • getVersion

        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
      • pipeline

        public Pipeline pipeline()
        Returns the Pipeline to allow users to add own handlers.
        Returns:
        the pipeline
      • getLogLevel

        public static ch.qos.logback.classic.Level getLogLevel()
        Return log level of loggers in org.drasyl package namespace.
        Returns:
        return log level of loggers in org.drasyl package namespace
      • setLogLevel

        public static void setLogLevel​(ch.qos.logback.classic.Level level)
        Set log level of all drasyl loggers in org.drasyl package namespace.
        Parameters:
        level - new log level
      • irrevocablyTerminate

        public static void irrevocablyTerminate()
        This method stops the shared threads (EventLoopGroups), but only if none DrasylNode is using them anymore.

        This operation cannot be undone. After performing this operation, no new DrasylNodes can be created!