A session is a virtual meeting that takes place between two or more people using Saros. It is started and ended at will by the host; others can join upon invitation and leave at will. Within a session, users can do a number of things:
Share a project (this is currently the required way to initiate a session, but in theory Saros can easily be adapted in future to begin "empty" sessions)
Chat using an instant messenger
The functionality for the session is distributed throughout the packages project and communication (muc for multi-user chat).
The core functionality for maintaining both the session and the shared project(s) are kept in the project package. (TODO: this ought to be refactored to separate the former synonymy in projects and shared sessions.)
A session takes care about the user's state within a session (e.g. write/read-only access or adds/removes a user). The SarosSessionManager handles the initiation of a Saros session (including starting, stopping and joining) and the invitation to this session.
The shared project stores the state of a project shared in a Saros session (e.g. project open) and its resources (e.g. files, folders, projects, and the version control system if the VCS support is enabled for the session). For identifying shared projects across the network, project IDs are used in the SarosProjectMapper class. This is necessary especially when the local names of a shared project are different at the user's workspaces.
The SharedResourcesManager is responsible for handling all resource changes that aren't handled by the EditorManager of the Eclipse Bridge. It creates and executes files, folders, and VCS activities.
The functionality of the Multi-User Chat is located in the communication.muc package.
In a multi-user text chat the users can exchange text messages in a chatroom. Therefore the XMPP protocol extension Multi-User Chat (MUC) is used. When a Saros session is started a Multi-User Chat is initiated as well. As long as the chat is active the history of all events that occur to this chat session (e.g. incoming messages) are stored and transmitted to all users joining this chat.
The MUCManager manages the creation and destruction of a Multi-User Chat session. The host creates/destroys a MUCSession while other users join/leave that MUCSession based on the preferences (roomName, password, and service, the host name at which the multi-user chat is running).