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:

  1. 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) like GTK.
  2. 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 or tree)
    • 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.
Back to top