pctl: rewrite IParentalControlServiceFactory

This commit is contained in:
Liam 2024-02-21 21:10:49 -05:00
parent 0e74204aad
commit 5ab49c833d
2 changed files with 26 additions and 20 deletions

View File

@ -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

View File

@ -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{};