Pārlūkot izejas kodu

pctl: rewrite IParentalControlServiceFactory

Liam 2 gadi atpakaļ
vecāks
revīzija
5ab49c833d

+ 19 - 14
src/core/hle/service/pctl/parental_control_service_factory.cpp

@@ -1,7 +1,7 @@
 // SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project
 // SPDX-License-Identifier: GPL-2.0-or-later
 
-#include "core/hle/service/ipc_helpers.h"
+#include "core/hle/service/cmif_serialization.h"
 #include "core/hle/service/pctl/parental_control_service.h"
 #include "core/hle/service/pctl/parental_control_service_factory.h"
 
@@ -10,26 +10,31 @@ namespace Service::PCTL {
 IParentalControlServiceFactory::IParentalControlServiceFactory(Core::System& system_,
                                                                const char* name_,
                                                                Capability capability_)
-    : ServiceFramework{system_, name_}, capability{capability_} {}
+    : ServiceFramework{system_, name_}, capability{capability_} {
+    static const FunctionInfo functions[] = {
+        {0, D<&IParentalControlServiceFactory::CreateService>, "CreateService"},
+        {1, D<&IParentalControlServiceFactory::CreateServiceWithoutInitialize>,
+         "CreateServiceWithoutInitialize"},
+    };
+    RegisterHandlers(functions);
+}
 
 IParentalControlServiceFactory::~IParentalControlServiceFactory() = default;
 
-void IParentalControlServiceFactory::CreateService(HLERequestContext& ctx) {
+Result IParentalControlServiceFactory::CreateService(
+    Out<SharedPointer<IParentalControlService>> out_service, ClientProcessId process_id) {
     LOG_DEBUG(Service_PCTL, "called");
-
-    IPC::ResponseBuilder rb{ctx, 2, 0, 1};
-    rb.Push(ResultSuccess);
-    // TODO(ogniK): Get TID from process
-
-    rb.PushIpcInterface<IParentalControlService>(system, capability);
+    // TODO(ogniK): Get application id from process
+    *out_service = std::make_shared<IParentalControlService>(system, capability);
+    R_SUCCEED();
 }
 
-void IParentalControlServiceFactory::CreateServiceWithoutInitialize(HLERequestContext& ctx) {
+Result IParentalControlServiceFactory::CreateServiceWithoutInitialize(
+    Out<SharedPointer<IParentalControlService>> out_service, ClientProcessId process_id) {
     LOG_DEBUG(Service_PCTL, "called");
-
-    IPC::ResponseBuilder rb{ctx, 2, 0, 1};
-    rb.Push(ResultSuccess);
-    rb.PushIpcInterface<IParentalControlService>(system, capability);
+    // TODO(ogniK): Get application id from process
+    *out_service = std::make_shared<IParentalControlService>(system, capability);
+    R_SUCCEED();
 }
 
 } // namespace Service::PCTL

+ 7 - 6
src/core/hle/service/pctl/parental_control_service_factory.h

@@ -3,23 +3,24 @@
 
 #pragma once
 
+#include "core/hle/service/cmif_types.h"
 #include "core/hle/service/pctl/pctl_types.h"
 #include "core/hle/service/service.h"
 
-namespace Core {
-class System;
-}
-
 namespace Service::PCTL {
 
+class IParentalControlService;
+
 class IParentalControlServiceFactory : public ServiceFramework<IParentalControlServiceFactory> {
 public:
     explicit IParentalControlServiceFactory(Core::System& system_, const char* name_,
                                             Capability capability_);
     ~IParentalControlServiceFactory() override;
 
-    void CreateService(HLERequestContext& ctx);
-    void CreateServiceWithoutInitialize(HLERequestContext& ctx);
+    Result CreateService(Out<SharedPointer<IParentalControlService>> out_service,
+                         ClientProcessId process_id);
+    Result CreateServiceWithoutInitialize(Out<SharedPointer<IParentalControlService>> out_service,
+                                          ClientProcessId process_id);
 
 private:
     Capability capability{};