Skip to content

Latest commit

 

History

History
170 lines (113 loc) · 5.16 KB

README.md

File metadata and controls

170 lines (113 loc) · 5.16 KB

CS262 Chat Application

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🔥).

Design Documentation Client Documentation Server Documentation Protocol Documentation

Test Suite & Coverage Status

Features

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.

Demo

Open Me! 🎬
giphy1.mp4
giphy.mp4
giphy.1.mp4
giphy.2.mp4
giphy.3.mp4
giphy.4.mp4

Getting Started

Prerequisites

  • Python 3.8+
  • pip (Python package manager)
  • make (build tool)

Quick Start

  1. Clone and install:
git clone https://github.com/yourusername/cs262-chat.git
cd cs262-chat
make install && make install-dev
  1. Start server:
make run-server
  1. Start client

    1. On the same machine as server (new terminal):

      make run-client-gui
    2. 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.

Documentation Structure

Our documentation is organized for easy navigation:

Note

Engineering Notebook For our other documents, especially engineering notebooks, see the notebook.md file and the Issues Page

Testing Coverage

Our test suite coverage report can be found by clicking on the badge below:

Test Suite & Coverage Status

Also, you can run the test suite locally with:

make test

Project Structure

image

.
├── Makefile
├── design/
├── src/
│   ├── client/         # Client-side & UI implementation
│   │   ├── components
│   │   └── pages
│   ├── protocol/       # Protocol definitions and handlers
│   └── server/         # Server-side implementation
└── tests
    ├── client
    ├── protocol
    └── server

Development

Code Style

  • Follows PEP 8 guidelines
  • Auto-formatting available:
make fix-style

Tip

For other development make commands, simply run make to see the available options.