@startuml autonumber participant ApplicationManager participant RialtoServerManager ApplicationManager -> RialtoServerManager: ChangeApplicationState(application_id, AppState::Inactive) RialtoServerManager -> RialtoServerManager: Generate unique session_management_socket_name for App to Rialto Session Server communication RialtoServerManager -> RialtoServerManager: Generate socketpair for Rialto Session Server to Server Manager communication RialtoServerManager -> RialtoApplicationSessionServer **: Spawn(session_management_socket_name, AppState::Inactive) RialtoServerManager -> RialtoServerManager: Start [1] second READY timer RialtoServerManager --> ApplicationManager: OK/ERROR RialtoApplicationSessionServer -> RialtoApplicationSessionServer: Allocate shared memory buffer RialtoApplicationSessionServer -> RialtoApplicationSessionServer: Create listening socket & bind to session_management_socket_name RialtoApplicationSessionServer -> RialtoApplicationSessionServer: Set current_state = Inactive alt Previous steps succeeded (alloc shm, create socket, Connect) RialtoApplicationSessionServer -// RialtoServerManager: StateChanged(AppState::Inactive) RialtoServerManager -> RialtoServerManager: Cancel READY timer RialtoServerManager -// ApplicationManager: StateChanged(application_id, AppState::Inactive) ApplicationManager -> RialtoServerManager: GetAppConnectionInfo() RialtoServerManager --> ApplicationManager: session_management_socket_name else Session Server initialisation failed RialtoApplicationSessionServer -> RialtoApplicationSessionServer: Close IPC connection with app RialtoApplicationSessionServer -> RialtoApplicationSessionServer: Close listening socket (if created) RialtoApplicationSessionServer -> RialtoApplicationSessionServer: Unmap shared memory (if created) RialtoApplicationSessionServer -// RialtoServerManager: StateChanged(AppState::Error) RialtoServerManager -> RialtoServerManager: Cancel READY timer RialtoApplicationSessionServer -> RialtoApplicationSessionServer !!: Exit process RialtoServerManager -// ApplicationManager: StateChanged(application_id, AppState::Error) else READY timer expired RialtoServerManager -> RialtoServerManager: Kill spawned Rialto Application Session Server process RialtoServerManager -// ApplicationManager: StateChanged(application_id, AppState::Error) end @enduml |
3. socketpair is used to create the point-to-point IPC channel used for all Rialto Server Manager to Rialto Application Session Server communications
7/8. Session server creates the share memory region and listening socket that the app will use for sending AV data and control respectively.
10. Application Session Server sends first message so Server Manager knows that it is now up and running
13/14. Session Manager has an API to allow the Application Manager to get the socket name that the App will use for communication with Rialto which it should fetch as soon as it is notified that Rialto has moved the app out of the Not Running state so that it can be passed to the app/container when it is launched.
@startuml autonumber participant ApplicationManager participant RialtoServerManager ApplicationManager -> RialtoServerManager: ChangeApplicationState(application_id, AppState::Active) RialtoServerManager -> RialtoApplicationSessionServer: SetState(AppState::Active) RialtoApplicationSessionServer --> RialtoServerManager: OK/ERROR RialtoServerManager --> ApplicationManager: OK/ERROR RialtoApplicationSessionServer -> RialtoApplicationSessionServer: Set current_state = Active RialtoApplicationSessionServer -// RialtoServerManager: StateChanged(AppState::Active) RialtoServerManager -// ApplicationManager: StateChanged(application_id, AppState::Active) @enduml |
2. RialtoServer manager will need to look up which RialtoApplicationSessionServer to which to send the notification
Same sequence as Not Running→Inactive but change target state to Active.
@startuml autonumber participant ApplicationManager participant RialtoServerManager participant RialtoApplicationSessionServer ApplicationManager -> RialtoServerManager: ChangeApplicationState(application_id, AppState::Inactive) RialtoServerManager -> RialtoApplicationSessionServer: SetState(AppState::Inactive) RialtoApplicationSessionServer --> RialtoServerManager: OK/ERROR RialtoServerManager --> ApplicationManager: OK/ERROR RialtoApplicationSessionServer -> RialtoApplicationSessionServer: Free any remaining CDM resources RialtoApplicationSessionServer -> RialtoApplicationSessionServer: Free any remaining Player resources RialtoApplicationSessionServer -> RialtoApplicationSessionServer: Set current_state = Inactive RialtoApplicationSessionServer -// RialtoServerManager: StateChanged(AppState::Inactive) RialtoServerManager -// ApplicationManager: StateChanged(application_id, AppState::Inactive) @enduml |
6. Free any Player resources means close any open GStreamer pipelines, for example those used for AV playback and/or UI audio.
@startuml autonumber participant ApplicationManager participant RialtoServerManager participant RialtoApplicationSessionServer ApplicationManager -> RialtoServerManager: ChangeApplicationState(application_id, AppState::NotRunning) RialtoServerManager -> RialtoApplicationSessionServer: SetState(AppState::NotRunning) RialtoApplicationSessionServer -> RialtoApplicationSessionServer: Close IPC connection with app RialtoApplicationSessionServer -> RialtoApplicationSessionServer: Unmap shared memory RialtoApplicationSessionServer -> RialtoApplicationSessionServer: Set current_state = NotRunning RialtoApplicationSessionServer -// RialtoServerManager: StateChanged(AppState::NotRunning) RialtoApplicationSessionServer -> RialtoApplicationSessionServer !!: Exit process RialtoServerManager -// ApplicationManager: StateChanged(application_id, AppState::NotRunning) @enduml |
7. The Session Server process should self terminate once it has sent the NotRunning notification to the Server Manager.
Not shown for brevity, but should perform all of the cleanup operations in Rialto Sessions server shown in Active→Inactive & Inactive->Not Running.