Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

PlantUML Macro
formatSVG
@startuml

autonumber

participant ApplicationManager
participant RialtoServerManager

ApplicationManager             ->  RialtoServerManager:               create(state_observer, config)
note right: config allows app manager to specify number of preloaded servers, path to RialtoApplicationSessionServer binary, startup timer and heathcheck interval
loop For num of preloaded server 
RialtoServerManagerref over ApplicationManager, RialtoApplicationSessionServer : [[#RialtoApplicationSessionManagement-NotRunning→Unitialized(serverpreloading) Not Running→Unitialized (server    -> preloading)]] 
end
 RialtoServerManager:            --> ApplicationManager:  Generate socketpair    
@enduml


Rialto App Startup

Rialto Application State Changes

Not Running→Unitialized (server preloading)

PlantUML Macro
formatSVG
@startuml

autonumber

participant RialtoServerManager

RialtoServerManager            ->  RialtoServerManager:               Generate socketpair for Rialto Application Session for Rialto Application Session Server to Server Manager communication
RialtoServerManager            ->  RialtoApplicationSessionServer **: Spawn(server_manager_socket)
note left
Spawn preloaded Application
Session Servers to speed up app launch time.
end note
RialtoServerManager            ->  RialtoServerManager:               Start [startup] second READY timer
RialtoApplicationSessionServer ->  RialtoApplicationSessionServer:    Set current_state = Uninitialised

alt RialtoApplicationSessionServer started successfully

RialtoApplicationSessionServer -// RialtoServerManager:               stateChanged(AppState::Uninitialised)
RialtoServerManager            ->  RialtoServerManager:               Cancel READY timer          

else Session Server initialisation failed

RialtoApplicationSessionServer -// RialtoServerManager:               stateChanged(AppState::Error)
RialtoServerManager            ->  RialtoServerManager:               Cancel READY timer
RialtoApplicationSessionServer ->  RialtoApplicationSessionServer !!: Exit process  

else READY timer expired

RialtoServerManager            ->  RialtoServerManager:               Kill spawned Rialto Application Session Server process      

end
end
 RialtoServerManager            --> ApplicationManager:    

@enduml

Rialto App Startup

Rialto Application State Changes

...

Not Running (no server preloading)/Unitialized (server

...

preloading)→Inactive

PlantUML Macro
formatSVG
titleNot Running to Inactive
@startuml

autonumber

participant ApplicationManager
participant RialtoServerManager

ApplicationManager             ->  RialtoServerManager:               initiateApplication(application_id, AppState::Inactive, app_config)
note right: app_config allows app manager to specify the socket name to use for Rialto client/server session management and the socket name for communication with a display server 
opt session_management_socket_name not specified in app_config
RialtoServerManager            ->  RialtoServerManager:               Generate unique session_management_socket_name for Rialto Client to Rialto Application Session Server communication
end
alt There are no preloaded servers
RialtoServerManager            ->  RialtoServerManager:               Generate socketpair for Rialto Application Session Server to Server Manager communication
RialtoServerManager            ->  RialtoApplicationSessionServer **: Spawn(server_manager_socket)
RialtoServerManager            ->  RialtoServerManager:               Start [startup] second READY timer
RialtoServerManager            --> ApplicationManager:                OK/ERROR
RialtoApplicationSessionServer ->  RialtoApplicationSessionServer:    Set current_state = Uninitialised

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
end

@enduml

Unitialized→Inactive

PlantUML Macro
formatSVG
titleNot Running to Inactive
@startuml

autonumber

participant ApplicationManager
participant RialtoServerManager

ApplicationManager RialtoServerManager            ->  RialtoServerManagerRialtoApplicationSessionServer:               initiateApplication(application_idSetConfiguration(session_management_socket_name, AppState::Inactive, app_configresources, log_level, display_name)
note right: app_config allows app manager to specify the socket name
"resources" structure will specify the maximum decoder resources that the
application is permitted to use for Rialto client/server session management
opt Socket name not specified in app_config
RialtoServerManager            ->  RialtoServerManager:               Generate unique session_management_socket_name for Rialto Client to Rialto Application Session Server communication
end
RialtoServerManager            ->  RialtoServerManager:               Generate socketpair for Rialto Application Session Server to Server Manager communication
RialtoServerManager            ->  RialtoApplicationSessionServer **: Spawn(server_manager_socket, session_management_socket_name)
note left
Depending on configuration, Rialto Server Manager
may maintain a pool of pre-loaded Application
Session Servers in which case one of these will
be used to speed up app launch time.
end note
RialtoServerManager            ->  RialtoServerManager:               Start [1] second READY timer
RialtoServerManager            --> ApplicationManager:                OK/ERROR
RialtoApplicationSessionServer ->  RialtoApplicationSessionServer:    Set current_state = Uninitialised

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:               . 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
elseopt State transition failed
display_name defined
 RialtoApplicationSessionServer ->  RialtoApplicationSessionServer:     Unbind/free session management socket (if created)Set WAYLAND_DISPLAY environment variable
end

alt State transition successful
RialtoApplicationSessionServer -//> RialtoServerManager:               stateChanged(AppState::Error)
RialtoServerManager    RialtoApplicationSessionServer:    Set current_state = Inactive
RialtoApplicationSessionServer  -// ApplicationManagerRialtoServerManager:                stateChanged(application_id, AppState::ErrorInactive)
RialtoApplicationSessionServerRialtoServerManager ->  RialtoApplicationSessionServer !!: Exit process
end

else Session Server initialisation failed

RialtoApplicationSessionServer ->  RialtoApplicationSessionServer:    Unbind/free session management socket (if created)
RialtoApplicationSessionServer -// RialtoServerManagerApplicationManager:                stateChangedStateChanged(application_id, AppState::ErrorInactive)
RialtoServerManagerApplicationManager             ->  RialtoServerManager:               Cancel READY timer
RialtoApplicationSessionServer ->  RialtoApplicationSessionServer !!: Exit process
getAppConnectionInfo()
RialtoServerManager            --//> ApplicationManager:                stateChanged(application_id, AppState::Error)session_management_socket_name

else READYState timertransition expiredfailed

RialtoServerManagerRialtoApplicationSessionServer ->  RialtoApplicationSessionServer:    Unbind/free session management socket  ->  RialtoServerManager:      (if created)
RialtoApplicationSessionServer -// RialtoServerManager:         Kill spawned Rialto Application Session Server process stateChanged(AppState::Error)
RialtoServerManager            -// ApplicationManager:                stateChanged(application_id, AppState::Error)
RialtoApplicationSessionServer ->  RialtoApplicationSessionServer !!: Exit process
end

opt Server preloading is active
  ref over ApplicationManager, RialtoApplicationSessionServer : [[#RialtoApplicationSessionManagement-NotRunning→Unitialized(serverpreloading) Not Running→Unitialized (server preloading)]]
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
8. Application Session Server sends first message so Server Manager knows that it is now up and running
13. Session server creates the socket that the app will use for sending AV data and control respectively.
17/18. Server 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 (this is optional as the app manager can supply the socket name in step 1)

...