using Ryujinx.Common; using Ryujinx.HLE.HOS.Services.Account.Acc; using Ryujinx.HLE.HOS.Services.Friend.ServiceCreator; using Ryujinx.HLE.Utilities; namespace Ryujinx.HLE.HOS.Services.Friend { [Service("friend:a", FriendServicePermissionLevel.Admin)] [Service("friend:m", FriendServicePermissionLevel.Manager)] [Service("friend:s", FriendServicePermissionLevel.System)] [Service("friend:u", FriendServicePermissionLevel.User)] [Service("friend:v", FriendServicePermissionLevel.Overlay)] class IServiceCreator : IpcService { private FriendServicePermissionLevel _permissionLevel; public IServiceCreator(ServiceCtx context, FriendServicePermissionLevel permissionLevel) { _permissionLevel = permissionLevel; } [Command(0)] // CreateFriendService() -> object public ResultCode CreateFriendService(ServiceCtx context) { MakeObject(context, new IFriendService(_permissionLevel)); return ResultCode.Success; } [Command(1)] // 2.0.0+ // CreateNotificationService(nn::account::Uid userId) -> object public ResultCode CreateNotificationService(ServiceCtx context) { UserId userId = context.RequestData.ReadStruct(); if (userId.IsNull) { return ResultCode.InvalidArgument; } MakeObject(context, new INotificationService(context, userId, _permissionLevel)); return ResultCode.Success; } [Command(2)] // 4.0.0+ // CreateDaemonSuspendSessionService() -> object public ResultCode CreateDaemonSuspendSessionService(ServiceCtx context) { MakeObject(context, new IDaemonSuspendSessionService(_permissionLevel)); return ResultCode.Success; } } }