FriendsIpcServer.cs 1.9 KB

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