socket.ts 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176
  1. import { AgoraRTMessage } from '$utils/socket/agoraRTM/agoraRTMIM';
  2. import config from "$config/config";
  3. export default {
  4. provide(){
  5. return {
  6. installSocketItem:(vm)=>{
  7. this.socketItem = vm;
  8. },
  9. sendGift:(data,send:boolean=false)=> this.sendGift(data,send)
  10. }
  11. },
  12. methods:{
  13. // 发送系统消息
  14. sendSystem(message){
  15. if (message && this.socketItem) {
  16. this.socketItem.triggerPushMessage(AgoraRTMessage.system,{
  17. message
  18. });
  19. }
  20. },
  21. // 发送加入房间消息
  22. sendJoinRoom(message){
  23. if (message && this.socketItem) {
  24. let resultData = this.agoraRTMIM.addUserInfo({
  25. message
  26. },true);
  27. this.socketItem.triggerPushMessage(AgoraRTMessage.joinHome,resultData);
  28. this.userJoinRoom().then(()=>{
  29. this.agoraRTMIM.send(resultData,AgoraRTMessage.joinHome);
  30. });
  31. }
  32. },
  33. // 发送礼物消息
  34. sendGift(data,send:boolean=false){
  35. if (data) {
  36. let userInfo = [];
  37. data.giveUserId.map((item)=>{
  38. let info = this.getMicroUserInfo(item);
  39. if (!info && this.giveUser && this.giveUser.uid && this.giveUser.uid === item) {
  40. info = this.giveUser;
  41. }
  42. if (info) {
  43. userInfo.push({
  44. uid:item,
  45. nickname:info.nick_name,
  46. toNick_color:'#000000'
  47. });
  48. }
  49. });
  50. let resultData = this.agoraRTMIM.addGiftInfo(this.agoraRTMIM.addUserInfo({}), {
  51. userInfo:userInfo,
  52. number: data.number,
  53. gift: data.gift
  54. });
  55. if (send) {
  56. this.agoraRTMIM.send(resultData,AgoraRTMessage.gift);
  57. if (data.gift.is_public_server) {
  58. this.sendBroadCast(resultData);
  59. }
  60. } else {
  61. this.socketItem.triggerPushMessage(AgoraRTMessage.gift,resultData);
  62. }
  63. }
  64. },
  65. // 全服播报
  66. sendBroadCast(data){
  67. if (config.globalRTMIM) {
  68. let resultData = config.globalRTMIM.addGlobal(data,this.roomInfo);
  69. return config.globalRTMIM.send(resultData,AgoraRTMessage.gift);
  70. }
  71. },
  72. // 向大家公布麦位信息
  73. sendWheatInfo(){
  74. // 提醒大家麦位信息得到了更新
  75. this.agoraRTMIM.send({
  76. pcWheatData: this.microInfo
  77. },AgoraRTMessage.wheat);
  78. },
  79. // 向大家公布申请排麦状态
  80. sendWheatQueueInfo(user,status:boolean=true){
  81. let resultData = this.agoraRTMIM.addQueueWheat({},user,status);
  82. // 向其他人广播
  83. this.agoraRTMIM.send(resultData,AgoraRTMessage.userRowWheat);
  84. // 执行通知自己
  85. this.agoraRTMIM.triggerMessage(resultData);
  86. }
  87. },
  88. mounted(){
  89. // 监听加入房间
  90. this.agoraRTMIM.on(AgoraRTMessage.joinHome,({data})=> this.addAdmission(data,false));
  91. // 监听收到礼物
  92. this.agoraRTMIM.on(AgoraRTMessage.gift,({data})=> {
  93. console.log(data);
  94. // 获取礼物信息
  95. let gift = this.$store.state.gift && this.$store.state.gift.giftObjectData && this.$store.state.gift.giftObjectData[data.giftId];
  96. if (!gift) {
  97. gift = {
  98. gid: data.giftId,
  99. gift_name: data.e_name,
  100. gift_type: data.type,
  101. play_image: data.show_gift_img || data.show_gif_img,
  102. pcplay_image: data.pcplay_image || data.show_gift_pc_img,
  103. base_image: data.show_img,
  104. gift_price: data.gift_price || 0
  105. }
  106. }
  107. // 获取赠送的用户id
  108. let uid = (data.userInfo || []).map((item)=> item.uid);
  109. this.sendGiveUserGift(gift,uid, gift.gift_price * data.giftNum || 0);
  110. });
  111. // 监听麦位信息
  112. this.agoraRTMIM.on(AgoraRTMessage.wheat,({data})=>{
  113. // app 那边不知为何反复发送此消息,问题是还不对麦位信息,导致的问题,有点多,不敢再开发使用更新了
  114. if (data.wheatData) {
  115. } else if (data.pcWheatData) {
  116. this.contrastWheatInfo(data.pcWheatData);
  117. // 设置当前排麦状态
  118. if (this.hasMicroInfo()) {
  119. this.downMicro();
  120. } else {
  121. // 否则移除订阅
  122. this.unPublish();
  123. }
  124. } else {
  125. this.getRoomMicroInfo(true,true);
  126. }
  127. });
  128. // 全服礼物播报
  129. config.globalRTMIM && config.globalRTMIM.on(AgoraRTMessage.gift,({data})=>{
  130. if (data.roomInfo && data.roomInfo.id !== this.roomInfo.rid) {
  131. this.sendGiveBroadCastGift(data);
  132. }
  133. })
  134. },
  135. beforeUnmount() {
  136. config.globalRTMIM && config.globalRTMIM.off(AgoraRTMessage.gift);
  137. }
  138. }