mirror of
https://github.com/Ryujinx/Ryujinx.git
synced 2024-12-29 10:51:21 -08:00
5eb0ee3cca
* account: Implement IManagerForApplication calls and IAsyncContext This implement: - IManagerForApplication::EnsureIdTokenCacheAsync (accordingly to RE) but the Async task is stubbed. - IAsyncContext interface (accordingly to RE). - IManagerForApplication::LoadIdTokenCache (checked with RE, and stubbed). I've tried some games but now they needs some `sfdnsres` calls, some other boots and crashes with other issues. Maybe we should disable the connection somewhere to lets the game think we are offline. I have done many attempts, without success, but since the code is here now, it's better than nothing. (I've cleaned up `using` of IGeneralService too) Closes #629 and closes #630 * change AccountId * Fix gdkchan's comments * use CompletedTask
79 lines
2.1 KiB
C#
79 lines
2.1 KiB
C#
using Ryujinx.HLE.HOS.Ipc;
|
||
using Ryujinx.HLE.HOS.Kernel.Common;
|
||
using Ryujinx.HLE.HOS.Services.Account.Acc.AsyncContext;
|
||
using System;
|
||
|
||
namespace Ryujinx.HLE.HOS.Services.Account.Acc
|
||
{
|
||
class IAsyncContext : IpcService
|
||
{
|
||
AsyncExecution _asyncExecution;
|
||
|
||
public IAsyncContext(AsyncExecution asyncExecution)
|
||
{
|
||
_asyncExecution = asyncExecution;
|
||
}
|
||
|
||
[Command(0)]
|
||
// GetSystemEvent() -> handle<copy>
|
||
public ResultCode GetSystemEvent(ServiceCtx context)
|
||
{
|
||
if (context.Process.HandleTable.GenerateHandle(_asyncExecution.SystemEvent.ReadableEvent, out int _systemEventHandle) != KernelResult.Success)
|
||
{
|
||
throw new InvalidOperationException("Out of handles!");
|
||
}
|
||
|
||
context.Response.HandleDesc = IpcHandleDesc.MakeCopy(_systemEventHandle);
|
||
|
||
return ResultCode.Success;
|
||
}
|
||
|
||
[Command(1)]
|
||
// Cancel()
|
||
public ResultCode Cancel(ServiceCtx context)
|
||
{
|
||
if (!_asyncExecution.IsInitialized)
|
||
{
|
||
return ResultCode.AsyncExecutionNotInitialized;
|
||
}
|
||
|
||
if (_asyncExecution.IsRunning)
|
||
{
|
||
_asyncExecution.Cancel();
|
||
}
|
||
|
||
return ResultCode.Success;
|
||
}
|
||
|
||
[Command(2)]
|
||
// HasDone() -> b8
|
||
public ResultCode HasDone(ServiceCtx context)
|
||
{
|
||
if (!_asyncExecution.IsInitialized)
|
||
{
|
||
return ResultCode.AsyncExecutionNotInitialized;
|
||
}
|
||
|
||
context.ResponseData.Write(_asyncExecution.SystemEvent.ReadableEvent.IsSignaled());
|
||
|
||
return ResultCode.Success;
|
||
}
|
||
|
||
[Command(3)]
|
||
// GetResult()
|
||
public ResultCode GetResult(ServiceCtx context)
|
||
{
|
||
if (!_asyncExecution.IsInitialized)
|
||
{
|
||
return ResultCode.AsyncExecutionNotInitialized;
|
||
}
|
||
|
||
if (!_asyncExecution.SystemEvent.ReadableEvent.IsSignaled())
|
||
{
|
||
return ResultCode.Unknown41;
|
||
}
|
||
|
||
return ResultCode.Success;
|
||
}
|
||
}
|
||
} |