Squirrel Communicator is a software project designed to deliver high-performance communication capabilities, leveraging C++ and complementary tools for modular design, efficient communication, and ease of deployment.
The application currently supports both REST API (using the CROWCPP library) and WebSocket communication (powered by uWebSockets) to provide stable and fastest available communication.
You can explore a live working example of this project at: http://comm.sqrll.net/.
Squirrel Communicator offers the following features:
- Real-time chat functionality: Seamlessly send and receive messages between users in real time.
- Login and Registration: Secure user authentication and onboarding.
- User search: Easily locate and select other users to create new chats.
- User status display: See the online or offline status of other users.
- Typing indicator: View when other users are actively typing messages in real time.
- Automatic message loading: Messages are automatically loaded when scrolling to the top of the chat history.
- C++: The core of the project is written in C++ to ensure high performance and efficient execution of critical functionalities.
- CROWCPP: Provides the REST API functionality for user authentication, chat management, and data retrieval.
- uWebSockets: Enables real-time event-driven WebSocket communication for the chat application.
- CMake: Simplifies the build process and allows configuration for multiple platforms.
- Docker: Allows containerized setup and deployment in a consistent environment.
- Build Scripts: Preconfigured build scripts for Windows and Linux are available in the
configsrvdirectory.
You will need the following tools to build and run the project:
- A C++ compiler (e.g.,
g++orclang). - CMake (version 3.10 or higher).
- (optional) Docker (for running the application in a containerized environment).
-
Clone the repository:
git clone https://github.com/Przemek2122/SquirrelCommunicator.git cd SquirrelCommunicator -
Download submodules First download
-
Use Build Scripts (Optional): If you're on Windows or Linux, you can use the pre-configured build scripts from the
buildsrvdirectory:- For Windows, execute the
.batfile in thebuildsrvdirectory. - For Linux, execute the
.shfile in thebuildsrvdirectory:./buildsrv/build-linux.sh
- For Windows, execute the
-
Manual Build: If you'd like to build the project manually:
- Change to the
ProjectServerdirectory where the build files are located:cd ProjectServer - Create a build directory:
mkdir build cd build - Use CMake to configure and compile:
cmake .. make
The compiled binaries will appear in the
ProjectServer/builddirectory. - Change to the
The project provides Docker support for simplified setup and consistent application environments.
Two scripts are available in the repository under the docker directory to simplify Docker operations:
build_docker.sh: Builds a Docker image using the default cache layer.build_docker_clean.sh: Builds the Docker image without using the cache (forcing a clean build).
-
Use the
build_docker.shscript to build the Docker image:cd docker chmod +x build_docker.sh ./build_docker.shThis will build the Docker image with the tag
squirrelcommunicator:latest. -
Alternatively, use the
build_docker_clean.shscript for a fresh build:chmod +x build_docker_clean.sh ./build_docker_clean.sh
-
Run the Docker container:
docker run --rm -it squirrelcommunicator:latest
Using these predefined scripts ensures that Docker images are built properly without manually typing long commands.
- Platform-Specific Utilities:
- The repository includes Shell scripts for UNIX/Linux and Batch files for Windows. Ensure you use the appropriate one for your platform.
- Documentation:
- Some features and modules may require further documentation.
- Experimental Features:
- Certain areas of the codebase may be under development or require testing in production-like environments.
Contributions are welcome! Here’s how you can contribute:
- Fork the repository and create a feature branch.
- Make your changes and add commits.
- Open a pull request to propose your changes.
For any usage or distribution inquiries, please contact the repository owner, Przemek2122.
The repository is maintained by Przemek2122. Feedback, ideas, and collaboration are warmly invited.