My Teams - Collaborative Communication Application

March 20, 2023

to

April 23, 2023

Project Description

My Teams is a server and CLI (Command Line Interface) client application, designed as an alternative to collaborative communication platforms like Microsoft Teams. This project embodies my skills in working with TCP sockets, handling JSON data and proficiency in the C programming language.

Key Features

  • Team Management: Users can create, join, and leave teams, facilitating effective collaborative environments.

  • Channel and Thread Creation: Users can create channels within teams and threads within channels, mirroring real-world communication hierarchies.

  • Direct and Group Messaging: Enables personal discussions between users as well as within teams, channels, and threads.

  • Persistent Data: All users, teams, channels, threads, and their associated comments can be saved and restored.

Technical Details

  • C and TCP Sockets: The application is built with the C programming language and uses TCP sockets for network communication. The 'select' system call is used for handling multiple clients.

  • JSON-Based Communication: The communication between the client and the server uses JSON, a lightweight data-interchange format. This makes the data easy to read and write and usable in many programming environments.

  • Custom Protocol: I defined a protocol with a set of commands that allow various actions such as logging in, sending messages, creating teams, channels, threads, and comments. Each server response includes a status code which I defined to describe the success or failure of the request.

Security Considerations

  • The application does not require password authentication.

  • Users not logged in are not able to view connected users.

  • Unsubscribed users are not allowed to create a thread in a team or receive events related to that team.

Contributions

The project was a collaboration with Kevin CARTTIGUEANE, Jules DUTEL, and Dylan WINTER.