Courier

Overview
Courier is a desktop application written in Python and Qt for data transfer between machines connected to the same network. The connection uses WebSockets to send text and binary data.WebSockets is a web technology providing full-duplex communications channels over a single TCP connection. The WebSocket protocol was standardized by the IETF as RFC 6455 in 2011.
Application Flow

The whole process begins at the server application, the server searches for an incoming connection, waiting for a client to connect. Once a client is connected, it is handled in another thread called the client thread. While repeating the process in the main thread, the server handles the client thread in the background. Login password is collected from the handled client, which is used to initialize the handshake process. If the handshake is unsuccessful, the client is purges off the network, ending the thread. If the handshake is successful, (password is correct), a client profile is created on the server. This allows other clients to identify the specific client, enabling direct messaging and file transfer from one client to another.
When a client sends a message it is bundled with meta-data that tells which client the message is coming from, what client the message is sent to and also some extra information. The message is sent to the server, which is then parsed in the server application. The server identified the receiver client address, and then sends the message.
For binary data, the server helps initialize a direct client-server relationship between the clients. which enables faster file transfer without data passing through a middle man.
The User interface

The application is designed as a single screen application with 3 split sections. The first section contains the contact list for easy handling of contact profiles. Contact profiles are structured data in the server application that holds details about connected client applications. This detail is sent by a single client application to the server, which is then shared to other client applications for profile update. The second section contains the main functionality, the chat space for sending messages and files. The third section is used to manage multiple view like settings, user profile, and menu. For ease of user & wide area on the second section, the third section is design to be closable.
Python & Qt Qml

Python is known for its ease of use & its role in fast development time. Thankfully, Qt's binging for python makes building this application in record time possible. Qt's QtQuick UI technology makes it very easy to create modern interfaces, hence, being a very good choice for the project.