Project 1: Collaborative Text Editor
A collaborative text editor enables several users to share a text file and edit it. The file can be modified simultaneously by different users and the changes can be seen by other users simultaneously when one user applies a modification. An efficient implementation of such software should address coherency, file management, networking, and concurrency.
In this project, you are going to design and implement a simple version of a collaborative text editor. Your design should provide the basic functionalities of a text editor, handle concurrent accesses by multiple users over the network, and use a simple communication protocol between clients and the server.
To this end, you can follow the next steps:
- Implement a text editor that supports the following basic operations:
- Basic edition: write and modify text
- Basic file management: open, create, save files
- Edition should be interactive, but you can use the interact of your choice: TUI (Terminal User Interface) like
ncurses
, or a GUI (Graphical User Interface) likeGTK
.
- Implement a collaborative text server accessible through the network that supports the following features:
- Store files on the server side
- Allow clients to connect and open files on the server
- Allow clients to retrieve a list of available files (an equivalent to
ls
ortree
) - Allow clients to simultaneously edit files and merge conflicting modifications. We do not necessarily expect a very sophisticated merging strategy (e.g., Google Docs level), but you should be able to explain your choices.
General Rules
- The project is due on the 09.01.2025 (hard deadline).
- You will present your code in the class, so attendance is mandatory on presentation day. We might assign each group a specific time-slot, in which case you are expected to be in class at the specified time-slot.
- The projects should be implemented in C.
- The evaluation is not All-or-Nothing, so start with simple steps.
- Both members of the groups are required to present the code
- You are (obviously) allowed to implement more features, but you should prioritize the features we ask for!
Tips
- You are allowed to use publicly available libraries, but, you need to explain why you used them.
- You should consider error checking and catching exceptions in your design. This is particularly important with multi-threaded and distributed applications!
- Implement tests that cover all the features you implement: retrieving available files, file operations, communication over network, concurrent file accesses, etc.