diff options
| author | Ac_K <Acoustik666@gmail.com> | 2019-07-12 03:13:43 +0200 |
|---|---|---|
| committer | gdkchan <gab.dark.100@gmail.com> | 2019-07-11 22:13:43 -0300 |
| commit | 560ccbeb2d55a4426ad2827bf7534d4a695431c2 (patch) | |
| tree | 7e224acbd6c023ea56ff80c6207aa0966aa06ee5 /Ryujinx.HLE/HOS/Services/Friend | |
| parent | f723f6f39aaf7b1cebc0224a055058d62e3b689c (diff) | |
Refactoring commands handling (#728)
* Refactoring commands handling
- Use Reflection to handle commands ID.
- Add all symbols (from SwIPC so not all time accurate).
- Re-sort some services commands methods.
- Some cleanup.
- Keep some empty constructor for consistency.
* Fix order in IProfile
Diffstat (limited to 'Ryujinx.HLE/HOS/Services/Friend')
4 files changed, 17 insertions, 128 deletions
diff --git a/Ryujinx.HLE/HOS/Services/Friend/IDaemonSuspendSessionService.cs b/Ryujinx.HLE/HOS/Services/Friend/IDaemonSuspendSessionService.cs index 0de74d78..0156e0b7 100644 --- a/Ryujinx.HLE/HOS/Services/Friend/IDaemonSuspendSessionService.cs +++ b/Ryujinx.HLE/HOS/Services/Friend/IDaemonSuspendSessionService.cs @@ -1,27 +1,11 @@ -using Ryujinx.HLE.HOS.Ipc; -using System.Collections.Generic; - namespace Ryujinx.HLE.HOS.Services.Friend { class IDaemonSuspendSessionService : IpcService { - private Dictionary<int, ServiceProcessRequest> _commands; - private FriendServicePermissionLevel PermissionLevel; - public override IReadOnlyDictionary<int, ServiceProcessRequest> Commands => _commands; - public IDaemonSuspendSessionService(FriendServicePermissionLevel permissionLevel) { - _commands = new Dictionary<int, ServiceProcessRequest> - { - //{ 0, Unknown0 }, // 4.0.0+ - //{ 1, Unknown1 }, // 4.0.0+ - //{ 2, Unknown2 }, // 4.0.0+ - //{ 3, Unknown3 }, // 4.0.0+ - //{ 4, Unknown4 }, // 4.0.0+ - }; - PermissionLevel = permissionLevel; } } diff --git a/Ryujinx.HLE/HOS/Services/Friend/IFriendService.cs b/Ryujinx.HLE/HOS/Services/Friend/IFriendService.cs index 58e65ea7..40a54ee2 100644 --- a/Ryujinx.HLE/HOS/Services/Friend/IFriendService.cs +++ b/Ryujinx.HLE/HOS/Services/Friend/IFriendService.cs @@ -1,9 +1,7 @@ using Ryujinx.Common; using Ryujinx.Common.Logging; -using Ryujinx.HLE.HOS.Ipc; using Ryujinx.HLE.HOS.SystemState; using Ryujinx.HLE.Utilities; -using System.Collections.Generic; using System.IO; using System.Runtime.InteropServices; @@ -13,95 +11,16 @@ namespace Ryujinx.HLE.HOS.Services.Friend { class IFriendService : IpcService { - private Dictionary<int, ServiceProcessRequest> _commands; - private FriendServicePermissionLevel _permissionLevel; - public override IReadOnlyDictionary<int, ServiceProcessRequest> Commands => _commands; - public IFriendService(FriendServicePermissionLevel permissionLevel) { - _commands = new Dictionary<int, ServiceProcessRequest> - { - //{ 0, GetCompletionEvent }, - //{ 1, Cancel }, - { 10100, GetFriendListIds }, - { 10101, GetFriendList }, - //{ 10102, UpdateFriendInfo }, - //{ 10110, GetFriendProfileImage }, - //{ 10200, SendFriendRequestForApplication }, - //{ 10211, AddFacedFriendRequestForApplication }, - //{ 10400, GetBlockedUserListIds }, - //{ 10500, GetProfileList }, - { 10600, DeclareOpenOnlinePlaySession }, - { 10601, DeclareCloseOnlinePlaySession }, - { 10610, UpdateUserPresence }, - //{ 10700, GetPlayHistoryRegistrationKey }, - //{ 10701, GetPlayHistoryRegistrationKeyWithNetworkServiceAccountId }, - //{ 10702, AddPlayHistory }, - //{ 11000, GetProfileImageUrl }, - //{ 20100, GetFriendCount }, - //{ 20101, GetNewlyFriendCount }, - //{ 20102, GetFriendDetailedInfo }, - //{ 20103, SyncFriendList }, - //{ 20104, RequestSyncFriendList }, - //{ 20110, LoadFriendSetting }, - //{ 20200, GetReceivedFriendRequestCount }, - //{ 20201, GetFriendRequestList }, - //{ 20300, GetFriendCandidateList }, - //{ 20301, GetNintendoNetworkIdInfo }, // 3.0.0+ - //{ 20302, GetSnsAccountLinkage }, // 5.0.0+ - //{ 20303, GetSnsAccountProfile }, // 5.0.0+ - //{ 20304, GetSnsAccountFriendList }, // 5.0.0+ - //{ 20400, GetBlockedUserList }, - //{ 20401, SyncBlockedUserList }, - //{ 20500, GetProfileExtraList }, - //{ 20501, GetRelationship }, - //{ 20600, GetUserPresenceView }, - //{ 20700, GetPlayHistoryList }, - //{ 20701, GetPlayHistoryStatistics }, - //{ 20800, LoadUserSetting }, - //{ 20801, SyncUserSetting }, - //{ 20900, RequestListSummaryOverlayNotification }, - //{ 21000, GetExternalApplicationCatalog }, - //{ 30100, DropFriendNewlyFlags }, - //{ 30101, DeleteFriend }, - //{ 30110, DropFriendNewlyFlag }, - //{ 30120, ChangeFriendFavoriteFlag }, - //{ 30121, ChangeFriendOnlineNotificationFlag }, - //{ 30200, SendFriendRequest }, - //{ 30201, SendFriendRequestWithApplicationInfo }, - //{ 30202, CancelFriendRequest }, - //{ 30203, AcceptFriendRequest }, - //{ 30204, RejectFriendRequest }, - //{ 30205, ReadFriendRequest }, - //{ 30210, GetFacedFriendRequestRegistrationKey }, - //{ 30211, AddFacedFriendRequest }, - //{ 30212, CancelFacedFriendRequest }, - //{ 30213, GetFacedFriendRequestProfileImage }, - //{ 30214, GetFacedFriendRequestProfileImageFromPath }, - //{ 30215, SendFriendRequestWithExternalApplicationCatalogId }, - //{ 30216, ResendFacedFriendRequest }, - //{ 30217, SendFriendRequestWithNintendoNetworkIdInfo }, // 3.0.0+ - //{ 30300, GetSnsAccountLinkPageUrl }, // 5.0.0+ - //{ 30301, UnlinkSnsAccount }, // 5.0.0+ - //{ 30400, BlockUser }, - //{ 30401, BlockUserWithApplicationInfo }, - //{ 30402, UnblockUser }, - //{ 30500, GetProfileExtraFromFriendCode }, - //{ 30700, DeletePlayHistory }, - //{ 30810, ChangePresencePermission }, - //{ 30811, ChangeFriendRequestReception }, - //{ 30812, ChangePlayLogPermission }, - //{ 30820, IssueFriendCode }, - //{ 30830, ClearPlayLog }, - //{ 49900, DeleteNetworkServiceAccountCache }, - }; - _permissionLevel = permissionLevel; } - // nn::friends::GetFriendListIds(int offset, nn::account::Uid userUUID, nn::friends::detail::ipc::SizedFriendFilter friendFilter, ulong pidPlaceHolder, pid) -> int outCount, array<nn::account::NetworkServiceAccountId, 0xa> + [Command(10100)] + // nn::friends::GetFriendListIds(int offset, nn::account::Uid userUUID, nn::friends::detail::ipc::SizedFriendFilter friendFilter, ulong pidPlaceHolder, pid) + // -> int outCount, array<nn::account::NetworkServiceAccountId, 0xa> public long GetFriendListIds(ServiceCtx context) { int offset = context.RequestData.ReadInt32(); @@ -138,7 +57,9 @@ namespace Ryujinx.HLE.HOS.Services.Friend return 0; } - // nn::friends::GetFriendList(int offset, nn::account::Uid userUUID, nn::friends::detail::ipc::SizedFriendFilter friendFilter, ulong pidPlaceHolder, pid) -> int outCount, array<nn::friends::detail::FriendImpl, 0x6> + [Command(10101)] + // nn::friends::GetFriendList(int offset, nn::account::Uid userUUID, nn::friends::detail::ipc::SizedFriendFilter friendFilter, ulong pidPlaceHolder, pid) + // -> int outCount, array<nn::friends::detail::FriendImpl, 0x6> public long GetFriendList(ServiceCtx context) { int offset = context.RequestData.ReadInt32(); @@ -174,6 +95,7 @@ namespace Ryujinx.HLE.HOS.Services.Friend return 0; } + [Command(10600)] // nn::friends::DeclareOpenOnlinePlaySession(nn::account::Uid) public long DeclareOpenOnlinePlaySession(ServiceCtx context) { @@ -194,6 +116,7 @@ namespace Ryujinx.HLE.HOS.Services.Friend return 0; } + [Command(10601)] // nn::friends::DeclareCloseOnlinePlaySession(nn::account::Uid) public long DeclareCloseOnlinePlaySession(ServiceCtx context) { @@ -214,6 +137,7 @@ namespace Ryujinx.HLE.HOS.Services.Friend return 0; } + [Command(10610)] // nn::friends::UpdateUserPresence(nn::account::Uid, u64, pid, buffer<nn::friends::detail::UserPresenceImpl, 0x19>) public long UpdateUserPresence(ServiceCtx context) { @@ -244,4 +168,4 @@ namespace Ryujinx.HLE.HOS.Services.Friend return 0; } } -} +}
\ No newline at end of file diff --git a/Ryujinx.HLE/HOS/Services/Friend/INotificationService.cs b/Ryujinx.HLE/HOS/Services/Friend/INotificationService.cs index 68893efe..87abc839 100644 --- a/Ryujinx.HLE/HOS/Services/Friend/INotificationService.cs +++ b/Ryujinx.HLE/HOS/Services/Friend/INotificationService.cs @@ -20,25 +20,13 @@ namespace Ryujinx.HLE.HOS.Services.Friend private KEvent _notificationEvent; private int _notificationEventHandle = 0; - private LinkedList<NotificationInfo> _notifications; private bool _hasNewFriendRequest; private bool _hasFriendListUpdate; - private Dictionary<int, ServiceProcessRequest> _commands; - - public override IReadOnlyDictionary<int, ServiceProcessRequest> Commands => _commands; - public INotificationService(ServiceCtx context, UInt128 userId, FriendServicePermissionLevel permissionLevel) { - _commands = new Dictionary<int, ServiceProcessRequest> - { - { 0, GetEvent }, // 2.0.0+ - { 1, Clear }, // 2.0.0+ - { 2, Pop }, // 2.0.0+ - }; - _userId = userId; _permissionLevel = permissionLevel; _notifications = new LinkedList<NotificationInfo>(); @@ -50,6 +38,7 @@ namespace Ryujinx.HLE.HOS.Services.Friend NotificationEventHandler.Instance.RegisterNotificationService(this); } + [Command(0)] //2.0.0+ // nn::friends::detail::ipc::INotificationService::GetEvent() -> handle<copy> public long GetEvent(ServiceCtx context) { @@ -66,6 +55,7 @@ namespace Ryujinx.HLE.HOS.Services.Friend return 0; } + [Command(1)] //2.0.0+ // nn::friends::detail::ipc::INotificationService::Clear() public long Clear(ServiceCtx context) { @@ -80,6 +70,7 @@ namespace Ryujinx.HLE.HOS.Services.Friend return 0; } + [Command(2)] // 2.0.0+ // nn::friends::detail::ipc::INotificationService::Pop() -> nn::friends::detail::ipc::SizedNotificationInfo public long Pop(ServiceCtx context) { diff --git a/Ryujinx.HLE/HOS/Services/Friend/IServiceCreator.cs b/Ryujinx.HLE/HOS/Services/Friend/IServiceCreator.cs index af97391d..2f798769 100644 --- a/Ryujinx.HLE/HOS/Services/Friend/IServiceCreator.cs +++ b/Ryujinx.HLE/HOS/Services/Friend/IServiceCreator.cs @@ -1,7 +1,5 @@ using Ryujinx.Common; -using Ryujinx.HLE.HOS.Ipc; using Ryujinx.HLE.Utilities; -using System.Collections.Generic; using static Ryujinx.HLE.HOS.ErrorCode; @@ -16,22 +14,12 @@ namespace Ryujinx.HLE.HOS.Services.Friend { private FriendServicePermissionLevel _permissionLevel; - private Dictionary<int, ServiceProcessRequest> _commands; - - public override IReadOnlyDictionary<int, ServiceProcessRequest> Commands => _commands; - public IServiceCreator(ServiceCtx context, FriendServicePermissionLevel permissionLevel) { - _commands = new Dictionary<int, ServiceProcessRequest> - { - { 0, CreateFriendService }, - { 1, CreateNotificationService }, // 2.0.0+ - { 2, CreateDaemonSuspendSessionService }, // 4.0.0+ - }; - _permissionLevel = permissionLevel; } + [Command(0)] // CreateFriendService() -> object<nn::friends::detail::ipc::IFriendService> public long CreateFriendService(ServiceCtx context) { @@ -40,6 +28,7 @@ namespace Ryujinx.HLE.HOS.Services.Friend return 0; } + [Command(1)] // 2.0.0+ // CreateNotificationService(nn::account::Uid) -> object<nn::friends::detail::ipc::INotificationService> public long CreateNotificationService(ServiceCtx context) { @@ -55,6 +44,7 @@ namespace Ryujinx.HLE.HOS.Services.Friend return 0; } + [Command(2)] // 4.0.0+ // CreateDaemonSuspendSessionService() -> object<nn::friends::detail::ipc::IDaemonSuspendSessionService> public long CreateDaemonSuspendSessionService(ServiceCtx context) { @@ -63,4 +53,4 @@ namespace Ryujinx.HLE.HOS.Services.Friend return 0; } } -} +}
\ No newline at end of file |
