ServiceFactory.cs 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236
  1. using Ryujinx.Common.Logging;
  2. using Ryujinx.HLE.HOS.Services.Acc;
  3. using Ryujinx.HLE.HOS.Services.Am;
  4. using Ryujinx.HLE.HOS.Services.Apm;
  5. using Ryujinx.HLE.HOS.Services.Aud;
  6. using Ryujinx.HLE.HOS.Services.Bsd;
  7. using Ryujinx.HLE.HOS.Services.Caps;
  8. using Ryujinx.HLE.HOS.Services.Es;
  9. using Ryujinx.HLE.HOS.Services.FspSrv;
  10. using Ryujinx.HLE.HOS.Services.Hid;
  11. using Ryujinx.HLE.HOS.Services.Hid.Irs;
  12. using Ryujinx.HLE.HOS.Services.Ldr;
  13. using Ryujinx.HLE.HOS.Services.Lm;
  14. using Ryujinx.HLE.HOS.Services.Mm;
  15. using Ryujinx.HLE.HOS.Services.Ncm;
  16. using Ryujinx.HLE.HOS.Services.Nfc.Nfp;
  17. using Ryujinx.HLE.HOS.Services.Ns;
  18. using Ryujinx.HLE.HOS.Services.Nv;
  19. using Ryujinx.HLE.HOS.Services.Pctl;
  20. using Ryujinx.HLE.HOS.Services.Pl;
  21. using Ryujinx.HLE.HOS.Services.Pm;
  22. using Ryujinx.HLE.HOS.Services.Prepo;
  23. using Ryujinx.HLE.HOS.Services.Psm;
  24. using Ryujinx.HLE.HOS.Services.Set;
  25. using Ryujinx.HLE.HOS.Services.Sfdnsres;
  26. using Ryujinx.HLE.HOS.Services.Sm;
  27. using Ryujinx.HLE.HOS.Services.Spl;
  28. using Ryujinx.HLE.HOS.Services.Ssl;
  29. using Ryujinx.HLE.HOS.Services.Vi;
  30. using System;
  31. namespace Ryujinx.HLE.HOS.Services
  32. {
  33. public static class ServiceConfiguration
  34. {
  35. public static bool IgnoreMissingServices { get; set; }
  36. }
  37. static class ServiceFactory
  38. {
  39. public static IpcService MakeService(Horizon system, string name)
  40. {
  41. switch (name)
  42. {
  43. case "acc:u0":
  44. return new IAccountService();
  45. case "acc:u1":
  46. return new IAccountService();
  47. case "aoc:u":
  48. return new IAddOnContentManager();
  49. case "apm":
  50. return new IManager();
  51. case "apm:p":
  52. return new IManager();
  53. case "appletAE":
  54. return new IAllSystemAppletProxiesService();
  55. case "appletOE":
  56. return new IApplicationProxyService();
  57. case "audout:u":
  58. return new IAudioOutManager();
  59. case "audren:u":
  60. return new IAudioRendererManager();
  61. case "bcat:a":
  62. return new Bcat.IServiceCreator();
  63. case "bcat:m":
  64. return new Bcat.IServiceCreator();
  65. case "bcat:u":
  66. return new Bcat.IServiceCreator();
  67. case "bcat:s":
  68. return new Bcat.IServiceCreator();
  69. case "bsd:s":
  70. return new IClient(true);
  71. case "bsd:u":
  72. return new IClient(false);
  73. case "caps:a":
  74. return new IAlbumAccessorService();
  75. case "caps:ss":
  76. return new IScreenshotService();
  77. case "csrng":
  78. return new IRandomInterface();
  79. case "es":
  80. return new IeTicketService();
  81. case "friend:a":
  82. return new Friend.IServiceCreator(Friend.FriendServicePermissionLevel.Admin);
  83. case "friend:u":
  84. return new Friend.IServiceCreator(Friend.FriendServicePermissionLevel.User);
  85. case "friend:v":
  86. return new Friend.IServiceCreator(Friend.FriendServicePermissionLevel.Overlay);
  87. case "friend:m":
  88. return new Friend.IServiceCreator(Friend.FriendServicePermissionLevel.Manager);
  89. case "friend:s":
  90. return new Friend.IServiceCreator(Friend.FriendServicePermissionLevel.System);
  91. case "fsp-srv":
  92. return new IFileSystemProxy();
  93. case "hid":
  94. return new IHidServer(system);
  95. case "irs":
  96. return new IIrSensorServer();
  97. case "ldr:ro":
  98. return new IRoInterface();
  99. case "hwopus":
  100. return new IHardwareOpusDecoderManager();
  101. case "lm":
  102. return new ILogService();
  103. case "mm:u":
  104. return new IRequest();
  105. case "ncm":
  106. return new IContentManager();
  107. case "nfp:user":
  108. return new IUserManager();
  109. case "nifm:u":
  110. return new Nifm.IStaticService();
  111. case "ns:am":
  112. return new IApplicationManagerInterface();
  113. case "ns:am2":
  114. case "ns:ec":
  115. return new IServiceGetterInterface();
  116. case "ns:su":
  117. return new ISystemUpdateInterface();
  118. case "ns:vm":
  119. return new IVulnerabilityManagerInterface();
  120. case "nvdrv":
  121. return new INvDrvServices(system);
  122. case "nvdrv:a":
  123. return new INvDrvServices(system);
  124. case "pctl:s":
  125. return new IParentalControlServiceFactory();
  126. case "pctl:r":
  127. return new IParentalControlServiceFactory();
  128. case "pctl:a":
  129. return new IParentalControlServiceFactory();
  130. case "pctl":
  131. return new IParentalControlServiceFactory();
  132. case "pl:u":
  133. return new ISharedFontManager();
  134. case "pm:shell":
  135. return new IShellInterface();
  136. case "prepo:a":
  137. return new IPrepoService();
  138. case "prepo:u":
  139. return new IPrepoService();
  140. case "psm":
  141. return new IPsmServer();
  142. case "set":
  143. return new ISettingsServer();
  144. case "set:sys":
  145. return new ISystemSettingsServer();
  146. case "sfdnsres":
  147. return new IResolver();
  148. case "sm:":
  149. return new IUserInterface();
  150. case "ssl":
  151. return new ISslService();
  152. case "time:a":
  153. return new Time.IStaticService();
  154. case "time:s":
  155. return new Time.IStaticService();
  156. case "time:u":
  157. return new Time.IStaticService();
  158. case "vi:m":
  159. return new IManagerRootService();
  160. case "vi:s":
  161. return new ISystemRootService();
  162. case "vi:u":
  163. return new IApplicationRootService();
  164. }
  165. if (ServiceConfiguration.IgnoreMissingServices)
  166. {
  167. Logger.PrintWarning(LogClass.Service, $"Missing service {name} ignored");
  168. return new DummyService(name);
  169. }
  170. throw new NotImplementedException(name);
  171. }
  172. }
  173. }