service: use interface factory in server manager
This commit is contained in:
parent
c1924951ad
commit
34e4012998
5 changed files with 37 additions and 23 deletions
|
@ -51,7 +51,7 @@ static Result ValidateServiceName(const std::string& name) {
|
|||
}
|
||||
|
||||
Result ServiceManager::RegisterService(std::string name, u32 max_sessions,
|
||||
SessionRequestHandlerPtr handler) {
|
||||
SessionRequestHandlerFactory handler) {
|
||||
R_TRY(ValidateServiceName(name));
|
||||
|
||||
std::scoped_lock lk{lock};
|
||||
|
@ -264,7 +264,9 @@ void LoopProcess(Core::System& system) {
|
|||
server_manager->ManageDeferral(&deferral_event);
|
||||
service_manager.SetDeferralEvent(deferral_event);
|
||||
|
||||
server_manager->ManageNamedPort("sm:", std::make_shared<SM>(system.ServiceManager(), system));
|
||||
auto sm_service = std::make_shared<SM>(system.ServiceManager(), system);
|
||||
server_manager->ManageNamedPort("sm:", [sm_service] { return sm_service; });
|
||||
|
||||
ServerManager::RunServer(std::move(server_manager));
|
||||
}
|
||||
|
||||
|
|
|
@ -53,7 +53,8 @@ public:
|
|||
explicit ServiceManager(Kernel::KernelCore& kernel_);
|
||||
~ServiceManager();
|
||||
|
||||
Result RegisterService(std::string name, u32 max_sessions, SessionRequestHandlerPtr handler);
|
||||
Result RegisterService(std::string name, u32 max_sessions,
|
||||
SessionRequestHandlerFactory handler_factory);
|
||||
Result UnregisterService(const std::string& name);
|
||||
Result GetServicePort(Kernel::KPort** out_port, const std::string& name);
|
||||
|
||||
|
@ -64,7 +65,7 @@ public:
|
|||
LOG_DEBUG(Service, "Can't find service: {}", service_name);
|
||||
return nullptr;
|
||||
}
|
||||
return std::static_pointer_cast<T>(service->second);
|
||||
return std::static_pointer_cast<T>(service->second());
|
||||
}
|
||||
|
||||
void InvokeControlRequest(HLERequestContext& context);
|
||||
|
@ -79,7 +80,7 @@ private:
|
|||
|
||||
/// Map of registered services, retrieved using GetServicePort.
|
||||
std::mutex lock;
|
||||
std::unordered_map<std::string, SessionRequestHandlerPtr> registered_services;
|
||||
std::unordered_map<std::string, SessionRequestHandlerFactory> registered_services;
|
||||
std::unordered_map<std::string, Kernel::KPort*> service_ports;
|
||||
|
||||
/// Kernel context
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue