ShitChat

ShitChat: a multithreaded client-server based chat application. Literal translation of the swedish word "skitsnack".

View the Project on GitHub Zolomon/ShitChat

Welcome to ShitChat :shit:

ShitChat

ShitChat is a cross-platform multithreaded multiuser client-server chat using functional style programming while adhering to the reactive manifesto to the best of its capabilities. *cough cough*

ShitChat was written by: @HannaBjorgvins :neckbeard:, @3amice :moneybag::penguin::tophat::smiley_cat:, @RobinSeibold :dolphin::whale2::camel:, @Zolomon :coffee::feelsgood::squirrel::doughnut:.

Features

How to install?

Dependencies
$ git clone https://github.com/Zolomon/ShitChat.git
$ gradle uberjar_server # to build the server
$ gradle uberjar_client # to build the client
$ java -jar build/libs/server.jar 8888 # run server on port 8888
$ java -jar build/libs/client.jar 192.168.0.150 8888 # connect client to server on 192.168.0.150 on port 8888.

Start :shit: chatting!

Available commands:

Design

ShitChat consists of two parts. One server, and one client. They communicate via a text-based protocol over TCP. Each connection is handled separately on its own thread, and full duplex communication is enabled due to two extra threads created to handle input and output respectively for each connection.

Evaluation

A list of potential features was created early on in the beginning of the project. Most of these features did not end up in the end product. Architecting the protocol was an interesting and fun task. The decision was made to use a text-based protocol over a binary protocol, or a third-party serialization library like Google's Protobufs.