ServiceMgr.cs 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. using Ryujinx.Core.OsHle.IpcServices;
  2. using Ryujinx.Core.OsHle.IpcServices.Acc;
  3. using Ryujinx.Core.OsHle.IpcServices.Am;
  4. using Ryujinx.Core.OsHle.IpcServices.Apm;
  5. using Ryujinx.Core.OsHle.IpcServices.Aud;
  6. using Ryujinx.Core.OsHle.IpcServices.Bsd;
  7. using Ryujinx.Core.OsHle.IpcServices.Friend;
  8. using Ryujinx.Core.OsHle.IpcServices.FspSrv;
  9. using Ryujinx.Core.OsHle.IpcServices.Hid;
  10. using Ryujinx.Core.OsHle.IpcServices.Lm;
  11. using Ryujinx.Core.OsHle.IpcServices.Nifm;
  12. using Ryujinx.Core.OsHle.IpcServices.Ns;
  13. using Ryujinx.Core.OsHle.IpcServices.NvServices;
  14. using Ryujinx.Core.OsHle.IpcServices.Pctl;
  15. using Ryujinx.Core.OsHle.IpcServices.Pl;
  16. using Ryujinx.Core.OsHle.IpcServices.Set;
  17. using Ryujinx.Core.OsHle.IpcServices.Sfdnsres;
  18. using Ryujinx.Core.OsHle.IpcServices.Sm;
  19. using Ryujinx.Core.OsHle.IpcServices.Ssl;
  20. using Ryujinx.Core.OsHle.IpcServices.Time;
  21. using Ryujinx.Core.OsHle.IpcServices.Vi;
  22. using System;
  23. using System.Collections.Generic;
  24. namespace Ryujinx.Core.OsHle
  25. {
  26. class ServiceMgr : IDisposable
  27. {
  28. private Dictionary<string, IIpcService> Services;
  29. public ServiceMgr()
  30. {
  31. Services = new Dictionary<string, IIpcService>();
  32. }
  33. public IIpcService GetService(string Name)
  34. {
  35. lock (Services)
  36. {
  37. if (!Services.TryGetValue(Name, out IIpcService Service))
  38. {
  39. switch (Name)
  40. {
  41. case "acc:u0": Service = new ServiceAcc(); break;
  42. case "aoc:u": Service = new ServiceNs(); break;
  43. case "apm": Service = new ServiceApm(); break;
  44. case "apm:p": Service = new ServiceApm(); break;
  45. case "appletOE": Service = new ServiceAppletOE(); break;
  46. case "audout:u": Service = new ServiceAudOut(); break;
  47. case "audren:u": Service = new ServiceAudRen(); break;
  48. case "bsd:s": Service = new ServiceBsd(); break;
  49. case "bsd:u": Service = new ServiceBsd(); break;
  50. case "friend:a": Service = new ServiceFriend(); break;
  51. case "fsp-srv": Service = new ServiceFspSrv(); break;
  52. case "hid": Service = new ServiceHid(); break;
  53. case "lm": Service = new ServiceLm(); break;
  54. case "nifm:u": Service = new ServiceNifm(); break;
  55. case "nvdrv": Service = new ServiceNvDrv(); break;
  56. case "nvdrv:a": Service = new ServiceNvDrv(); break;
  57. case "pctl:a": Service = new ServicePctl(); break;
  58. case "pl:u": Service = new ServicePl(); break;
  59. case "set": Service = new ServiceSet(); break;
  60. case "set:sys": Service = new ServiceSetSys(); break;
  61. case "sfdnsres": Service = new ServiceSfdnsres(); break;
  62. case "sm:": Service = new ServiceSm(); break;
  63. case "ssl": Service = new ServiceSsl(); break;
  64. case "time:s": Service = new ServiceTime(); break;
  65. case "time:u": Service = new ServiceTime(); break;
  66. case "vi:m": Service = new ServiceVi(); break;
  67. case "vi:s": Service = new ServiceVi(); break;
  68. case "vi:u": Service = new ServiceVi(); break;
  69. }
  70. if (Service == null)
  71. {
  72. throw new NotImplementedException(Name);
  73. }
  74. Services.Add(Name, Service);
  75. }
  76. return Service;
  77. }
  78. }
  79. public void Dispose()
  80. {
  81. Dispose(true);
  82. }
  83. protected virtual void Dispose(bool Disposing)
  84. {
  85. if (Disposing)
  86. {
  87. lock (Services)
  88. {
  89. foreach (IIpcService Service in Services.Values)
  90. {
  91. if (Service is IDisposable DisposableSrv)
  92. {
  93. DisposableSrv.Dispose();
  94. }
  95. }
  96. Services.Clear();
  97. }
  98. }
  99. }
  100. }
  101. }