IShopServiceAccessor.cs 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. using Ryujinx.Common.Logging;
  2. using Ryujinx.HLE.HOS.Ipc;
  3. using Ryujinx.HLE.HOS.Kernel.Common;
  4. using Ryujinx.HLE.HOS.Kernel.Threading;
  5. using Ryujinx.HLE.HOS.Services.Nim.ShopServiceAccessServerInterface.ShopServiceAccessServer.ShopServiceAccessor;
  6. using System;
  7. namespace Ryujinx.HLE.HOS.Services.Nim.ShopServiceAccessServerInterface.ShopServiceAccessServer
  8. {
  9. class IShopServiceAccessor : IpcService
  10. {
  11. private readonly KEvent _event;
  12. private int _eventHandle;
  13. public IShopServiceAccessor(Horizon system)
  14. {
  15. _event = new KEvent(system.KernelContext);
  16. }
  17. [CommandHipc(0)]
  18. // CreateAsyncInterface(u64) -> (handle<copy>, object<nn::ec::IShopServiceAsync>)
  19. public ResultCode CreateAsyncInterface(ServiceCtx context)
  20. {
  21. MakeObject(context, new IShopServiceAsync());
  22. if (_eventHandle == 0)
  23. {
  24. if (context.Process.HandleTable.GenerateHandle(_event.ReadableEvent, out _eventHandle) != KernelResult.Success)
  25. {
  26. throw new InvalidOperationException("Out of handles!");
  27. }
  28. }
  29. context.Response.HandleDesc = IpcHandleDesc.MakeCopy(_eventHandle);
  30. Logger.Stub?.PrintStub(LogClass.ServiceNim);
  31. return ResultCode.Success;
  32. }
  33. }
  34. }