Sunshine0.0.5917
Sunshine 0.0.5917
Self-hosted game stream host for Moonlight.
Loading...
Searching...
No Matches
process.h File Reference

Declarations for the startup and shutdown of the apps started by a streaming Session. More...

#include <optional>
#include <unordered_map>
#include "config.h"
#include "platform/common.h"
#include "rtsp.h"
#include "src/boost_process_compat.h"
#include "utility.h"
Include dependency graph for process.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

struct  proc::ctx_t
class  proc::proc_t
 Tracks launched child processes and terminates them during shutdown. More...

Macros

#define __kernel_entry
 Macro for kernel entry.
#define DEFAULT_APP_IMAGE_PATH   SUNSHINE_ASSETS_DIR "/box.png"
 Macro for DEFAULT APP IMAGE PATH.

Typedefs

using proc::cmd_t = config::prep_cmd_t
 Parsed command arguments used when launching a child process.
using proc::file_t = util::safe_ptr_v2<FILE, int, &fclose>
 Boost.Process pipe stream used for child-process I/O.

Functions

std::tuple< std::string, std::string > proc::calculate_app_id (const std::string &app_name, std::string app_image_path, int index)
 Calculate a stable id based on name and image data.
bool proc::check_valid_png (const std::filesystem::path &path)
 Validates a path whether it is a valid PNG.
std::unique_ptr< platf::deinit_t > proc::init ()
 Initialize proc functions.
std::optional< proc::proc_t > proc::parse (const std::string &file_name)
 Parse serialized text into the corresponding runtime representation.
std::string proc::prepare_command (const std::string &command)
 Prepare a configured command for execution.
void proc::refresh (const std::string &file_name)
 Refresh cached platform state from the operating system.
void proc::terminate_process_group (boost::process::v1::child &child_process, boost::process::v1::group &group, std::chrono::seconds exit_timeout)
 Terminates all child processes in a process group.
std::string proc::validate_app_image_path (std::string app_image_path)
 Validate app image path.

Detailed Description

Declarations for the startup and shutdown of the apps started by a streaming Session.

Function Documentation

◆ calculate_app_id()

std::tuple< std::string, std::string > proc::calculate_app_id ( const std::string & app_name,
std::string app_image_path,
int index )

Calculate a stable id based on name and image data.

Returns
Tuple of id calculated without index (for use if no collision) and one with.
Parameters
app_nameApp name.
app_image_pathApp image path.
indexZero-based index of the item being addressed.

◆ check_valid_png()

bool proc::check_valid_png ( const std::filesystem::path & path)

Validates a path whether it is a valid PNG.

Parameters
pathThe path to the PNG file.
Returns
true if the file has a valid PNG signature, false otherwise.

◆ init()

std::unique_ptr< platf::deinit_t > proc::init ( )

Initialize proc functions.

Returns
Unique pointer to deinit_t to manage cleanup

◆ parse()

std::optional< proc::proc_t > proc::parse ( const std::string & file_name)

Parse serialized text into the corresponding runtime representation.

Parameters
file_nameFile name.
Returns
Parsed value or parse status.

◆ prepare_command()

std::string proc::prepare_command ( const std::string & command)

Prepare a configured command for execution.

Parameters
commandConfigured command line.
Returns
Command line with any package-specific launcher prefix applied.

◆ refresh()

void proc::refresh ( const std::string & file_name)

Refresh cached platform state from the operating system.

This function compares the current last modified time of the file to the time it was last parsed. If the file has been modified since it was last parsed (or if it has never been parsed), it will be re-parsed to update the app list.

An optional is used rather than a bare file_time_type because value-initialized file_time_type{} is not a reliable "never parsed" sentinel. On some toolchains (e.g. MSYS2 UCRT64 GCC 16.2), file_time_type::clock::now() compares less-or-equal to file_time_type{}, which would cause the initial parse to be skipped.

When an app is currently running, only the cached app configuration list and environment are updated — active process state (_app_id, _process, _process_group, etc.) is preserved so that the in-flight streaming session can still be terminated properly.

Parameters
file_nameFile name.

< Timestamp of the last successful apps.json parse, or nullopt if never parsed.

◆ terminate_process_group()

void proc::terminate_process_group ( boost::process::v1::child & child_process,
boost::process::v1::group & group,
std::chrono::seconds exit_timeout )

Terminates all child processes in a process group.

Parameters
child_processThe child process itself.
groupThe group of all children in the process tree.
exit_timeoutThe timeout to wait for the process group to gracefully exit.

◆ validate_app_image_path()

std::string proc::validate_app_image_path ( std::string app_image_path)

Validate app image path.

Parameters
app_image_pathCandidate image path from the application configuration.
Returns
Existing PNG path, or the default application image when validation fails.