player.dart 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. import 'package:fis_common/event/event_type.dart';
  2. import 'package:fis_lib_media_rt/base/channel.dart';
  3. import 'package:fis_lib_media_rt/base/member.dart';
  4. import 'package:fis_lib_media_rt/interface/channel.dart';
  5. import 'package:fis_lib_media_rt/interface/member.dart';
  6. import '../interface/player.dart';
  7. import 'room.dart';
  8. /// 播放器
  9. abstract class BasePlayer implements IPlayer {
  10. final BaseRoom room;
  11. BasePlayer({required this.room}) {
  12. channelAdded = FEventHandler<BasePlayChannel>();
  13. channelRemoved = FEventHandler<BasePlayChannel>();
  14. _listenMembers();
  15. }
  16. @override
  17. late final FEventHandler<IPlayChannel> channelAdded;
  18. @override
  19. late final FEventHandler<IPlayChannel> channelRemoved;
  20. void _listenMembers() {
  21. final members = [room.localMember, ...room.remoteMembers];
  22. for (final member in members) {
  23. _listenMember(member);
  24. }
  25. room.memberJoined.addListener(_onMemberAdded);
  26. room.memberLeaved.addListener(_onMemberRemoved);
  27. }
  28. void _onMemberAdded(Object _, IMember e) {
  29. final member = e as BaseMember;
  30. _listenMember(member);
  31. }
  32. void _onMemberRemoved(Object _, IMember e) {
  33. final member = e as BaseMember;
  34. member.channelAdded.removeListener(_onMemberChannelAdded);
  35. member.channelRemoved.removeListener(_onMemberChannelRemoved);
  36. }
  37. void _onMemberChannelAdded(Object _, BaseChannel channel) {
  38. channelAdded.emit(this, channel as BasePlayChannel);
  39. }
  40. void _onMemberChannelRemoved(Object _, BaseChannel channel) {
  41. // channel.stop() //TODO:
  42. channelRemoved.emit(this, channel as BasePlayChannel);
  43. }
  44. void _listenMember(BaseMember member) {
  45. member.channelAdded.addListener(_onMemberChannelAdded);
  46. member.channelRemoved.addListener(_onMemberChannelRemoved);
  47. }
  48. }