|
1 |
| -# Distributed-Students-Chat |
| 1 | +# Distributed-University-Chatroom-Platform |
| 2 | + |
| 3 | +       |
| 4 | + |
| 5 | +University project for **Distributed Systems and Middleware Technologies** course (MSc Computer Engineering at University of Pisa, A.Y. 2022-23) |
| 6 | + |
| 7 | +**Student University Platform** is a **distributed web-app** aimed at providing various functionalities to students and professors, which are: |
| 8 | +- provide **chatroom functionality** among students where they can share opinions and suggestions |
| 9 | +- allow **booking** and managing of meetings |
| 10 | + |
| 11 | +Both students and professors have a dedicated page where they can view scheduled meetings and cancel them. |
| 12 | +Within the course page, on the other hand, it is possible to access the dedicated chatroom or look at the list of available slots and choose the meeting |
| 13 | +to reserve. |
| 14 | + |
| 15 | +# System Architecture |
| 16 | + |
| 17 | + |
| 18 | + |
| 19 | +The web application, as we can see in figure, consists of a **Client Application**, a **Jakarta Application Server**, and **multiple Erlang Servers**. |
| 20 | +- The **Jakarta EE** Application Server, which implements most of the functionality of the application, uses as its reference implementation, **Glassfish 6.2.5** and also communicates with a **MySql relational database** located on a different machine. |
| 21 | +- The **Erlang** Servers handle the Chatrooms of the application through an **HTTP websocket communication**. They are managed by a **Load Balancer** and configured by a **Master Node** and both are on another machine. We chose **Nginx** for the Load Balancer since it natively supports the WebSocket protocol both as **reverse proxy** and **load balancer**. |
| 22 | +- the client application was implemented using the combination of **html**, **css** and **javascript** |
| 23 | + |
| 24 | +# Synchronization and communication |
| 25 | + |
| 26 | +- Multiple clients **exchange messages** with each other in chat rooms **concurrently**. The chat of each client node must be synchronized. |
| 27 | +- When a **student enters or leave** the chatroom each client **node must be synchronized** in order to see a consistent list of students within the chat (i.e. ”online students”). |
| 28 | +- When a student **books a meeting** in an available time slot or remove a previously booked meeting, each client **node must be synchronized to view the same consistent state** (both for students and professors). |
| 29 | +- When a professor creates or delete a course, the server must show the course to all the connected client in the ”browse”, ”search” sections and, in case of deletion, inside the course page. |
| 30 | + |
| 31 | +# Structure of the repository |
| 32 | + |
| 33 | +``` |
| 34 | +Distributed-University-Chatroom-Platform |
| 35 | +| |
| 36 | +├── erlang-server |
| 37 | +│ ├── chat_server |
| 38 | +│ ├── master_node |
| 39 | +│ └── nginx |
| 40 | +| |
| 41 | +├── glassfish-server |
| 42 | +│ ├── ejb |
| 43 | +│ │ └── src |
| 44 | +│ | ├── dao |
| 45 | +| | └── ejb |
| 46 | +│ ├── ejb-interfaces |
| 47 | +│ │ └── src |
| 48 | +│ | ├── dto |
| 49 | +│ | ├── enums |
| 50 | +| | └── interfaces |
| 51 | +│ └── web |
| 52 | +│ └── src |
| 53 | +│ ├── java/it/unipi/dsmt/student_platform |
| 54 | +│ | ├── servlets |
| 55 | +| | └── utility |
| 56 | +│ └── webapp |
| 57 | +│ ├── assets |
| 58 | +| | ├── css |
| 59 | +| | ├── javascript |
| 60 | +| | ├── img |
| 61 | +| | └── libs |
| 62 | +| └── WEB-INF |
| 63 | +| └── jsp |
| 64 | +└── mysql-server |
| 65 | +
|
| 66 | +``` |
| 67 | + |
| 68 | +## Authors |
| 69 | +- [Fabrizio Lanzillo](https://github.com/FabrizioLanzillo) |
| 70 | +- [Federico Montini](https://github.com/FedericoMontini98) |
| 71 | +- [Riccardo Sagramoni](https://github.com/RiccardoSagramoni) |
0 commit comments