/ src / Ryujinx.Horizon / Friends / FriendsIpcServer.cs
FriendsIpcServer.cs
 1  using Ryujinx.Horizon.Sdk.Sf.Hipc;
 2  using Ryujinx.Horizon.Sdk.Sm;
 3  
 4  namespace Ryujinx.Horizon.Friends
 5  {
 6      class FriendsIpcServer
 7      {
 8          private const int MaxSessionsCount = 8;
 9          private const int TotalMaxSessionsCount = MaxSessionsCount * 5;
10  
11          private const int PointerBufferSize = 0xA00;
12          private const int MaxDomains = 64;
13          private const int MaxDomainObjects = 16;
14          private const int MaxPortsCount = 5;
15  
16          private static readonly ManagerOptions _managerOptions = new(PointerBufferSize, MaxDomains, MaxDomainObjects, false);
17  
18          private SmApi _sm;
19          private FriendsServerManager _serverManager;
20  
21          public void Initialize()
22          {
23              HeapAllocator allocator = new();
24  
25              _sm = new SmApi();
26              _sm.Initialize().AbortOnFailure();
27  
28              _serverManager = new FriendsServerManager(allocator, _sm, MaxPortsCount, _managerOptions, TotalMaxSessionsCount);
29  
30  #pragma warning disable IDE0055 // Disable formatting
31              _serverManager.RegisterServer((int)FriendsPortIndex.Admin,   ServiceName.Encode("friend:a"), MaxSessionsCount);
32              _serverManager.RegisterServer((int)FriendsPortIndex.User,    ServiceName.Encode("friend:u"), MaxSessionsCount);
33              _serverManager.RegisterServer((int)FriendsPortIndex.Viewer,  ServiceName.Encode("friend:v"), MaxSessionsCount);
34              _serverManager.RegisterServer((int)FriendsPortIndex.Manager, ServiceName.Encode("friend:m"), MaxSessionsCount);
35              _serverManager.RegisterServer((int)FriendsPortIndex.System,  ServiceName.Encode("friend: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  }