blob: 29c98b779850318ca97e75f9e7ea6f7959439a45 (
plain) (
tree)
|
|
using Ryujinx.Horizon.Common;
using Ryujinx.Horizon.Sdk.Arp;
using Ryujinx.Horizon.Sdk.Arp.Detail;
using Ryujinx.Horizon.Sdk.OsTypes;
using Ryujinx.Horizon.Sdk.Sf;
namespace Ryujinx.Horizon.Arp.Ipc
{
partial class Writer : IWriter, IServiceObject
{
private readonly ApplicationInstanceManager _applicationInstanceManager;
public Writer(ApplicationInstanceManager applicationInstanceManager)
{
_applicationInstanceManager = applicationInstanceManager;
}
[CmifCommand(0)]
public Result AcquireRegistrar(out IRegistrar registrar)
{
if (_applicationInstanceManager.Entries[0] != null)
{
if (_applicationInstanceManager.Entries[1] != null)
{
registrar = null;
return ArpResult.NoFreeInstance;
}
else
{
_applicationInstanceManager.Entries[1] = new ApplicationInstance();
registrar = new Registrar(_applicationInstanceManager.Entries[1]);
}
}
else
{
_applicationInstanceManager.Entries[0] = new ApplicationInstance();
registrar = new Registrar(_applicationInstanceManager.Entries[0]);
}
return Result.Success;
}
[CmifCommand(1)]
public Result UnregisterApplicationInstance(ulong applicationInstanceId)
{
if (_applicationInstanceManager.Entries[applicationInstanceId] != null)
{
_applicationInstanceManager.Entries[applicationInstanceId] = null;
}
Os.SignalSystemEvent(ref _applicationInstanceManager.SystemEvent);
return Result.Success;
}
[CmifCommand(2)]
public Result AcquireApplicationProcessPropertyUpdater(out IUpdater updater, ulong applicationInstanceId)
{
updater = new Updater(_applicationInstanceManager, applicationInstanceId, false);
return Result.Success;
}
[CmifCommand(3)]
public Result AcquireApplicationCertificateUpdater(out IUpdater updater, ulong applicationInstanceId)
{
updater = new Updater(_applicationInstanceManager, applicationInstanceId, true);
return Result.Success;
}
}
}
|