From 70bfc01e5feb3d951043313c255b5e992518711c Mon Sep 17 00:00:00 2001 From: Ac_K Date: Mon, 17 Jun 2019 01:08:32 +0200 Subject: [PATCH] friends: Implementation of IServiceCreator (#704) - Add INotificationService (close #621) - Add IDaemonSuspendSessionService --- .../Friend/IDaemonSuspendSessionService.cs | 20 ++++++++++++++ .../Services/Friend/INotificationService.cs | 27 +++++++++++++++++++ .../HOS/Services/Friend/IServiceCreator.cs | 24 ++++++++++++++++- 3 files changed, 70 insertions(+), 1 deletion(-) create mode 100644 Ryujinx.HLE/HOS/Services/Friend/IDaemonSuspendSessionService.cs create mode 100644 Ryujinx.HLE/HOS/Services/Friend/INotificationService.cs diff --git a/Ryujinx.HLE/HOS/Services/Friend/IDaemonSuspendSessionService.cs b/Ryujinx.HLE/HOS/Services/Friend/IDaemonSuspendSessionService.cs new file mode 100644 index 000000000..d0edf29ed --- /dev/null +++ b/Ryujinx.HLE/HOS/Services/Friend/IDaemonSuspendSessionService.cs @@ -0,0 +1,20 @@ +using Ryujinx.HLE.HOS.Ipc; +using System.Collections.Generic; + +namespace Ryujinx.HLE.HOS.Services.Friend +{ + class IDaemonSuspendSessionService : IpcService + { + private Dictionary _commands; + + public override IReadOnlyDictionary Commands => _commands; + + public IDaemonSuspendSessionService() + { + _commands = new Dictionary + { + //... + }; + } + } +} \ No newline at end of file diff --git a/Ryujinx.HLE/HOS/Services/Friend/INotificationService.cs b/Ryujinx.HLE/HOS/Services/Friend/INotificationService.cs new file mode 100644 index 000000000..46a5f17c9 --- /dev/null +++ b/Ryujinx.HLE/HOS/Services/Friend/INotificationService.cs @@ -0,0 +1,27 @@ +using Ryujinx.HLE.HOS.Ipc; +using Ryujinx.HLE.Utilities; +using System.Collections.Generic; + +namespace Ryujinx.HLE.HOS.Services.Friend +{ + class INotificationService : IpcService + { + private UInt128 _userId; + + private Dictionary _commands; + + public override IReadOnlyDictionary Commands => _commands; + + public INotificationService(UInt128 userId) + { + _commands = new Dictionary + { + //{ 0, GetEvent }, + //{ 1, Pop }, + //{ 2, Clear }, + }; + + _userId = userId; + } + } +} \ No newline at end of file diff --git a/Ryujinx.HLE/HOS/Services/Friend/IServiceCreator.cs b/Ryujinx.HLE/HOS/Services/Friend/IServiceCreator.cs index d7f999973..2464cb53a 100644 --- a/Ryujinx.HLE/HOS/Services/Friend/IServiceCreator.cs +++ b/Ryujinx.HLE/HOS/Services/Friend/IServiceCreator.cs @@ -1,4 +1,5 @@ using Ryujinx.HLE.HOS.Ipc; +using Ryujinx.HLE.Utilities; using System.Collections.Generic; namespace Ryujinx.HLE.HOS.Services.Friend @@ -13,15 +14,36 @@ namespace Ryujinx.HLE.HOS.Services.Friend { _commands = new Dictionary { - { 0, CreateFriendService } + { 0, CreateFriendService }, + { 1, CreateNotificationService }, // 2.0.0+ + { 2, CreateDaemonSuspendSessionService }, // 4.0.0+ }; } + // CreateFriendService() -> object public static long CreateFriendService(ServiceCtx context) { MakeObject(context, new IFriendService()); return 0; } + + // CreateNotificationService(nn::account::Uid) -> object + public static long CreateNotificationService(ServiceCtx context) + { + UInt128 userId = new UInt128(context.RequestData.ReadBytes(0x10)); + + MakeObject(context, new INotificationService(userId)); + + return 0; + } + + // CreateDaemonSuspendSessionService() -> object + public static long CreateDaemonSuspendSessionService(ServiceCtx context) + { + MakeObject(context, new IDaemonSuspendSessionService()); + + return 0; + } } } \ No newline at end of file