123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165 |
- package com.swago.room.vm
- import android.app.Application
- import android.widget.Toast
- import androidx.lifecycle.MutableLiveData
- import com.swago.baseswago.baseroom.IRoomInfo
- import com.swago.baseswago.baseroom.RoleType
- import com.swago.baseswago.baseroom.SwagoRoomManager
- import com.swago.baseswago.baseroom.viewmodel.AbsRoomVm
- import com.swago.baseswago.http.SwagoException
- import com.swago.baseswago.inter.ApiManager
- import com.swago.baseswago.model.live.AnchorClosedModel
- import com.swago.baseswago.model.live.RoomUserModel
- import com.swago.baseswago.util.ActivityManagerUtil
- import com.swago.baseswago.util.AppContext
- import com.swago.baseswago.util.SwagoLoading
- import com.swago.room.bean.UserRoomModel
- /**
- *@date 2021/10/10 09:59
- *description:
- */
- class RoomVm (application: Application) : AbsRoomVm(application) {
- val roomUserDataLiveData by lazy {
- MutableLiveData<List<RoomUserModel.ListBean>>()
- }
- val roomClosedLiveData by lazy {
- MutableLiveData<Unit>()
- }
- val anchorCloseLiveData by lazy {
- MutableLiveData<AnchorClosedModel>()
- }
- override fun afterRoomChange(
- roleType: Int,
- iRoomInfo: IRoomInfo,
- callback: (canJoinRoom: Boolean) -> Unit
- ) {
- if (roleType == RoleType.user){
- doUserRoomChange(roleType,iRoomInfo,callback)
- }else if (roleType == RoleType.anchor){
- doAnchorRoomChange(roleType,iRoomInfo,callback)
- }
- }
- private fun doUserRoomChange(
- roleType: Int,
- iRoomInfo: IRoomInfo,
- callback: (canJoinRoom: Boolean) -> Unit
- ) {
- requestData2 {
- requestData {
- val roomModel = ApiManager.roomApi.joinRoom(iRoomInfo.getRoomId())
- val roomInfo = iRoomInfo as UserRoomModel
- roomInfo.roomModel = roomModel
- callback.invoke(true)
- }
- requestError {
- if (it is SwagoException){
- if (it.code == 504){
- roomClosedLiveData.value = Unit
- }else{
- Toast.makeText(AppContext.getContext(), it.message, Toast.LENGTH_SHORT).show()
- SwagoRoomManager.closeRoom()
- callback.invoke(false)
- }
- }
- }
- }
- }
- private fun doAnchorRoomChange(
- roleType: Int,
- iRoomInfo: IRoomInfo,
- callback: (canJoinRoom: Boolean) -> Unit
- ) {
- requestData2 {
- requestData {
- SwagoLoading.showLoadingDialog(ActivityManagerUtil.get().currentActivity())
- val roomModel = ApiManager.roomApi.startLive()
- val roomInfo = iRoomInfo as UserRoomModel
- roomInfo.roomModel = roomModel
- callback.invoke(true)
- SwagoLoading.cancelLoadingDialog()
- }
- requestError {
- if (it is SwagoException){
- Toast.makeText(AppContext.getContext(), it.message, Toast.LENGTH_SHORT).show()
- }
- SwagoRoomManager.closeRoom()
- callback.invoke(false)
- }
- }
- }
- fun loadRoomData(roomId:String) {
- requestData {
- val data = ApiManager.roomApi.getRoomUser(roomId)
- roomUserDataLiveData.value = data.list
- }
- }
- override fun leaveRoom(iRoomInfo: IRoomInfo) {
- leaveCurrentRoom(iRoomInfo)
- }
- override fun joinedRoom(iRoomInfo: IRoomInfo) {
- loadRoomData(iRoomInfo.getRoomId())
- }
- override fun endRoom(iRoomInfo: IRoomInfo?) {
- }
- override fun closeRoomed() {
- when(SwagoRoomManager.roleType){
- RoleType.anchor -> {
- if (SwagoRoomManager.iRoomInfo == null){
- ActivityManagerUtil.get().currentActivity().finish()
- }else{
- requestData2(false) {
- requestData {
- SwagoLoading.showLoadingDialog(ActivityManagerUtil.get().currentActivity())
- val data = ApiManager.roomApi.closeLive()
- SwagoLoading.cancelLoadingDialog()
- anchorCloseLiveData.value = data
- }
- requestError {
- ActivityManagerUtil.get().currentActivity().finish()
- }
- }
- }
- }
- RoleType.user -> {
- SwagoRoomManager.iRoomInfo?.let {
- leaveCurrentRoom(it)
- }
- ActivityManagerUtil.get().finishTopActivity()
- }
- }
- }
- private fun leaveCurrentRoom(iRoomInfo: IRoomInfo) {
- requestData2(false) {
- requestData {
- ApiManager.roomApi.leaveRoom(iRoomInfo.getRoomId())
- }
- requestError {
- }
- }
- }
- }
|