/ src / Ryujinx.Horizon / Bcat / BcatIpcServer.cs
BcatIpcServer.cs
 1  using Ryujinx.Horizon.Bcat.Types;
 2  using Ryujinx.Horizon.Sdk.Sf.Hipc;
 3  using Ryujinx.Horizon.Sdk.Sm;
 4  
 5  namespace Ryujinx.Horizon.Bcat
 6  {
 7      internal class BcatIpcServer
 8      {
 9          private const int MaxSessionsCount = 8;
10          private const int TotalMaxSessionsCount = MaxSessionsCount * 4;
11  
12          private const int PointerBufferSize = 0x400;
13          private const int MaxDomains = 64;
14          private const int MaxDomainObjects = 64;
15          private const int MaxPortsCount = 4;
16  
17          private SmApi _sm;
18          private BcatServerManager _serverManager;
19  
20          private static readonly ManagerOptions _managerOptions = new(PointerBufferSize, MaxDomains, MaxDomainObjects, false);
21  
22          internal void Initialize()
23          {
24              HeapAllocator allocator = new();
25  
26              _sm = new SmApi();
27              _sm.Initialize().AbortOnFailure();
28  
29              _serverManager = new BcatServerManager(allocator, _sm, MaxPortsCount, _managerOptions, TotalMaxSessionsCount);
30  
31  #pragma warning disable IDE0055 // Disable formatting
32              _serverManager.RegisterServer((int)BcatPortIndex.Admin,   ServiceName.Encode("bcat:a"), MaxSessionsCount);
33              _serverManager.RegisterServer((int)BcatPortIndex.Manager, ServiceName.Encode("bcat:m"), MaxSessionsCount);
34              _serverManager.RegisterServer((int)BcatPortIndex.User,    ServiceName.Encode("bcat:u"), MaxSessionsCount);
35              _serverManager.RegisterServer((int)BcatPortIndex.System,  ServiceName.Encode("bcat:s"), MaxSessionsCount);
36  #pragma warning restore IDE0055
37          }
38  
39          public void ServiceRequests()
40          {
41              _serverManager.ServiceRequests();
42          }
43  
44          public void Shutdown()
45          {
46              _serverManager.Dispose();
47              _sm.Dispose();
48          }
49      }
50  }