A client-server messaging application built with C# following the Track C# challenge requirements.
Click the thumbnail to watch the full recording on YouTube
- 📄 Requirements (PDF) https://drive.google.com/file/d/1ECF39wgpzELF99qkLj-PR783fdjt4E12/view?usp=sharing
| Server (left) · Client log (right) |
|---|
![]() |
| Server log console + launched client |
|---|
![]() |
uchat_server/- Server application (console)uchat/- Client application (UWP with Windows 7/XP/Vista style design)
- Concurrent server architecture
- SQLite database for persistent chat history
- User authentication (login/register)
- Password hashing (SHA256)
- Real-time message broadcasting
- Message editing and deletion
- Process ID display
- Daemon-like operation
- Windows UWP application
- Windows 7/XP/Vista style translucent, watery interface
- WhatsApp-like chat design
- User authentication
- Real-time messaging
- Message editing (own messages only)
- Message deletion (own messages only)
- Automatic reconnection on connection loss
- Chat history loading
- Connection status indicator
The application follows a 3-tier architecture:
- Presentation Layer: UWP client UI
- Business Logic Layer: Protocol handling, authentication
- Data Layer: SQLite database
- Password hashing using SHA256
- Secure socket communication
- User authentication required
✅ Server takes port as argument, displays usage if missing ✅ Server displays process ID at startup ✅ Server runs as daemon ✅ Concurrent server supporting multiple clients ✅ SQLite database for persistent chat history ✅ Client takes server IP and port as arguments ✅ Basic authentication (username/password) ✅ Message editing and deletion ✅ Reconnection handling ✅ Proper resource management ✅ C# naming conventions ✅ Builds in less than 30 seconds
The client features a translucent, watery interface inspired by Windows 7/XP/Vista design:
- Glass-like panels with transparency
- Watery blue color scheme
- Smooth gradients
- WhatsApp-like chat bubbles
- Modern yet nostalgic aesthetic
- .NET 8 SDK
- Windows App SDK Runtime (for the client)
Next are steps after project was built. The server requires a port as a command-line argument.
# Navigate to the server build directory
cd uchat_server/bin/Release/net8.0/
# Run with a specific port (e.g., 1337)
.\uchat_server.exe 1337# Navigate to the client build directory
cd uchat/bin/x64/Release/net8.0-windows10.0.22000.0
# Run connecting to localhost
.\uchat.exe 127.0.0.1 1337
# OR run connecting to a remote server
.\uchat.exe 192.168.0.105 1337

