MsgVm.kt 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183
  1. package com.swago.room.vm
  2. import android.app.Application
  3. import android.util.Log
  4. import com.swago.baseswago.baseroom.IRoomInfo
  5. import com.swago.baseswago.baseroom.RoleType
  6. import com.swago.baseswago.baseroom.SwagoRoomManager
  7. import com.swago.baseswago.baseroom.viewmodel.AbsMsgVm
  8. import com.swago.baseswago.im.IRoomChat
  9. import com.swago.baseswago.im.ImConstant.anchor_close_room
  10. import com.swago.baseswago.im.ImConstant.cancel_forbid_speak
  11. import com.swago.baseswago.im.ImConstant.forbid_speak
  12. import com.swago.baseswago.im.ImConstant.remove_room
  13. import com.swago.baseswago.model.im.CusNewMsgBean
  14. import com.swago.baseswago.model.im.RoomChatMsgBean
  15. import com.swago.baseswago.im.ImConstant.room_chat_text
  16. import com.swago.baseswago.im.ImConstant.svg_gift
  17. import com.swago.baseswago.im.ImConstant.user_join_room
  18. import com.swago.baseswago.inter.ApiManager
  19. import com.swago.baseswago.model.im.AnchorRoomClosedBean
  20. import com.swago.baseswago.model.im.UserJoinRoomBean
  21. import com.swago.baseswago.model.live.ReceiveModel
  22. import com.swago.baseswago.model.live.gift.IMGiftModel
  23. import com.swago.baseswago.model.mine.RoomBlack
  24. import com.swago.baseswago.util.UserInfo
  25. /**
  26. *@date 2021/10/10 10:00
  27. *description:
  28. */
  29. class MsgVm (application: Application) : AbsMsgVm(application){
  30. var isReady = false
  31. var newChatMsgFun:((iRoomChat:IRoomChat?)->Unit)? = null
  32. var anchorRoomClosed:((data:AnchorRoomClosedBean?)->Unit)? = null
  33. var inComeChange:((income:String)->Unit)? = null
  34. var updateHotValue:((hotValue:String)->Unit)? = null
  35. var kickFromRoom:(()->Unit)? = null
  36. var forbidSpeakOrCancel:((cancel:Boolean)->Unit)? = null
  37. /**
  38. * 播放svg动画
  39. */
  40. var playSvgUrl:((data:IMGiftModel)->Unit)? = null
  41. /**
  42. * 礼物飘条
  43. */
  44. var waftFun:((data:IMGiftModel)->Unit)? = null
  45. /**
  46. * 礼物弹道展示
  47. */
  48. var showGiftDanDao:((data:IMGiftModel)->Unit)? = null
  49. override fun receiveMsg() {
  50. imGroupNewMsgListener.handleMsgType<CusNewMsgBean<RoomChatMsgBean>>(room_chat_text){
  51. if (it.getGroupId() == SwagoRoomManager.iRoomInfo?.getRoomGroupId()?:""){
  52. it.data?.let {
  53. var isBlack = false
  54. roomUserBlackList.forEach { roomBlack ->
  55. if (it.senderId == roomBlack.black_user_id){
  56. isBlack = true
  57. return@forEach
  58. }
  59. }
  60. if (!isBlack){
  61. newChatMsgFun?.invoke(it)
  62. }
  63. }
  64. }
  65. }
  66. imGroupNewMsgListener.handleMsgType<CusNewMsgBean<UserJoinRoomBean>>(user_join_room){
  67. if (it.getGroupId() == SwagoRoomManager.iRoomInfo?.getRoomGroupId()?:""){
  68. if (SwagoRoomManager.roleType == RoleType.user || it.data?.senderCode != UserInfo.getUserInfo()?.user_account) {
  69. it.data?.let {
  70. newChatMsgFun?.invoke(it)
  71. updateHotValue?.invoke(it.hotValue)
  72. }
  73. }
  74. }
  75. }
  76. imGroupNewMsgListener.handleMsgType<CusNewMsgBean<AnchorRoomClosedBean>>(anchor_close_room){
  77. SwagoRoomManager.iRoomInfo?.let { iRoomInfo ->
  78. if (iRoomInfo.getRoomId()== it.data?.roomId?:""){
  79. anchorRoomClosed?.invoke(it.data)
  80. }
  81. }
  82. }
  83. imGroupNewMsgListener.handleMsgType<CusNewMsgBean<IMGiftModel>>(svg_gift){
  84. SwagoRoomManager.iRoomInfo?.let { iRoomInfo ->
  85. if (isReady){
  86. it.data?.let {
  87. if (iRoomInfo.getRoomId()== it.roomId?:""){
  88. if (it.giftType == 1||it.giftType == 2){
  89. playSvgUrl?.invoke(it)
  90. }
  91. if (it.giftType == 3){
  92. showGiftDanDao?.invoke(it)
  93. }
  94. inComeChange?.invoke(it.incomeCount)
  95. }else{
  96. waftFun?.invoke(it)
  97. }
  98. }
  99. }
  100. }
  101. }
  102. imGroupNewMsgListener.handleMsgType<CusNewMsgBean<ReceiveModel>>(remove_room){
  103. SwagoRoomManager.iRoomInfo?.let { iRoomInfo ->
  104. UserInfo.getUserInfo()?.let { userInfo ->
  105. it.data?.let {
  106. if (it.roomId == iRoomInfo.getRoomId()&&it.receiverId==userInfo.id) {
  107. kickFromRoom?.invoke()
  108. }
  109. }
  110. }
  111. }
  112. }
  113. imGroupNewMsgListener.handleMsgType<CusNewMsgBean<ReceiveModel>>(forbid_speak){
  114. SwagoRoomManager.iRoomInfo?.let { iRoomInfo ->
  115. UserInfo.getUserInfo()?.let { userInfo ->
  116. it.data?.let {
  117. if (it.roomId == iRoomInfo.getRoomId()&&it.receiverId==userInfo.id) {
  118. forbidSpeakOrCancel?.invoke(true)
  119. }
  120. }
  121. }
  122. }
  123. }
  124. imGroupNewMsgListener.handleMsgType<CusNewMsgBean<ReceiveModel>>(cancel_forbid_speak){
  125. SwagoRoomManager.iRoomInfo?.let { iRoomInfo ->
  126. UserInfo.getUserInfo()?.let { userInfo ->
  127. it.data?.let {
  128. if (it.roomId == iRoomInfo.getRoomId()&&it.receiverId==userInfo.id) {
  129. forbidSpeakOrCancel?.invoke(false)
  130. }
  131. }
  132. }
  133. }
  134. }
  135. }
  136. override fun changeRoom(iRoomInfo: IRoomInfo) {
  137. }
  138. override fun leaveRoom(iRoomInfo: IRoomInfo) {
  139. }
  140. private val roomUserBlackList = ArrayList<RoomBlack>()
  141. private var isFirstLoad = true
  142. override fun joinedRoom(iRoomInfo: IRoomInfo) {
  143. requestData {
  144. if (isFirstLoad){
  145. val data = ApiManager.userApi.getRoomBlackList(2)
  146. isFirstLoad = false
  147. data.list?.let { roomUserBlackList.addAll(it) }
  148. }
  149. }
  150. }
  151. override fun endRoom(iRoomInfo: IRoomInfo?) {
  152. }
  153. override fun closeRoomed() {
  154. }
  155. }