Welcome to our chat app, a PyQt6-based client with a dark theme UI and a Python server for real-time messaging!
Our application is built with a client-server architecture, supporting multiple clients connecting to the server from different machines. We have implemented two wire protocols: JSON and our custom protocol (SAMIRA🔥).
Our application implements the below functional requirements:
✅ Account Management
- Create account with unique username, nickname, and password
- Log in with existing account
- Delete account
- List/search accounts with wildcard support
✅ Messaging
- Real-time message delivery
- Offline message storage
- Configurable unread message to be delivered at any time
- Message status tracking (number of unread messages)
- Individual and bulk message deletion
✅ Multi-Machine Support
- Tested server-client communication on different machines
- Server accessible from any client on the network
- Tested with two wire protocols: JSON and our custom protocol (SAMIRA🔥)
For more details on features, high-level design, and implementation, see our High-Level Design & Implementation Plan.
Open Me! 🎬
giphy1.mp4
giphy.mp4
giphy.1.mp4
giphy.2.mp4
giphy.3.mp4
giphy.4.mp4
- Python 3.8+
- pip (Python package manager)
- make (build tool)
- Clone and install:
git clone https://github.com/yourusername/cs262-chat.git
cd cs262-chat
make install && make install-dev
- Start server:
make run-server
-
Start client
-
On the same machine as server (new terminal):
make run-client-gui
-
Connecting from a different machine (replace
SERVER_IP
with server's IP):make run-client-gui CLIENT_ID=YOUR_DESIRED_ID SERVER_IP=SERVER_IP
-
Note
SERVER_IP
will be displayed on the machine where the server is running with other server details (e.g. what wire protocol is being used, port, etc.).YOUR_DESIRED_ID
can be any string you want to use as your client ID.
Our documentation is organized for easy navigation:
-
PyQt6-based GUI application covering:
- UI components and pages
- Implements our User journey diagrams
- Client code communication with server
-
- API endpoints
- Database schema
- Server setup code
-
- Wire protocol specifications
- Message format details
- Protocol Implementation (JSON vs Custom)
Note
Engineering Notebook For our other documents, especially engineering notebooks, see the notebook.md file and the Issues Page
Our test suite coverage report can be found by clicking on the badge below:
Also, you can run the test suite locally with:
make test
.
├── Makefile
├── design/
├── src/
│ ├── client/ # Client-side & UI implementation
│ │ ├── components
│ │ └── pages
│ ├── protocol/ # Protocol definitions and handlers
│ └── server/ # Server-side implementation
└── tests
├── client
├── protocol
└── server
- Follows PEP 8 guidelines
- Auto-formatting available:
make fix-style
Tip
For other development make
commands, simply run make
to see the available options.