- Activity Providers/Registry
The Session Management internally has a Registry that manages registered Activity Providers.
Activity Providers are a special part of the User Interface. They are the responsible for transforming actions of the local user into Activities that can then be sent to remote users. They are also responsible for executing remote Activities at the local Saros-instance. Every Activity Provider is responsible for a certain type of Activities. Whenever a registered Activity Provider creates a new Activity the Registry gets informed about this and passes it to the Activity Handling.
The Registry also informs all registered Activity Providers whenever an incoming Activity has to be executed locally. Every Activity Provider is himself responsible for knowing which Activities he has to execute and which he has to ignore.
The Registry is essentially a List in the ISarosSession . Activity Providers have to register at the ISarosSession which then functions as the Registry.
- Activity Handling
This is the main component of the Session Management. It basically functions as a coordinator between the other components. It gets new Activities from the Registry, calls the Concurrency Management if needed, determines receivers for this Activity, and sends the result to the Activity Sequencer or the other way around for incoming Activities.
The main entrance points of the Activity Handling are the ISarosSession for local Activities and the ActivityHandler for incoming Activities.
- Concurrency Management
The Concurrency Management is responsible for keeping concurrent documents consistent. Saros uses the Jupiter architecture (often misleadingly called Jupiter algorithm) to accomplish this. This includes the transformation ("operational transformation", OT) of some Activities, most importantly the TextEditActivities that represent modifications of shared documents.
The main entrance points of this component are the ConcurrentDocumentServer for the Server and the ConcurrentDocumentClient for the Clients.
- Activity Sequencer
The Activity Sequencer is responsible for ordering outgoing and incoming Activities to ensure that no Activities are lost. The Activity Sequencer is registered as a PacketListener at the Network Layer and informs the Activity Handling about incoming Activities as well as forwarding outgoing Activities to the Network Layer.
The main entrance point of this component is the ActivitySequencer.