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 }