ModEngine
ModEngine is a development framework meant for engineers working on networking protocols and clustered servers.
It is intended to reduce the barrier of entry for companies that want to work on custom protocols and server designs.
Networking is often considered to be one of the most difficult software domains. Inexperienced programmers may end up trapped in a debugging cycle where the sockets tend to deadlock or yield the dreaded broken pipe error.
The framework offers reliability and rapid prototyping for complex server and protocol design.
At the core of ModEngine is a Protocol Design Language. The design for a server node is broken into three steps: Data structures, conditions and triggers. Data structures are stored in the same format as used on the network, this reduces overhead processing for encode/decode operations. Included is a robust buffering system and handling for OS signals. Optimized for use in real-time systems as well as supporting async designs via both TCP and UDP.
Command Line Interface
DLLs are able to register and unregister commands. Command scope is provided as well as prompted help per parameter, partial syntax recognition and auto complete per parameter. The command line is extensible via a websocket.
DLLs/Shared Objects
Provides loading and cleanup for DLLs. Also includes a script processor that generates DLLs allowing for the developer to focus on functionality over architecture. The script language is formatted as a precompiler syntax for C++. Callback functions are implemented as C++. This also allows for a wide range of integration into 3rd party tools and libraries.
Internode communication
A provided intercommunication layer with a 96 bit indexing space to data blocks of variable size. Uses a publish subscribe interface. Allows for multiple sources to publish the same item. Server nodes can be added; supporting new protocols and features that offer backward compatibility. This system is tested to be able to perform the exchange of a shared object on a live cluster, offering high up times and deployment of patches without bringing down the live server.
Logic Compression/Optimization
Data associated with logical operations is compressed into bit fields, the use of masks and bitwise operators to allow groups of booleans to be compared simultaneously. In clusters where subscribers of a piece of data may perform the same logic operation is replaced with a thresholding system, the publisher makes the comparison and sends the result of the threshold as a compressed boolean. Replication nodes can be added to remove this load from mechanics heavy nodes. Dynamic thresholding is provided through the publisher subscribing to threshold values. State machines can also be designed using this part of the library.
Callbacks
The system allows for multiple inheritance of interfaces using a discriminant parameter. This allows callbacks to be implemented in the same class as the owner of the data. This avoids unnecessary generation of subclasses and the need to create alias/references and also reduces overhead of processing.
The runtime for this framework is implemented for Ubuntu Linux, additional platform support available by contract, or if demand is sufficient we may extend our platform support to other operating systems. Ports to other flavors of linux would be easy, the only libraries used are -ldl, -lpthread and -lrt. These are common to most flavors of linux.
ModEngine is not yet ready to take clients, source code will be made available by request and after the signing of a Non Disclosure Agreement
A public release for the runtime of ModEngine is in the works, there is no planned release date as of yet.
@Copyright 2018, Haley K McMurray, All Rights Reserved