Application runs inside Linux Terminal Emulator to:
- find users on LAN,
- chat with other people on LAN
The tmux terminal multiplexer was used to create program interface.
Application was written with the following assumptions:
- each username is unique per PC's network interface
- each user in the LAN has the same local time on the system
- only one user can run an application per IP address interface
- no centralized server
- no support for IPv6 and TLS
- terminal emulator window resizing is not supported
- ASCII set is the only supported set of characters
- messages are ephemeral, no storage
cmake -B build
cmake --build build --parallel 4
cmake --install build --prefix install
- C++ Multithreading
- CMake
- Google Protocol Buffers
- Google gRPC
- Google Test
- Bash
- Inter-Process Communication (message queue, named pipe, shared memory)
- Docker
- VirtualBox
- Networking
- PlantUML
- Valgrind
- Minitrace
- Spdlog
Use Visual Studio Code (with C/C++ Extension Pack extension) to debug unit tests. Specify -DCMAKE_BUILD_TYPE=Debug to generate trace and log files in /tmp directory on runtime.
Application was tested using:
- Unit tests,
- Integration tests - so called auto tests,
- E2E tests - using up to three docker containers and virtual networks,
- Manual tests - using up to three VMs and virtual networks
- support for other character encodings
- support for IPv6 and TLS
- messages rollback after shutdown based on trusted peer (requires TLS)
- utils unit tests
- engine auto tests
