@startuml
autonumber
participant ApplicationManager
participant RialtoServerManager
ApplicationManager -> RialtoServerManager: ChangeApplicationStatechangeSessionServerState(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(socket)
RialtoServerManager -> RialtoServerManager: Start [1] second READY timer
RialtoServerManager --> ApplicationManager: OK/ERROR
RialtoApplicationSessionServer -> RialtoApplicationSessionServer: Set current_state = Uninitiliased
alt RialtoApplicationSessionServer started successfully
RialtoApplicationSessionServer -// RialtoServerManager: StateChanged(AppState::Uninitialised)
RialtoServerManager -> RialtoServerManager: Cancel READY timer
RialtoServerManager -// ApplicationManager: StateChanged(application_id, AppState::Uninitialised)
RialtoServerManager -> RialtoApplicationSessionServer: SetConfiguration(session_management_socket_name, AppState::Inactive, resources, log_level)
note right
"resources" structure will specify the maximum decoder resources that the
application is permitted to use. For now it shall have a max_playback_sessions
property and a supports_web_audio flag. This may be enhanced for things like
HD/UHD, audio only etc in future.
end note
RialtoApplicationSessionServer --> RialtoServerManager:
RialtoApplicationSessionServer -> RialtoApplicationSessionServer: Create listening socket & bind to session_management_socket_name
alt State transition successful
RialtoApplicationSessionServer -> RialtoApplicationSessionServer: Set current_state = Inactive
RialtoApplicationSessionServer -// RialtoServerManager: StateChanged(AppState::Inactive)
RialtoServerManager -// ApplicationManager: StateChanged(application_id, AppState::Inactive)
ApplicationManager -> RialtoServerManager: GetAppConnectionInfo()
RialtoServerManager --> ApplicationManager: session_management_socket_name
else State transition failed
RialtoApplicationSessionServer -> RialtoApplicationSessionServer: Unbind/free session management socket (if created)
RialtoApplicationSessionServer -// RialtoServerManager: StateChanged(AppState::Error)
RialtoServerManager -// ApplicationManager: StateChanged(application_id, AppState::Error)
RialtoApplicationSessionServer -> RialtoApplicationSessionServer !!: Exit process
end
else Session Server initialisation failed
RialtoApplicationSessionServer -> RialtoApplicationSessionServer: Unbind/free session management socket (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 |