RoomVm.kt 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165
  1. package com.swago.room.vm
  2. import android.app.Application
  3. import android.widget.Toast
  4. import androidx.lifecycle.MutableLiveData
  5. import com.swago.baseswago.baseroom.IRoomInfo
  6. import com.swago.baseswago.baseroom.RoleType
  7. import com.swago.baseswago.baseroom.SwagoRoomManager
  8. import com.swago.baseswago.baseroom.viewmodel.AbsRoomVm
  9. import com.swago.baseswago.http.SwagoException
  10. import com.swago.baseswago.inter.ApiManager
  11. import com.swago.baseswago.model.live.AnchorClosedModel
  12. import com.swago.baseswago.model.live.RoomUserModel
  13. import com.swago.baseswago.util.ActivityManagerUtil
  14. import com.swago.baseswago.util.AppContext
  15. import com.swago.baseswago.util.SwagoLoading
  16. import com.swago.room.bean.UserRoomModel
  17. /**
  18. *@date 2021/10/10 09:59
  19. *description:
  20. */
  21. class RoomVm (application: Application) : AbsRoomVm(application) {
  22. val roomUserDataLiveData by lazy {
  23. MutableLiveData<List<RoomUserModel.ListBean>>()
  24. }
  25. val roomClosedLiveData by lazy {
  26. MutableLiveData<Unit>()
  27. }
  28. val anchorCloseLiveData by lazy {
  29. MutableLiveData<AnchorClosedModel>()
  30. }
  31. override fun afterRoomChange(
  32. roleType: Int,
  33. iRoomInfo: IRoomInfo,
  34. callback: (canJoinRoom: Boolean) -> Unit
  35. ) {
  36. if (roleType == RoleType.user){
  37. doUserRoomChange(roleType,iRoomInfo,callback)
  38. }else if (roleType == RoleType.anchor){
  39. doAnchorRoomChange(roleType,iRoomInfo,callback)
  40. }
  41. }
  42. private fun doUserRoomChange(
  43. roleType: Int,
  44. iRoomInfo: IRoomInfo,
  45. callback: (canJoinRoom: Boolean) -> Unit
  46. ) {
  47. requestData2 {
  48. requestData {
  49. val roomModel = ApiManager.roomApi.joinRoom(iRoomInfo.getRoomId())
  50. val roomInfo = iRoomInfo as UserRoomModel
  51. roomInfo.roomModel = roomModel
  52. callback.invoke(true)
  53. }
  54. requestError {
  55. if (it is SwagoException){
  56. if (it.code == 504){
  57. roomClosedLiveData.value = Unit
  58. }else{
  59. Toast.makeText(AppContext.getContext(), it.message, Toast.LENGTH_SHORT).show()
  60. SwagoRoomManager.closeRoom()
  61. callback.invoke(false)
  62. }
  63. }
  64. }
  65. }
  66. }
  67. private fun doAnchorRoomChange(
  68. roleType: Int,
  69. iRoomInfo: IRoomInfo,
  70. callback: (canJoinRoom: Boolean) -> Unit
  71. ) {
  72. requestData2 {
  73. requestData {
  74. SwagoLoading.showLoadingDialog(ActivityManagerUtil.get().currentActivity())
  75. val roomModel = ApiManager.roomApi.startLive()
  76. val roomInfo = iRoomInfo as UserRoomModel
  77. roomInfo.roomModel = roomModel
  78. callback.invoke(true)
  79. SwagoLoading.cancelLoadingDialog()
  80. }
  81. requestError {
  82. if (it is SwagoException){
  83. Toast.makeText(AppContext.getContext(), it.message, Toast.LENGTH_SHORT).show()
  84. }
  85. SwagoRoomManager.closeRoom()
  86. callback.invoke(false)
  87. }
  88. }
  89. }
  90. fun loadRoomData(roomId:String) {
  91. requestData {
  92. val data = ApiManager.roomApi.getRoomUser(roomId)
  93. roomUserDataLiveData.value = data.list
  94. }
  95. }
  96. override fun leaveRoom(iRoomInfo: IRoomInfo) {
  97. leaveCurrentRoom(iRoomInfo)
  98. }
  99. override fun joinedRoom(iRoomInfo: IRoomInfo) {
  100. loadRoomData(iRoomInfo.getRoomId())
  101. }
  102. override fun endRoom(iRoomInfo: IRoomInfo?) {
  103. }
  104. override fun closeRoomed() {
  105. when(SwagoRoomManager.roleType){
  106. RoleType.anchor -> {
  107. if (SwagoRoomManager.iRoomInfo == null){
  108. ActivityManagerUtil.get().currentActivity().finish()
  109. }else{
  110. requestData2(false) {
  111. requestData {
  112. SwagoLoading.showLoadingDialog(ActivityManagerUtil.get().currentActivity())
  113. val data = ApiManager.roomApi.closeLive()
  114. SwagoLoading.cancelLoadingDialog()
  115. anchorCloseLiveData.value = data
  116. }
  117. requestError {
  118. ActivityManagerUtil.get().currentActivity().finish()
  119. }
  120. }
  121. }
  122. }
  123. RoleType.user -> {
  124. SwagoRoomManager.iRoomInfo?.let {
  125. leaveCurrentRoom(it)
  126. }
  127. ActivityManagerUtil.get().finishTopActivity()
  128. }
  129. }
  130. }
  131. private fun leaveCurrentRoom(iRoomInfo: IRoomInfo) {
  132. requestData2(false) {
  133. requestData {
  134. ApiManager.roomApi.leaveRoom(iRoomInfo.getRoomId())
  135. }
  136. requestError {
  137. }
  138. }
  139. }
  140. }