mirror of
https://github.com/shadps4-emu/shadPS4.git
synced 2025-12-10 13:48:40 +00:00
* Add support for restarting the emulator with new configurations - Implement `Restart` function in `Emulator` to enable process relaunch with updated parameters. - Modify `sceSystemServiceLoadExec` to use the restart functionality. * Add logging for emulator restart and system service load execution * Add IPC emulator PID output command Impl `PID` output command to return the emulator process ID - required for launches supporting emulator restart * Add log file append mode support (used after restarting to keep the same log file) * Keep game root between restarts * add --wait-for-debugger option flag * add --wait-for-pid flag used for sync between parent & child process during restart * impl restart via ipc * fix override game root * add qt flags to allow restart
44 lines
821 B
C++
44 lines
821 B
C++
// SPDX-FileCopyrightText: Copyright 2024 shadPS4 Emulator Project
|
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
|
|
|
#pragma once
|
|
|
|
#include "common/singleton.h"
|
|
|
|
#include <semaphore>
|
|
#include <string>
|
|
#include <thread>
|
|
#include <vector>
|
|
|
|
class IPC {
|
|
bool enabled{false};
|
|
std::jthread input_thread{};
|
|
|
|
std::binary_semaphore run_semaphore{0};
|
|
std::binary_semaphore start_semaphore{0};
|
|
|
|
public:
|
|
static IPC& Instance() {
|
|
return *Common::Singleton<IPC>::Instance();
|
|
}
|
|
|
|
void Init();
|
|
|
|
operator bool() const {
|
|
return enabled;
|
|
}
|
|
|
|
[[nodiscard]] bool IsEnabled() const {
|
|
return enabled;
|
|
}
|
|
|
|
void WaitForStart() {
|
|
start_semaphore.acquire();
|
|
}
|
|
|
|
void SendRestart(const std::vector<std::string>& args);
|
|
|
|
private:
|
|
[[noreturn]] void InputLoop();
|
|
};
|