TRTCRoom.cs 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. using fis.media.Library.Media.EventArgs;
  2. using fis.media.Library.Media.Members;
  3. using fis.media.Library.Media.Players;
  4. using fis.media.Library.Media.Publisher;
  5. using fis.media.ThirdPartLibrary.Tencent;
  6. using System;
  7. using System.Collections.Generic;
  8. using System.Linq;
  9. using System.Text;
  10. using System.Threading.Tasks;
  11. namespace fis.media.Library.Media.Rooms
  12. {
  13. internal class TRTCRoom : Room, IRtcRoom
  14. {
  15. private static IRoom _instance;
  16. private TRTCChatRoom _trtcChatRoom;
  17. private int _rtcRoomId;
  18. private TRTCRoom():base(RoomTypeEnum.TRTCRoom)
  19. {
  20. _trtcChatRoom = TRTCChatRoom.Instance;
  21. }
  22. public static IRoom Instance => _instance ?? (_instance = new TRTCRoom());
  23. public int RTCRoomId => _rtcRoomId;
  24. public override int EnterRoom(AbstractMember member)
  25. {
  26. if (member is ActiveMember activeMember)
  27. {
  28. if (activeMember.IsOnline)
  29. {
  30. activeMember.ApplyPlayer(GenerateRtcPlayer(activeMember));
  31. }
  32. }
  33. return base.EnterRoom(member);
  34. }
  35. public static AbstractPlayer GenerateRtcPlayer(ActiveMember activeMember)
  36. {
  37. var player = new RtcPlayer(activeMember.Id);
  38. var regionInfo = activeMember.LayerConfig.RegionInfo;
  39. var channels = player.PlayerChannels;
  40. channels.Add(new PlayerChannel()
  41. {
  42. ChannelName = ChannelNameEnum.Main,
  43. ChannelMemberId = activeMember.Id,
  44. ChannelMemberRoleType = activeMember.RoleType,
  45. });
  46. switch (regionInfo.GetChannelTypeEnum())
  47. {
  48. case ChannelTypeEnum.OnlyMainRegion:
  49. break;
  50. case ChannelTypeEnum.MainRegionWithSideOne:
  51. channels.Add(new PlayerChannel()
  52. {
  53. ChannelName = ChannelNameEnum.SideOne,
  54. ChannelMemberId = activeMember.Id,
  55. ChannelMemberRoleType = activeMember.RoleType,
  56. });
  57. break;
  58. case ChannelTypeEnum.MainRegionWithSideTwo:
  59. channels.Add(new PlayerChannel()
  60. {
  61. ChannelName = ChannelNameEnum.SideTwo,
  62. ChannelMemberId = activeMember.Id,
  63. ChannelMemberRoleType = activeMember.RoleType,
  64. });
  65. break;
  66. default:break;
  67. }
  68. return player;
  69. }
  70. protected override bool DoDispose()
  71. {
  72. _trtcChatRoom.Exit();
  73. return base.DoDispose();
  74. }
  75. }
  76. }