../

📱 Babel

Table of contents

Repository

Result

Result

Introduction

Project definition

This project was an EPITECH project, the project was defined as followed:

Tech stack

The journey

During this project I wanted to have lots of fun, and on top of the mandatory features, implement other features that to me, should be available on every real-time messaging and voice app.

Regarding the interface I decided to take the Discord interface for idea.

This was the first ever project where I started by working on the frontend, whereas my usual habit would be to work on the backend.

I wanted to have a clearer view of the result I wanted to provide, and also improve my frontend skills.

And actually, starting by working on the frontend was a good choice for two main reasons:

Scenes

Event system

The need for an event system was necessary the following interactions:


descriptionerrorMessage
field_typestring
descriptionempty
field_typeempty
descriptionnewFilter
field_typestring
descriptioncontact
field_typeshared_ptr<Client>
descriptioncontacts
field_typevector<shared_ptr<Client>>
descriptionmessage
field_typeshared_ptr<Message>
descriptionmessages
field_typevector<shared_ptr<Message>>
descriptionclient
field_typeshared_ptr<Client>
descriptionpreviousClientnewClient
field_typeshared_ptr<Client>shared_ptr<Client>
descriptionupdate
field_typeshared_ptr<Client>

Backend architecture

Database system

Transporter:

Every conneted clients on the server has a Transporter, it implements the following functions:

Difficulties

In this project I encountered a major difficulty, which was with the compilation of the project on the linux distribution NixOS, I lost a lot of time.

I also faced another difficulty, that I sadly could not resolve, the audio library in C++ seems like to not work on Linux, therefore I can only compile the client on Windows if I enable the voice call feature…

Protocol system

One of the fundamental point in this project was the protocol system.

It needed to be as flexible and ergonomic as possible.

I implemented a protocol system which I got so proud of that I wrote an article to explain how I proceedeed.

Features

Limitations

Due to the limitations of my architecture, as it wasn’t thought in time, and I didn’t have time to refactor, the history of messages will only stack if the user switches to another conversation.

Future?

If I ever get the chance to work on the project again, I would fix the previously cited limitation, and improve the abstraction, such as:

Instead of the following function: getContacts(string username)

I would instead replace the string to an Username struct/class