service: refactor server architecture

Converts services to have their own processes
This commit is contained in:
Liam 2023-02-18 16:26:48 -05:00
parent 5175ea2ae1
commit 1c3a93e7c4
140 changed files with 1388 additions and 1138 deletions

View file

@ -31,12 +31,8 @@ class ResponseBuilder;
namespace Service {
class ServiceFrameworkBase;
}
enum class ServiceThreadType {
Default,
CreateNew,
};
class ServerManager;
} // namespace Service
namespace Kernel {
@ -53,9 +49,6 @@ class KThread;
class KReadableEvent;
class KSession;
class SessionRequestManager;
class ServiceThread;
enum class ThreadWakeupReason;
/**
* Interface implemented by HLE Session handlers.
@ -64,8 +57,7 @@ enum class ThreadWakeupReason;
*/
class SessionRequestHandler : public std::enable_shared_from_this<SessionRequestHandler> {
public:
SessionRequestHandler(KernelCore& kernel_, const char* service_name_,
ServiceThreadType thread_type);
SessionRequestHandler(KernelCore& kernel_, const char* service_name_);
virtual ~SessionRequestHandler();
/**
@ -79,17 +71,8 @@ public:
virtual Result HandleSyncRequest(Kernel::KServerSession& session,
Kernel::HLERequestContext& context) = 0;
void AcceptSession(KServerPort* server_port);
void RegisterSession(KServerSession* server_session,
std::shared_ptr<SessionRequestManager> manager);
ServiceThread& GetServiceThread() const {
return service_thread;
}
protected:
KernelCore& kernel;
ServiceThread& service_thread;
};
using SessionRequestHandlerWeakPtr = std::weak_ptr<SessionRequestHandler>;
@ -102,7 +85,7 @@ using SessionRequestHandlerPtr = std::shared_ptr<SessionRequestHandler>;
*/
class SessionRequestManager final {
public:
explicit SessionRequestManager(KernelCore& kernel);
explicit SessionRequestManager(KernelCore& kernel, Service::ServerManager& server_manager);
~SessionRequestManager();
bool IsDomain() const {
@ -155,15 +138,15 @@ public:
session_handler = std::move(handler);
}
ServiceThread& GetServiceThread() const {
return session_handler->GetServiceThread();
}
bool HasSessionRequestHandler(const HLERequestContext& context) const;
Result HandleDomainSyncRequest(KServerSession* server_session, HLERequestContext& context);
Result CompleteSyncRequest(KServerSession* server_session, HLERequestContext& context);
Service::ServerManager& GetServerManager() {
return server_manager;
}
private:
bool convert_to_domain{};
bool is_domain{};
@ -172,6 +155,7 @@ private:
private:
KernelCore& kernel;
Service::ServerManager& server_manager;
};
/**