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 }