 5eb0ee3cca
			
		
	
	
		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
		
	
	
		
			No EOL
		
	
	
		
			2.1 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			79 lines
		
	
	
		
			No EOL
		
	
	
		
			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;
 | ||
|         }
 | ||
|     }
 | ||
| } |