Hekate is a library to make machines aware of each other and supporting interaction between them by offering various functionality. The library is in prototype-stage and not ready for production environments.
You need a Java Virtual Machine (JVM) to run the online demo.
Hekate uses a modular approach to find other nodes. Each module implements an unified interface. Each module uses it's own transport mechanism and strategy to find other nodes. The findings of all modules are consistently aggregated. Each new module increases the scope of a Hekate node to find other nodes.
Hekate nodes interact and make use of each other through Handlers, specified pieces of software implementing
a dedicated feature. Available handlers include features to exchange basic messages between nodes (chat), transfer
arbitrary binary files (transfer), and a simple testing framework to test the availability of other nodes (ping).
New functionality can be introduced by implementing additional handlers. Each handler implements an unified interface.
A Hekate node can find another node through multiple modules, if the node can be perceived through different transport mechanisms with different awareness strategies. Failure of isolated transport mechanisms can be compensated.
Hekate is build on a modular architecture. Each machine is represented as a Hekate node. A Hekate node loads modules and makes use of them to be aware of other Hekate nodes. The set of loaded modules determine the scope of a Hekate node. A Hekate node offers functionality with handlers. Each handler uses custom messages to interact and exchange information with other Hekate nodes.
Each module uses it's own transport mechanism and strategy to find other nodes. The set of loaded modules determines the scope of a Hekate node. The scope can be adjusted to meet application requirements. The findings of all modules are aggregated to get a complete overview of available nodes. A unique remote Hekate node can be found by multiple modules and Hekate consistently aggregates the findings. Each module defines a distance, which is used to choose the most efficient module to interact with a remote Hekate node.
Currently Hekate offers two modules: (1) a Multicast module, which uses multicast datagrams to find other nodes; (2) a Websocket module, which uses a Websocket server as a rendezvous point to be aware of other Hekate nodes. Each module implements a common interface. So it is possible to implement and load additional modules to increase the scope of a Hekate node and meet additional application requirements. For example a Bluetooth module or Near Field Communication (NFC) module could be implemented.
Hekate comes bundled with a set of handlers implementing useful basic functionality. They can be loaded and used out-of-the-box without complicated configuration (convention-over-configuration). A Hekate node can be run headless (wihtout GUI) from the command line or with a GUI to ease user interaction. The GUI shows all loaded handlers, modules, and found remote Hekate nodes.
The Hekate library provides a couple of basic handlers with useful functionality. This includes a chat handler to send simple chat messages between nodes, a transfer handler to transfer arbitrary binary files, and a ping dispatcher to test the round-trip time between the local to a remote Hekate node.
External software can make use of Hekate by using functionality of existing handlers or by introducing a custom handler to introduce new functionality. Each handler implements a common interface. Implementing new functionality through a new handler is very easy. A handler must be loaded on the local and remote Hekate node to make use of the handlers functionality. Available handlers can be used by right-clicking on a found node.
A Hekate node can send and receive simple text messages from remote Hekate nodes. This functionality is provided by the chat handler. A chat is established with a chat session. A node A asks another node B if it willing to accept a chat session by sending a chat request message. Node B can accept or decline a chat request.
The chat handler uses the strategy pattern to provide different strategies how to handle a chat request. Available strategies are to always accept a chat request, decline any chat request, or show a GUI-dialog to let the user decide if a chat requeste should be accepted.
A chat session is handled by a chat provider. As with handling a chat request, different strategies are available to handle received chat messages and to send messages. Available strategies include to resend received chat message or show a chat-GUI to let a user input own chat messages. Additional chat strategies can be implemented and loaded through configuration, e.g. a chat provider to proceed predefined commands or translating text.
The transfer handler is able to transfer arbitrary binary data between Hekate nodes. To ease selecting and sending multiple files at once, Hekate provides a simple to use GUI.
A first step is to establish a direct connection between two Hekate nodes before sending any binary data. Each module provides a mechanism to establish a direct connection on top of the used transport mechanism. If it is not possible to establish a direct connection, e.g. because of NAT-firewalls, a relay connection is established through a helper node.
Each file is send in two phases. As a first step metadata is send to describe a file, like file name and file length. In the seconds step the actual bytes are send./p>
The ping handler provides a simple test to the connection between two Hekate nodes. The test works by sending a PING message and waiting for a PONG message. A remote Hekate node receiving a PING message immediately sends back a PONG message. The round-trip time is measured and can used as a key performance indicator.
Hekate can be executed through a executable JAR. The JAR start the Websocket- and Multicast-Module to introduce a network local (LAN) and global (Internet) scope. The Websocket-Module makes use of a deployed Websocket-Server to bring together different Hekate nodes. The JAR start the Chat, Transfer, and Ping Handler. Source code will be available soon.
The functionality offered by Hekate can be used within Jadex by starting a special agent, which start a local Hekate node. The agent can be started with four simple steps:
Currently the agent offers minimal functionality to start a local Hekate node.
Hekate is still in prototype-stage, but already offering useful functionality and an extensible architecture to ease introducing new functionality ad-hoc and widen scope ad-hoc. Hekate is not stable and not ready to be used in production environments.
You want to take part in developing Hekate? You think the functionality offered by Heakte could be useful for your own Application? Then write me an e-mail to get in touch with me.
Hekate is written in Java 6 with Eclipse Indigo 3.7. Maven is used for dependency management. You can downoad the source code here.
Wish List, Future Development