account: Implement IManagerForApplication calls and IAsyncContext (#1466)
* 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
This commit is contained in:
parent
5b26e4ef94
commit
5eb0ee3cca
6 changed files with 221 additions and 11 deletions
|
@ -0,0 +1,56 @@
|
|||
using Ryujinx.Common.Logging;
|
||||
using Ryujinx.HLE.HOS.Kernel.Threading;
|
||||
using System;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Ryujinx.HLE.HOS.Services.Account.Acc.AsyncContext
|
||||
{
|
||||
class AsyncExecution
|
||||
{
|
||||
private readonly CancellationTokenSource _tokenSource;
|
||||
private readonly CancellationToken _token;
|
||||
|
||||
public KEvent SystemEvent { get; }
|
||||
public bool IsInitialized { get; private set; }
|
||||
public bool IsRunning { get; private set; }
|
||||
|
||||
public AsyncExecution(KEvent asyncEvent)
|
||||
{
|
||||
SystemEvent = asyncEvent;
|
||||
|
||||
_tokenSource = new CancellationTokenSource();
|
||||
_token = _tokenSource.Token;
|
||||
}
|
||||
|
||||
public void Initialize(int timeout, Func<CancellationToken, Task> taskAsync)
|
||||
{
|
||||
Task.Run(async () =>
|
||||
{
|
||||
IsRunning = true;
|
||||
|
||||
_tokenSource.CancelAfter(timeout);
|
||||
|
||||
try
|
||||
{
|
||||
await taskAsync(_token);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Logger.Warning?.Print(LogClass.ServiceAcc, $"Exception: {ex.Message}");
|
||||
}
|
||||
|
||||
SystemEvent.ReadableEvent.Signal();
|
||||
|
||||
IsRunning = false;
|
||||
}, _token);
|
||||
|
||||
IsInitialized = true;
|
||||
}
|
||||
|
||||
public void Cancel()
|
||||
{
|
||||
_tokenSource.Cancel();
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue