mirror of
				https://git.suyu.dev/suyu/suyu
				synced 2025-11-03 16:39:01 -06:00 
			
		
		
		
	Deglobalize System: Friend
This commit is contained in:
		@@ -149,7 +149,8 @@ private:
 | 
			
		||||
 | 
			
		||||
class INotificationService final : public ServiceFramework<INotificationService> {
 | 
			
		||||
public:
 | 
			
		||||
    INotificationService(Common::UUID uuid) : ServiceFramework("INotificationService"), uuid(uuid) {
 | 
			
		||||
    INotificationService(Common::UUID uuid, Core::System& system)
 | 
			
		||||
        : ServiceFramework("INotificationService"), uuid(uuid) {
 | 
			
		||||
        // clang-format off
 | 
			
		||||
        static const FunctionInfo functions[] = {
 | 
			
		||||
            {0, &INotificationService::GetEvent, "GetEvent"},
 | 
			
		||||
@@ -159,6 +160,9 @@ public:
 | 
			
		||||
        // clang-format on
 | 
			
		||||
 | 
			
		||||
        RegisterHandlers(functions);
 | 
			
		||||
 | 
			
		||||
        notification_event = Kernel::WritableEvent::CreateEventPair(
 | 
			
		||||
            system.Kernel(), Kernel::ResetType::Manual, "INotificationService:NotifyEvent");
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
private:
 | 
			
		||||
@@ -167,13 +171,6 @@ private:
 | 
			
		||||
 | 
			
		||||
        IPC::ResponseBuilder rb{ctx, 2, 1};
 | 
			
		||||
        rb.Push(RESULT_SUCCESS);
 | 
			
		||||
 | 
			
		||||
        if (!is_event_created) {
 | 
			
		||||
            auto& kernel = Core::System::GetInstance().Kernel();
 | 
			
		||||
            notification_event = Kernel::WritableEvent::CreateEventPair(
 | 
			
		||||
                kernel, Kernel::ResetType::Manual, "INotificationService:NotifyEvent");
 | 
			
		||||
            is_event_created = true;
 | 
			
		||||
        }
 | 
			
		||||
        rb.PushCopyObjects(notification_event.readable);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@@ -261,21 +258,21 @@ void Module::Interface::CreateNotificationService(Kernel::HLERequestContext& ctx
 | 
			
		||||
 | 
			
		||||
    IPC::ResponseBuilder rb{ctx, 2, 0, 1};
 | 
			
		||||
    rb.Push(RESULT_SUCCESS);
 | 
			
		||||
    rb.PushIpcInterface<INotificationService>(uuid);
 | 
			
		||||
    rb.PushIpcInterface<INotificationService>(uuid, system);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
Module::Interface::Interface(std::shared_ptr<Module> module, const char* name)
 | 
			
		||||
    : ServiceFramework(name), module(std::move(module)) {}
 | 
			
		||||
Module::Interface::Interface(std::shared_ptr<Module> module, Core::System& system, const char* name)
 | 
			
		||||
    : ServiceFramework(name), module(std::move(module)), system(system) {}
 | 
			
		||||
 | 
			
		||||
Module::Interface::~Interface() = default;
 | 
			
		||||
 | 
			
		||||
void InstallInterfaces(SM::ServiceManager& service_manager) {
 | 
			
		||||
void InstallInterfaces(SM::ServiceManager& service_manager, Core::System& system) {
 | 
			
		||||
    auto module = std::make_shared<Module>();
 | 
			
		||||
    std::make_shared<Friend>(module, "friend:a")->InstallAsService(service_manager);
 | 
			
		||||
    std::make_shared<Friend>(module, "friend:m")->InstallAsService(service_manager);
 | 
			
		||||
    std::make_shared<Friend>(module, "friend:s")->InstallAsService(service_manager);
 | 
			
		||||
    std::make_shared<Friend>(module, "friend:u")->InstallAsService(service_manager);
 | 
			
		||||
    std::make_shared<Friend>(module, "friend:v")->InstallAsService(service_manager);
 | 
			
		||||
    std::make_shared<Friend>(module, system, "friend:a")->InstallAsService(service_manager);
 | 
			
		||||
    std::make_shared<Friend>(module, system, "friend:m")->InstallAsService(service_manager);
 | 
			
		||||
    std::make_shared<Friend>(module, system, "friend:s")->InstallAsService(service_manager);
 | 
			
		||||
    std::make_shared<Friend>(module, system, "friend:u")->InstallAsService(service_manager);
 | 
			
		||||
    std::make_shared<Friend>(module, system, "friend:v")->InstallAsService(service_manager);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
} // namespace Service::Friend
 | 
			
		||||
 
 | 
			
		||||
@@ -6,13 +6,17 @@
 | 
			
		||||
 | 
			
		||||
#include "core/hle/service/service.h"
 | 
			
		||||
 | 
			
		||||
namespace Core {
 | 
			
		||||
class System;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
namespace Service::Friend {
 | 
			
		||||
 | 
			
		||||
class Module final {
 | 
			
		||||
public:
 | 
			
		||||
    class Interface : public ServiceFramework<Interface> {
 | 
			
		||||
    public:
 | 
			
		||||
        explicit Interface(std::shared_ptr<Module> module, const char* name);
 | 
			
		||||
        explicit Interface(std::shared_ptr<Module> module, Core::System& system, const char* name);
 | 
			
		||||
        ~Interface() override;
 | 
			
		||||
 | 
			
		||||
        void CreateFriendService(Kernel::HLERequestContext& ctx);
 | 
			
		||||
@@ -20,10 +24,11 @@ public:
 | 
			
		||||
 | 
			
		||||
    protected:
 | 
			
		||||
        std::shared_ptr<Module> module;
 | 
			
		||||
        Core::System& system;
 | 
			
		||||
    };
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/// Registers all Friend services with the specified service manager.
 | 
			
		||||
void InstallInterfaces(SM::ServiceManager& service_manager);
 | 
			
		||||
void InstallInterfaces(SM::ServiceManager& service_manager, Core::System& system);
 | 
			
		||||
 | 
			
		||||
} // namespace Service::Friend
 | 
			
		||||
 
 | 
			
		||||
@@ -6,8 +6,8 @@
 | 
			
		||||
 | 
			
		||||
namespace Service::Friend {
 | 
			
		||||
 | 
			
		||||
Friend::Friend(std::shared_ptr<Module> module, const char* name)
 | 
			
		||||
    : Interface(std::move(module), name) {
 | 
			
		||||
Friend::Friend(std::shared_ptr<Module> module, Core::System& system, const char* name)
 | 
			
		||||
    : Interface(std::move(module), system, name) {
 | 
			
		||||
    static const FunctionInfo functions[] = {
 | 
			
		||||
        {0, &Friend::CreateFriendService, "CreateFriendService"},
 | 
			
		||||
        {1, &Friend::CreateNotificationService, "CreateNotificationService"},
 | 
			
		||||
 
 | 
			
		||||
@@ -10,7 +10,7 @@ namespace Service::Friend {
 | 
			
		||||
 | 
			
		||||
class Friend final : public Module::Interface {
 | 
			
		||||
public:
 | 
			
		||||
    explicit Friend(std::shared_ptr<Module> module, const char* name);
 | 
			
		||||
    explicit Friend(std::shared_ptr<Module> module, Core::System& system, const char* name);
 | 
			
		||||
    ~Friend() override;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user