83 lines
4.4 KiB
Markdown
83 lines
4.4 KiB
Markdown
# Accordion
|
|
|
|
A chat app built with C++ and raw networking. The client is built with C++ & QML; the server is headless C++ process intended to run in a docker container along with a PostgreSQL database.
|
|
|
|
This project is an experiment and learning experience, not a discord clone. Eventually though, with enough maturity, this app can evolve to handle media sharing and real-time voice telemetry.
|
|
|
|
### Design
|
|
The Accordion user space app (don't call it accordionUSA) is built with C++ + QML. Design principles are modularity, configurability, and performance (reactNative real quiet rn). In the future,
|
|
RtAudio shall be used for real-time audio management (wishful thinking 🥺). If not specified, "Accordion" shall refer to the client app, whereas the server must be explicitly mentioned.
|
|
|
|
Networking on both sides will utilize OpenSSL for TLS security. The performance focus intends to bypass HTTP in favor of raw TCP. Therefore, this app will not expose a universal api (sadly)
|
|
and extra features like request methods and response checking are entirely up to us. Authentication, data streaming, and media handling are also made more difficult to the benefit of complete
|
|
packet control.
|
|
|
|
The server is a headless C++ process that connects to a PostgreSQL database using libpqxx. A single server process along with a single database instance should represent the equivalent of one
|
|
discord server, with multiple users and text channels. Users are localized to only one server in this case, so external account tracking would be needed if per-server anonymity is not desired.
|
|
An Accordion server allows clients to view and publish chat messages; authentication is up in the air currently. 🤯
|
|
|
|
Total running list of external software source packages:
|
|
- OpenSSL: TLS Networking Security
|
|
- RtMidi: Realtime Audio I/O Processing
|
|
- libconfig++: Configuration File Interfacing
|
|
- more to come in the future 🐰
|
|
Similarly, a list of dependent linux packages:
|
|
- openssl: needed for secure networking
|
|
- anything else that was fixed by running `sudo apt install package`
|
|
|
|
## Development plan:
|
|
- [x] Build & project setup, get working hello-world program.
|
|
- [ ] TCP Demo between client and server
|
|
- [ ] Add TLS with OpenSSL on top of the TCP
|
|
- [ ] Build and deploy server to a Docker container in a CI/CD pipeline
|
|
- [ ] Implement PostgreSQL interfacing for the server
|
|
- [ ] Checkpoint the client<->server model for basic crud actions
|
|
- [ ] Create client GUI with QML: display responded messages and textbox + button for sending
|
|
- [ ] Support mutliple clients per server- identify unique users and attach them to messages
|
|
- [ ] Check Windows networking capabilities for cross-platform support on the client app
|
|
- [ ] Anything below here is future goals
|
|
- [ ] Test UDP packet sending
|
|
- [ ] RtAudio through UDP demo: simple loop-back test from client -> server -> back to client
|
|
- [ ] Multiple text channels, maybe a new table for each channel? might be overkill idk
|
|
- [ ] I think soundboards are really cool
|
|
|
|
## Build Instructions
|
|
|
|
Note: The server is intended for Linux only, and development for the client is still in Linux-only mode, at least in WSL.
|
|
|
|
Prerequisites:
|
|
CMake: https://cmake.org/download/ \
|
|
Qt6::QML: https://www.qt.io/development/download-qt-installer-oss \
|
|
Note: you must export the Qt install location to your environment. E.g. add the following to a powershell profile: `$env:Qt6_DIR = "C:\Qt\6.10.1\msvc2022_64"`
|
|
|
|
Compiler that supports C++20. Builds have been tested with GCC12 & MSVC17
|
|
|
|
Clone repository
|
|
```PowerShell
|
|
git clone https://git.vxbard.net/homeburger/accordion.git
|
|
git clone --recurse-submodules https://git.vxbard.net/homeburger/accordion.git # if there's submodules
|
|
git submodule update --init --recursive # if you cloned without submodules and need them
|
|
```
|
|
|
|
Build:
|
|
```PowerShell
|
|
# configure
|
|
> cmake -S . -B build
|
|
# build
|
|
> cmake --build build -j
|
|
```
|
|
The top-level cmake will automatically build both the client and the server. If you don't want to bother with the server, cd into client directory first.
|
|
|
|
Execute:
|
|
```Powershell
|
|
> .\build\Debug\accordion.exe
|
|
> .\build\Release\accordion.exe
|
|
```
|
|
```bash
|
|
$ ./build/accordion
|
|
```
|
|
|
|
## Configurations
|
|
Configuration files are located in the config directory. They offer options to change the program's settings without recompiling. Eventually I might make a user's guide for the configurations, but there's not too much there right now.
|
|
Configurations also exist for the server, but must involve rebuilding and restarting the docker container (hip hip hooray for CI/CD)
|