Skip to content

amaraoussama94/Server_Client-C-app_GUI

Repository files navigation

🧠 Modular Client-Server System

A cross-platform C/C++ client-server architecture supporting chat, file transfer, and game features. Designed for maintainability, onboarding, and robust error handling.

📁 Project Structure

project-root/ ├── include/ # Header files │ ├── chat.h │ ├── client_registry.h │ ├── client.h │ ├── config.h │ ├── connection.h │ ├── crc.h │ ├── dispatcher.h │ ├── file_transfer.h │ ├── game.h │ ├── logger.h │ ├── platform-thread.h │ ├── platform.h │ ├── protocol.h │ └──server.h ├── src/ │ ├── server/ │ │ ├── main.c │ │ ├── dispatcher.c │ │ ├── connection.c │ │ ├── client_registry.c │ ├── client/ │ │ ├── main.c │ ├── protocol/ │ │ ├── protocol.c │ │ ├── parser.c │ ├── features/ │ │ ├── file_transfer.c │ │ ├── chat.c │ │ ├── game.c │ ├── utils/ │ │ ├── logger.c │ │ ├── platform.c │ │ ├── platform_thread.c │ │ ├── crc.c │ │ ├── config.c │ ├── client_gui/ # New GUI client (PyQt5) │ │ ├── ... #see GUI Readme ├── assets/ # Shared files ├── scripts/ # Bash & PowerShell scripts ├── Makefile # Build automation └── README.md # Project roadmap 

🚀 Getting Started

Prerequisites

  • GCC or Clang (Unix) / MinGW or MSVC (Windows)
  • make utility
  • PowerShell (Windows) or Bash (Unix)

Build

./scripts/build.sh # Unix ./scripts/build.ps1 # Windows

Run

./scripts/run_server.sh assets/server.cfg ./scripts/run_client.sh assets/client_chat.cfg # or client_file.cfg / client_game.cfg 

🛠 Features

| Feature | Description | |----------------|-----------------------------------------------------------------------------| | 💬 Chat | Real-time message exchange between client and server | | 📁 File Transfer | Request and receive files from the server | | 🎮 Game Logic | Command-based game interactions (stubbed for future expansion) | | 📦 Protocol | Encodes, decodes, and parses structured messages | | 🧩 Modular Design| Each feature lives in its own module for clarity and maintainability | | 📝 Logging | Configurable logging system with levels: DEBUG, INFO, WARN, ERROR | | ⚙️ Config Loader | Reads host/port settings from external config files | | 🌍 Cross-Platform| Compatible with Windows and Unix-like systems | | 🚀 Scripts | Bash and PowerShell scripts for build/run automation | | 🧾 Client Registry | Assigns IDs, tracks activity, handles timeouts and disconnections | | 🧵 Threading | Unified thread creation and detachment across Windows and POSIX | 

🧠 Modular Client-Server Protocol

This system now supports multi-port routing and feature-specific client connections, enabling scalable and modular communication.

🔀 Protocol Overview

Each command follows a structured format:

 <CRC>|<CHANNEL>|<SRC_ID>|<DEST_ID>|<MESSAGE>|<STATUS>|SEQ|END 
  • CRC → Integrity checksum for the MESSAGE field

  • CHANNEL → Feature type: chat, file, game, or system

  • SRC_ID → Sender ID (0 = server)

  • DEST_ID → Receiver ID (0 = server)

  • MESSAGE → Actual content (chat text, file path, game command, or control message)

  • STATUS → Frame status:

    • WAIT → Receiver should prepare for incoming data

    • READY → Receiver is ready to receive

    • DONE → Transfer complete

    • ACK → Acknowledgment of receipt

    • LIST → Server sends list of active clients

    • ID_ASSIGN → Server assigns client ID

    • ERR → Error or rejection

🧠 Notes

The protocol is feature-aware: each port (chat, file, game) enforces its own logic.

Client IDs are assigned by the server and used for routing.

Future versions may replace IDs with names and support multi-frame transfers.

The STATUS field replaces the static EOC marker, enabling richer delivery semantics.

🧩 Multi-Port Architecture

The server listens on dedicated ports for each feature:

| Port | Feature | Description | ----------------------------------------------------------------- | 8081 | 💬 Chat | Real-time message exchange | | 8082 | 📁 File | Transfer	File request and delivery | | 8083 | 🎮 Game | Logic	Game command handling (stubbed) | 

Clients connect to the appropriate port based on their mode, ensuring clean separation and simplified routing.

🧠 Client Modes

Clients specify their mode via config or CLI:

 ./client <config_path> 

Supported modes:

  • msg → Chat

  • file → File transfer

  • game → Game logic (TBD)

🛡️ Benefits

  • 🔄 Scalable: Easily add new features with dedicated ports

  • 🧼 Maintainable: Each feature lives in its own module

  • 🧪 Testable: Simulate feature-specific clients independently

  • 🧠 Intuitive: Clear protocol structure for contributors

📚 Documentation

All modules are documented using Doxygen-style comments. Run doxygen to generate HTML docs if configured.

🤝 Contributing

Follow modular design principles

Document new features with usage examples

Keep onboarding simple and intuitive

About

its Server_Client-C-app with gui for client

Resources

License

Stars

Watchers

Forks

Packages

No packages published