# A C++ Gemini server ## Introduction As I saw other implementations in Rust but no C++ to compete, I felt that I had to do something ;-). It is also a chance for me and a friend ( Brumaire) to practice C++ and to try to get as much performance as possible (my speciality is HPC so… Yeah). ## Design I use PlantUML to do the class diagram for the design. It's a work in progress. ## Goal What we want is a high performance server using asynchrony at first, and then maybe multi-threading to have the maximum possible performance. ## Configuration **WIP** The configuration of the server is made through a JSON file `config.json`. The JSON parser is [simdjson](https://github.com/simdjson/simdjson) directly integrated in our source code. ### Structure of the file - content - path : string, folder to the content of your site. - cache - enable_cache: bool, to enable cache of files or not - cache_size : unsigned int, the maximum size in bytes to put in cache - ssl - pem_path : string - cert_path : string ## Dependencies It uses a bundled version of `spdlog` as a git submodule, but it does not use the `fmt` lib that is inside `spdlog` (you can still change it in the CMakeLists). ## Documentation The doc of the code is made with [doxygen](https://www.doxygen.nl/), the `Doxyfile` is at the root of the repo. ## TODO/features * Possibility of an applicative gateway (like CGI for example) * Content in RAM cache * Asynchronous (boost ASIO deals with it)