PrepoIpcServer.cs 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. using Ryujinx.Horizon.Prepo.Types;
  2. using Ryujinx.Horizon.Sdk.Sf.Hipc;
  3. using Ryujinx.Horizon.Sdk.Sm;
  4. namespace Ryujinx.Horizon.Prepo
  5. {
  6. class PrepoIpcServer
  7. {
  8. private const int PrepoMaxSessionsCount = 12;
  9. private const int PrepoTotalMaxSessionsCount = PrepoMaxSessionsCount * 6;
  10. private const int PointerBufferSize = 0x3800;
  11. private const int MaxDomains = 64;
  12. private const int MaxDomainObjects = 16;
  13. private const int MaxPortsCount = 6;
  14. private static readonly ManagerOptions _logManagerOptions = new(PointerBufferSize, MaxDomains, MaxDomainObjects, false);
  15. private SmApi _sm;
  16. private PrepoServerManager _serverManager;
  17. public void Initialize()
  18. {
  19. HeapAllocator allocator = new();
  20. _sm = new SmApi();
  21. _sm.Initialize().AbortOnFailure();
  22. _serverManager = new PrepoServerManager(allocator, _sm, MaxPortsCount, _logManagerOptions, PrepoTotalMaxSessionsCount);
  23. _serverManager.RegisterServer((int)PrepoPortIndex.Admin, ServiceName.Encode("prepo:a"), PrepoMaxSessionsCount); // 1.0.0-5.1.0
  24. _serverManager.RegisterServer((int)PrepoPortIndex.Admin2, ServiceName.Encode("prepo:a2"), PrepoMaxSessionsCount); // 6.0.0+
  25. _serverManager.RegisterServer((int)PrepoPortIndex.Manager, ServiceName.Encode("prepo:m"), PrepoMaxSessionsCount);
  26. _serverManager.RegisterServer((int)PrepoPortIndex.User, ServiceName.Encode("prepo:u"), PrepoMaxSessionsCount);
  27. _serverManager.RegisterServer((int)PrepoPortIndex.System, ServiceName.Encode("prepo:s"), PrepoMaxSessionsCount);
  28. _serverManager.RegisterServer((int)PrepoPortIndex.Debug, ServiceName.Encode("prepo:d"), PrepoMaxSessionsCount); // 1.0.0
  29. }
  30. public void ServiceRequests()
  31. {
  32. _serverManager.ServiceRequests();
  33. }
  34. public void Shutdown()
  35. {
  36. _serverManager.Dispose();
  37. }
  38. }
  39. }