Parcourir la source

friends: Implementation of IServiceCreator (#704)

- Add INotificationService (close #621)
- Add IDaemonSuspendSessionService
Ac_K il y a 6 ans
Parent
commit
70bfc01e5f

+ 20 - 0
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<int, ServiceProcessRequest> _commands;
+
+        public override IReadOnlyDictionary<int, ServiceProcessRequest> Commands => _commands;
+
+        public IDaemonSuspendSessionService()
+        {
+            _commands = new Dictionary<int, ServiceProcessRequest>
+            {
+                //...
+            };
+        }
+    }
+}

+ 27 - 0
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<int, ServiceProcessRequest> _commands;
+
+        public override IReadOnlyDictionary<int, ServiceProcessRequest> Commands => _commands;
+
+        public INotificationService(UInt128 userId)
+        {
+            _commands = new Dictionary<int, ServiceProcessRequest>
+            {
+              //{ 0, GetEvent },
+              //{ 1, Pop      },
+              //{ 2, Clear    },
+            };
+
+            _userId = userId;
+        }
+    }
+}

+ 23 - 1
Ryujinx.HLE/HOS/Services/Friend/IServiceCreator.cs

@@ -1,4 +1,5 @@
 using Ryujinx.HLE.HOS.Ipc;
 using Ryujinx.HLE.HOS.Ipc;
+using Ryujinx.HLE.Utilities;
 using System.Collections.Generic;
 using System.Collections.Generic;
 
 
 namespace Ryujinx.HLE.HOS.Services.Friend
 namespace Ryujinx.HLE.HOS.Services.Friend
@@ -13,15 +14,36 @@ namespace Ryujinx.HLE.HOS.Services.Friend
         {
         {
             _commands = new Dictionary<int, ServiceProcessRequest>
             _commands = new Dictionary<int, ServiceProcessRequest>
             {
             {
-                { 0, CreateFriendService }
+                { 0, CreateFriendService               },
+                { 1, CreateNotificationService         }, // 2.0.0+
+                { 2, CreateDaemonSuspendSessionService }, // 4.0.0+
             };
             };
         }
         }
 
 
+        // CreateFriendService() -> object<nn::friends::detail::ipc::IFriendService>
         public static long CreateFriendService(ServiceCtx context)
         public static long CreateFriendService(ServiceCtx context)
         {
         {
             MakeObject(context, new IFriendService());
             MakeObject(context, new IFriendService());
 
 
             return 0;
             return 0;
         }
         }
+
+        // CreateNotificationService(nn::account::Uid) -> object<nn::friends::detail::ipc::INotificationService>
+        public static long CreateNotificationService(ServiceCtx context)
+        {
+            UInt128 userId = new UInt128(context.RequestData.ReadBytes(0x10));
+
+            MakeObject(context, new INotificationService(userId));
+
+            return 0;
+        }
+
+        // CreateDaemonSuspendSessionService() -> object<nn::friends::detail::ipc::IDaemonSuspendSessionService>
+        public static long CreateDaemonSuspendSessionService(ServiceCtx context)
+        {
+            MakeObject(context, new IDaemonSuspendSessionService());
+
+            return 0;
+        }
     }
     }
 }
 }