VirtualDeviceSessionRegistry.cs 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. using System.Collections.Generic;
  2. namespace Ryujinx.Audio.Renderer.Device
  3. {
  4. /// <summary>
  5. /// Represent an instance containing a registry of <see cref="VirtualDeviceSession"/>.
  6. /// </summary>
  7. public class VirtualDeviceSessionRegistry
  8. {
  9. /// <summary>
  10. /// The session registry, used to store the sessions of a given AppletResourceId.
  11. /// </summary>
  12. private Dictionary<ulong, VirtualDeviceSession[]> _sessionsRegistry = new Dictionary<ulong, VirtualDeviceSession[]>();
  13. /// <summary>
  14. /// The default <see cref="VirtualDevice"/>.
  15. /// </summary>
  16. /// <remarks>This is used when the USB device is the default one on older revision.</remarks>
  17. public VirtualDevice DefaultDevice => VirtualDevice.Devices[0];
  18. /// <summary>
  19. /// The current active <see cref="VirtualDevice"/>.
  20. /// </summary>
  21. // TODO: make this configurable
  22. public VirtualDevice ActiveDevice = VirtualDevice.Devices[2];
  23. /// <summary>
  24. /// Get the associated <see cref="T:VirtualDeviceSession[]"/> from an AppletResourceId.
  25. /// </summary>
  26. /// <param name="resourceAppletId">The AppletResourceId used.</param>
  27. /// <returns>The associated <see cref="T:VirtualDeviceSession[]"/> from an AppletResourceId.</returns>
  28. public VirtualDeviceSession[] GetSessionByAppletResourceId(ulong resourceAppletId)
  29. {
  30. if (_sessionsRegistry.TryGetValue(resourceAppletId, out VirtualDeviceSession[] result))
  31. {
  32. return result;
  33. }
  34. result = CreateSessionsFromBehaviourContext();
  35. _sessionsRegistry.Add(resourceAppletId, result);
  36. return result;
  37. }
  38. /// <summary>
  39. /// Create a new array of sessions for each <see cref="VirtualDevice"/>.
  40. /// </summary>
  41. /// <returns>A new array of sessions for each <see cref="VirtualDevice"/>.</returns>
  42. private static VirtualDeviceSession[] CreateSessionsFromBehaviourContext()
  43. {
  44. VirtualDeviceSession[] virtualDeviceSession = new VirtualDeviceSession[VirtualDevice.Devices.Length];
  45. for (int i = 0; i < virtualDeviceSession.Length; i++)
  46. {
  47. virtualDeviceSession[i] = new VirtualDeviceSession(VirtualDevice.Devices[i]);
  48. }
  49. return virtualDeviceSession;
  50. }
  51. }
  52. }