/ src / Ryujinx.Horizon / Prepo / PrepoIpcServer.cs
PrepoIpcServer.cs
 1  using Ryujinx.Horizon.Prepo.Types;
 2  using Ryujinx.Horizon.Sdk.Arp;
 3  using Ryujinx.Horizon.Sdk.Sf.Hipc;
 4  using Ryujinx.Horizon.Sdk.Sm;
 5  
 6  namespace Ryujinx.Horizon.Prepo
 7  {
 8      class PrepoIpcServer
 9      {
10          private const int MaxSessionsCount = 12;
11          private const int TotalMaxSessionsCount = MaxSessionsCount * 6;
12  
13          private const int PointerBufferSize = 0x80;
14          private const int MaxDomains = 64;
15          private const int MaxDomainObjects = 16;
16          private const int MaxPortsCount = 6;
17  
18          private static readonly ManagerOptions _managerOptions = new(PointerBufferSize, MaxDomains, MaxDomainObjects, false);
19  
20          private SmApi _sm;
21          private ArpApi _arp;
22          private PrepoServerManager _serverManager;
23  
24          public void Initialize()
25          {
26              HeapAllocator allocator = new();
27  
28              _arp = new ArpApi(allocator);
29  
30              _sm = new SmApi();
31              _sm.Initialize().AbortOnFailure();
32  
33              _serverManager = new PrepoServerManager(allocator, _sm, _arp, MaxPortsCount, _managerOptions, TotalMaxSessionsCount);
34  
35  #pragma warning disable IDE0055 // Disable formatting
36              _serverManager.RegisterServer((int)PrepoPortIndex.Admin,   ServiceName.Encode("prepo:a"),  MaxSessionsCount); // 1.0.0-5.1.0
37              _serverManager.RegisterServer((int)PrepoPortIndex.Admin2,  ServiceName.Encode("prepo:a2"), MaxSessionsCount); // 6.0.0+
38              _serverManager.RegisterServer((int)PrepoPortIndex.Manager, ServiceName.Encode("prepo:m"),  MaxSessionsCount);
39              _serverManager.RegisterServer((int)PrepoPortIndex.User,    ServiceName.Encode("prepo:u"),  MaxSessionsCount);
40              _serverManager.RegisterServer((int)PrepoPortIndex.System,  ServiceName.Encode("prepo:s"),  MaxSessionsCount);
41              _serverManager.RegisterServer((int)PrepoPortIndex.Debug,   ServiceName.Encode("prepo:d"),  MaxSessionsCount); // 1.0.0
42  #pragma warning restore IDE0055
43          }
44  
45          public void ServiceRequests()
46          {
47              _serverManager.ServiceRequests();
48          }
49  
50          public void Shutdown()
51          {
52              _arp.Dispose();
53              _serverManager.Dispose();
54              _sm.Dispose();
55          }
56      }
57  }