Skip to content

0x6f652E/system-programming-chat

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Multi-Room Chat System · C&C


English Overview

Project Snapshot

  • Course: System Programming (Operating Systems focus)
  • Tech Stack: C (POSIX sockets, pthreads), TCP/IP, semaphores, ANSI terminal controls
  • Scope: Multi-room chat server + interactive terminal client with queued file transfers
  • Why It Matters: Demonstrates low-level concurrency control, resource cleanup, and resilient client UX.

Repository Layout

.
├── README.md                # Bilingual project overview and runbook
├── LICENSE                  # MIT License · customize if needed
├── .gitignore               # Keeps binaries/logs out of version control
├── Makefile                 # One-command build targets for client & server
├── client/
│   ├── client.c             # Terminal UI, command parser, signal handling
│   └── client.h             # Shared limits, prototypes, global state
├── server/
│   ├── server.c             # Core server logic, room management, file queue
│   └── server.h             # Public API, structures, constants
└── example_log.txt          # Captured session proving end-to-end features

Key Features

  • Concurrent Connections: Up to 50 clients managed safely via mutex-protected arrays.
  • Dynamic Chat Rooms: Auto-create, auto-clean, enforce 15-user capacity, retain recent members.
  • Robust Messaging: Broadcast and whisper flows with defensive error reporting + logs.
  • File Transfer Queue: Semaphore-throttled uploads, typed/size validation, conflict-aware renaming.
  • Graceful Shutdown: SIGINT/SIGTERM handler broadcasts shutdown and deallocates all resources.
  • Client UX: Colored server prompts, inline help, strict command syntax, Ctrl+C cleanup.
  • Observability: Rich chat_server.log entries (connect, command, file lifecycle, errors).

Build Instructions

make        # builds chatserver and chatclient using GCC/Clang
make clean  # removes binaries, *.o, logs, temp files

Runbook

  1. Launch server

    ./chatserver 5001
  2. Launch each client (new terminal/tab)

    ./chatclient 127.0.0.1 5001
  3. Choose username: 1–15 alphanumeric characters → sent to the server at login.

  4. Use commands (slash-prefixed):

    Command Purpose
    /join <room> Join or create a room (alphanumeric, max 32 chars).
    /leave Leave the current room; empty rooms auto-delete.
    /broadcast <msg> Message everyone in the active room.
    /whisper <user> <msg> Direct message any online user.
    /sendfile <path> <user> Queue file ≤3 MB (txt/pdf/jpg/png).
    /help Show client command reference.
    /exit Gracefully disconnect.
  5. Inspect logs: chat_server.log and example_log.txt showcase real sessions.


Türkçe Genel Bakış

Proje Özeti

  • Ders: Sistem Programlama (İşletim Sistemleri odaklı)
  • Teknolojiler: C (POSIX soketleri, pthreads), TCP/IP, semaforler, ANSI terminal kumandaları
  • Kapsam: Sıra-kuyruklu dosya transferine sahip çok odalı sohbet sunucusu + terminal istemcisi
  • Önemi: Düşük seviye eşzamanlılık yönetimi, kaynak temizliği ve dayanıklı istemci deneyimini gösterir.

Depo Yapısı

.
├── README.md                # Cift dilli tanitim ve kullanim dokumani
├── LICENSE                  # MIT Lisansi · gerekirse kendinize gore duzenleyin
├── .gitignore               # Ikili dosyalari ve loglari git disinda tutar
├── Makefile                 # Tek komutla istemci ve sunucu derlemesi
├── client/
│   ├── client.c             # Terminal arayuzu, komut ayrisimi, sinyal yakalama
│   └── client.h             # Ortak sabitler ve fonksiyon bildirimleri
├── server/
│   ├── server.c             # Sunucu mantigi, oda yonetimi, dosya kuyrugu
│   └── server.h             # Veri yapilari ve genel API
└── example_log.txt          # Tum ozellikleri gosteren kayitli oturum

Temel Özellikler

  • Eşzamanlı Bağlantılar: Mutex korumalı dizilerle 50 müşteriyi aynı anda yönetir.
  • Dinamik Sohbet Odaları: Anında oluşur, boşalınca silinir, oda başına 15 kullanıcı sınırı vardır.
  • Güçlü Mesajlaşma: Yayın/özel mesaj komutları ayrıntılı hata raporlaması ve loglarla desteklenir.
  • Dosya Transfer Kuyruğu: Semafor tabanlı yükleme limiti, uzantı/boyut denetimi, isim çakışma çözümü.
  • Zarif Kapanış: SIGINT/SIGTERM geldiğinde tüm kullanıcılara duyuru yapar ve kaynakları temizler.
  • İstemci Deneyimi: Renkli sunucu mesajları, satır içi yardım, katı komut söz dizimi, Ctrl+C çıkışı.
  • İzlenebilirlik: chat_server.log tüm bağlantı, komut ve dosya hareketlerini kaydeder.

Derleme Adımları

make        # chatserver ve chatclient ikililerini olusturur
make clean  # ikilileri, *.o dosyalarini ve loglari siler

Çalıştırma Rehberi

  1. Sunucuyu başlat

    ./chatserver 5001
  2. Her istemci için yeni terminal aç

    ./chatclient 127.0.0.1 5001
  3. Kullanıcı adı seç: 1–15 karakter, sadece harf/sayı.

  4. Komutlar:

    Komut Açıklama
    /join <oda> Odaya girer veya yeni oda açar (alfa-nümerik, azami 32).
    /leave Bulunduğun odadan ayrılır, oda boşsa otomatik silinir.
    /broadcast <mesaj> Odadaki herkese mesaj gönderir.
    /whisper <kullanıcı> <mesaj> Belirli bir kullanıcıya özel mesaj atar.
    /sendfile <dosya> <kullanıcı> 3 MB altındaki txt/pdf/jpg/png dosyalarını kuyruğa ekler.
    /help Komut listesini gösterir.
    /exit Sistemden güvenli çıkış yapar.
  5. Kayıtları incele: chat_server.log ve example_log.txt gerçek oturum çıktılarını içerir.


Maintainer / Geliştirici

Oguzhan Erdem Tekel · GitHub

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published