2020-07-27 15:50:46 +02:00
|
|
|
# kelgin
|
2020-07-16 15:02:50 +02:00
|
|
|
|
2020-11-15 15:58:55 +01:00
|
|
|
Asynchronous framework mostly inspired by [Capn'Proto](https://github.com/capnproto/capnproto) with the key difference of not
|
|
|
|
using Promises, but more reusable Pipelines/Conveyors. This introduces some challenges since I can't assume that only one
|
2021-11-29 21:42:30 +01:00
|
|
|
element gets passed along the chain, but it is managable. The advantage is that you have zero heap overhead by recreating the chain after every use.
|
2020-11-15 15:58:55 +01:00
|
|
|
|
2021-11-29 21:42:30 +01:00
|
|
|
Very early stage. I am currently rewriting my software to find a good interface solution by checking if I am comfortable with the current design.
|
2020-11-15 15:58:55 +01:00
|
|
|
|
|
|
|
# Dependencies
|
|
|
|
|
|
|
|
You will need
|
|
|
|
|
2021-11-29 21:42:30 +01:00
|
|
|
* A compiler (std=c++17) (g++/clang++)
|
2020-11-15 15:58:55 +01:00
|
|
|
* scons
|
2021-11-29 21:42:30 +01:00
|
|
|
* gnutls
|
2020-11-15 15:58:55 +01:00
|
|
|
|
|
|
|
Optional dependencies are
|
|
|
|
|
|
|
|
* clang-format
|
|
|
|
|
|
|
|
# Build
|
|
|
|
|
|
|
|
Execute `scons`.
|
|
|
|
It's that simple.
|
|
|
|
|
|
|
|
`scons test` build the test cases.
|
|
|
|
`scons format` formats the sources.
|
|
|
|
`scons install` installs the library + headers locally.
|
|
|
|
|
2021-11-29 21:42:30 +01:00
|
|
|
# Schema Structure
|
|
|
|
|
|
|
|
Message description currently is achieved by a series of templated Message classes as seen below.
|
|
|
|
Though it is sufficient the next code block is a little bit tedious to write.
|
|
|
|
|
|
|
|
```
|
|
|
|
using BasicStruct = MessageStruct<
|
|
|
|
MessageStructMember<decltype("foo"_t), MessagePrimitive<int32_t>,
|
|
|
|
MessageStructMember<decltype("bar"_t), MessagePrimitive<std::string>
|
|
|
|
>;
|
|
|
|
```
|
|
|
|
|
|
|
|
Since this concept unites writing the schema description coupled with the storage in memory I have chosen to seperate these concepts into
|
|
|
|
schema descriptions and containers. The Message class would be just a wrapper around those concepts. Together with C++20 templated string literals and
|
|
|
|
the seperated schema and variable storage we achieve a description in this style.
|
|
|
|
|
|
|
|
```
|
|
|
|
using BasicStruct = schema::Struct<
|
|
|
|
schema::NamedMember<"foo", Int32>,
|
|
|
|
schema::NamedMember<"bar", String>
|
|
|
|
>;
|
|
|
|
```
|
|
|
|
|
|
|
|
The main advantage is the increased readibility. Together with the seperated storage we are now able to implement zerocopy storage patterns.
|
|
|
|
This message description change is currently being developed and the old message description / schema classes will be removed when it is finished.
|
|
|
|
|
2020-11-15 15:58:55 +01:00
|
|
|
# Examples
|
|
|
|
|
|
|
|
Currently no examples except in test.
|
2021-11-29 21:42:30 +01:00
|
|
|
But [kelgin-graphics](https://github.com/keldu/kelgin-graphics) contains some programs which heavily use
|
|
|
|
this library. Though no schema or io features are used there.
|
2020-11-15 15:58:55 +01:00
|
|
|
|
|
|
|
# Roadmap
|
|
|
|
|
|
|
|
* Zerocopy for message templates during parsing
|
|
|
|
* Tls with gnutls
|
|
|
|
* Windows/Mac Support
|
|
|
|
* Multithreaded conveyor communication
|
2020-11-15 16:24:52 +01:00
|
|
|
* Logger implementation
|