diff options
| author | Ac_K <Acoustik666@gmail.com> | 2020-08-18 21:24:54 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-08-18 21:24:54 +0200 |
| commit | 5eb0ee3ccaf531ad4042199f848e9462efb3d8ec (patch) | |
| tree | bb028768792e07a2c0e1741ec5e36baea322a7bf /Ryujinx.HLE/HOS/Services/Account/Acc/AsyncContext | |
| parent | 5b26e4ef94afca8450f07c42393180e3c97f9c00 (diff) | |
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
Diffstat (limited to 'Ryujinx.HLE/HOS/Services/Account/Acc/AsyncContext')
| -rw-r--r-- | Ryujinx.HLE/HOS/Services/Account/Acc/AsyncContext/AsyncExecution.cs | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/Ryujinx.HLE/HOS/Services/Account/Acc/AsyncContext/AsyncExecution.cs b/Ryujinx.HLE/HOS/Services/Account/Acc/AsyncContext/AsyncExecution.cs new file mode 100644 index 00000000..2ea92b11 --- /dev/null +++ b/Ryujinx.HLE/HOS/Services/Account/Acc/AsyncContext/AsyncExecution.cs @@ -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(); + } + } +}
\ No newline at end of file |
