1.处理游戏中退出游戏和最小化房间的情况 2.处理房主踢游戏中用户的情况

This commit is contained in:
huangjian
2021-12-16 15:53:29 +08:00
parent 736853da71
commit a0e514945d
9 changed files with 64 additions and 57 deletions

View File

@@ -313,11 +313,7 @@ public class ButtonItemFactory {
@Override
public void onClick() {
StatisticManager.Instance().onEvent(StatisticsProtocol.Event.data_card_kickout_room_click, "资料卡片-踢出房间");
if (AvRoomDataManager.get().isGamePlaying(AvRoomDataManager.get().getMicPosition(account))) {
SingleToastUtil.showToast("不可以踢出在游戏中的用户!");
return;
}
new DialogManager(context).showOkCancelDialog((AvRoomDataManager.get().isOpenKTV() ? "KTV模式下将自动删除ta的歌曲," : "") + "是否要将此用户踢出房间?",
new DialogManager(context).showOkCancelDialog((AvRoomDataManager.get().isGamePlaying(Long.parseLong(account)) ? "游戏模式下默认该玩家退出游戏" : "") + "是否要将此用户踢出房间?",
true, new DialogManager.AbsOkDialogListener() {
@SuppressLint("CheckResult")
@Override
@@ -424,13 +420,9 @@ public class ButtonItemFactory {
String nick) {
return new ViewItem("拉入黑名单", R.drawable.icon_dialog_mark_black_list, () -> {
StatisticManager.Instance().onEvent(StatisticsProtocol.Event.data_dard_join_blacklist_click, "资料卡片-加入黑名单");
if (AvRoomDataManager.get().isGamePlaying(AvRoomDataManager.get().getMicPosition(account))) {
SingleToastUtil.showToast("不可以拉黑在游戏中的用户!");
return;
}
new DialogManager(context).showOkCancelDialog(
"是否将" + nick + "加入黑名单?加入后他将无法进入此房间" +
(AvRoomDataManager.get().mCurrentRoomInfo != null && AvRoomDataManager.get().isOpenKTV() ? "KTV模式下将自动删除ta的歌曲" : ""), true,
(AvRoomDataManager.get().mCurrentRoomInfo != null && AvRoomDataManager.get().isGamePlaying(Long.parseLong(account)) ? "游戏模式下默认该玩家退出游戏" : ""), true,
() -> {
Single<String> single;

View File

@@ -102,6 +102,7 @@ import com.yizhuan.xchat_android_core.redpackage.RedPackageNotifyInfo;
import com.yizhuan.xchat_android_core.room.bean.RoomInfo;
import com.yizhuan.xchat_android_core.room.bean.SimplePartyRoomInfo;
import com.yizhuan.xchat_android_core.room.dragonball.DragonBallModel;
import com.yizhuan.xchat_android_core.room.event.FinishAvRoomEvent;
import com.yizhuan.xchat_android_core.room.event.RoomClearScreenEvent;
import com.yizhuan.xchat_android_core.room.pk.event.PKStateEvent;
import com.yizhuan.xchat_android_core.statistic.StatisticManager;
@@ -851,6 +852,7 @@ public class AVRoomActivity extends BaseMvpActivity<IAvRoomView, AvRoomPresenter
* 把退出聊天室交给Main执行
*/
public void toBack(boolean justClosePage) {
EventBus.getDefault().post(new FinishAvRoomEvent());
//陪伴房的弹框提示去掉,直接关闭即可
if (!justClosePage) {
getMvpPresenter().exitRoom();
@@ -965,6 +967,7 @@ public class AVRoomActivity extends BaseMvpActivity<IAvRoomView, AvRoomPresenter
* 最小化房间的代码,放在一处
*/
private void minRoomCode() {
EventBus.getDefault().post(new FinishAvRoomEvent());
AvRoomDataManager.get().roomNoDestory = false;
super.onBackPressed();
}

View File

@@ -94,8 +94,10 @@ import com.yizhuan.xchat_android_core.pay.event.FirstChargeEvent
import com.yizhuan.xchat_android_core.room.anotherroompk.ShowGiftDialogEvent
import com.yizhuan.xchat_android_core.room.anotherroompk.ShowUserInfoDialogEvent
import com.yizhuan.xchat_android_core.room.bean.RoomInfo
import com.yizhuan.xchat_android_core.room.event.FinishAvRoomEvent
import com.yizhuan.xchat_android_core.room.event.RoomClearScreenEvent
import com.yizhuan.xchat_android_core.room.face.FaceInfo
import com.yizhuan.xchat_android_core.room.game.GameStatus
import com.yizhuan.xchat_android_core.room.giftvalue.helper.GiftValueMrg
import com.yizhuan.xchat_android_core.room.model.MicQueueModel
import com.yizhuan.xchat_android_core.room.queue.bean.MicMemberInfo
@@ -129,7 +131,7 @@ import kotlin.collections.ArrayList
* @date 2017/7/26
*/
@CreatePresenter(GameRoomPresenter::class)
class GameRoomFragment() : BaseMvpFragment<IGameRoomView?, GameRoomPresenter?>(),
class GameRoomFragment : BaseMvpFragment<IGameRoomView?, GameRoomPresenter?>(),
View.OnClickListener, OnGiftDialogBtnClickListener, IGameRoomView, OnMicroItemClickListener,
OnGameStatusChangeListener {
private var myUid: Long = 0
@@ -210,8 +212,8 @@ class GameRoomFragment() : BaseMvpFragment<IGameRoomView?, GameRoomPresenter?>()
inputLayout.setOnTouchListener { _: View?, _: MotionEvent? ->
inputEdit.clearFocus()
inputLayout.setVisibility(View.GONE)
KeyBoardUtils.hideKeyBoard(getActivity(), inputEdit)
inputLayout.visibility = View.GONE
KeyBoardUtils.hideKeyBoard(activity, inputEdit)
false
}
softKeyboardListener()
@@ -268,7 +270,7 @@ class GameRoomFragment() : BaseMvpFragment<IGameRoomView?, GameRoomPresenter?>()
RxBus.get().toFlowable(ShowUserInfoDialogEvent::class.java)
.compose(bindUntilEvent(FragmentEvent.DESTROY_VIEW))
.observeOn(AndroidSchedulers.mainThread())
.subscribe { showUserCardDialog(it.getUid()) }
.subscribe { showUserCardDialog(it.uid) }
// 刷新礼物列表,获取房间专属礼物列表
GiftModel.get().refreshGiftList(AvRoomDataManager.get().roomUid.toString()).subscribe()
@@ -377,7 +379,7 @@ class GameRoomFragment() : BaseMvpFragment<IGameRoomView?, GameRoomPresenter?>()
RoomEvent.DOWN_MIC -> {
if (AvRoomDataManager.get().isOwner(roomEvent.account)) {
//自己的消息
gameDelegate.exitGame()
gameDelegate.exitGame()
}
onDownMicro(roomEvent.micPosition)
}
@@ -527,7 +529,7 @@ class GameRoomFragment() : BaseMvpFragment<IGameRoomView?, GameRoomPresenter?>()
}
})
val bannerAdapter = RoomActAdapter(mContext, dialogInfo)
rollPagerView.setAdapter(bannerAdapter)
rollPagerView.adapter = bannerAdapter
rollPagerView.setPlayDelay(3000)
//设置透明度
rollPagerView.setAnimationDurtion(500)
@@ -665,11 +667,10 @@ class GameRoomFragment() : BaseMvpFragment<IGameRoomView?, GameRoomPresenter?>()
override fun onStop() {
super.onStop()
gameDelegate.onPause()
gameDelegate.onStop()
}
override fun onDestroyView() {
gameDelegate.onDestroy()
super.onDestroyView()
releaseView()
}
@@ -678,6 +679,7 @@ class GameRoomFragment() : BaseMvpFragment<IGameRoomView?, GameRoomPresenter?>()
mDisposable?.dispose()
mDisposable = null
EventBus.getDefault().unregister(this)
gameDelegate.onDestroy()
super.onDestroy()
}
@@ -866,7 +868,7 @@ class GameRoomFragment() : BaseMvpFragment<IGameRoomView?, GameRoomPresenter?>()
val buttonItem3 = ButtonItem(
if (roomMicInfo.isMicLock) unlockStr else lockStr,
ButtonItem.OnClickListener {
if (roomMicInfo.isMicLock()) {
if (roomMicInfo.isMicLock) {
if (SuperAdminUtil.isSuperAdmin()) {
SingleToastUtil.showToast(SaConstant.TOAST_ERROR_TIPS)
return@OnClickListener
@@ -878,7 +880,7 @@ class GameRoomFragment() : BaseMvpFragment<IGameRoomView?, GameRoomPresenter?>()
}
})
val buttonItem4 =
ButtonItem("上麦", { toUpMicroPhone(micPosition, currentUid.toString() + "", false) })
ButtonItem("上麦") { toUpMicroPhone(micPosition, currentUid.toString() + "", false) }
//别问为什么ui调整了顺序
//禁用超管的上麦和抱TA上麦
if (!SuperAdminUtil.isSuperAdmin()) {
@@ -1064,6 +1066,11 @@ class GameRoomFragment() : BaseMvpFragment<IGameRoomView?, GameRoomPresenter?>()
@SuppressLint("CheckResult")
override fun toUpMicroPhone(micPosition: Int, currentUid: String, b: Boolean) {
if (AvRoomDataManager.get().isSelfGamePlaying) {
SingleToastUtil.showToast("游戏中不可以换麦!")
return
}
UserModel.get().cacheLoginUserInfo?.gameStatus = GameStatus.STATUS_NOT_JOIN
checkPermission(Manifest.permission.RECORD_AUDIO)
.subscribe({ result: Boolean ->
if (result) {
@@ -1169,6 +1176,11 @@ class GameRoomFragment() : BaseMvpFragment<IGameRoomView?, GameRoomPresenter?>()
).openDialog()
}
@Subscribe(threadMode = ThreadMode.MAIN)
fun onFinishAvRoomEvent(event: FinishAvRoomEvent) {
gameDelegate.exitGame()
}
/**
* 底部按钮点击处理
*/
@@ -1331,4 +1343,5 @@ class GameRoomFragment() : BaseMvpFragment<IGameRoomView?, GameRoomPresenter?>()
override fun onGameEnd() {
gameBinding.ivShowMic.callOnClick()
}
}

View File

@@ -30,19 +30,10 @@ import java.util.*
class GameDelegate(val activity: Activity, val container: FrameLayout, var mgId: Long?) {
companion object {
const val STATUS_NOT_JOIN = 0
const val STATUS_NOT_READY = 1
const val STATUS_READY = 2
const val STATUS_PLAYING = 3
}
private val TAG = "GameDelegate"
private var APP_CODE = ""
private val mRoomID = AvRoomDataManager.get().roomUid.toString()
private val mLanguage = "zh-CN" //语言
//调用游戏SDK的接口,成功加载游戏后可用:
@@ -91,7 +82,6 @@ class GameDelegate(val activity: Activity, val container: FrameLayout, var mgId:
login(loginCallback)
}
fun updateGame(mgId: Long?) {
if (mgId == null || mgId == 0L || mgId == mMGID || iSudFSTAPP == null) return
mMGID = mgId
@@ -100,6 +90,7 @@ class GameDelegate(val activity: Activity, val container: FrameLayout, var mgId:
}
fun exitGame() {
UserModel.get().cacheLoginUserInfo?.gameStatus = GameStatus.STATUS_NOT_JOIN
notifySelfPlayingState(false)
notifySelfInState(false)
}
@@ -371,7 +362,7 @@ class GameDelegate(val activity: Activity, val container: FrameLayout, var mgId:
try {
val jsonObject = JSONObject(dataJson)
val seatIndex = jsonObject.optInt("seatIndex", -1)
updateMyMicQueue(STATUS_NOT_READY, true, seatIndex)
updateMyMicQueue(GameStatus.STATUS_NOT_READY, true, seatIndex)
} catch (e: Exception) {
e.printStackTrace()
}
@@ -429,9 +420,9 @@ class GameDelegate(val activity: Activity, val container: FrameLayout, var mgId:
reason = jsonObject.getInt("reason")
}
if (reason == 0) {
updateMyMicQueue(STATUS_NOT_JOIN)
updateMyMicQueue(GameStatus.STATUS_NOT_JOIN)
} else if (reason == 1) {
updateMyMicQueue(STATUS_NOT_JOIN)
updateMyMicQueue(GameStatus.STATUS_NOT_JOIN)
}
}
} catch (e: Exception) {
@@ -481,7 +472,7 @@ class GameDelegate(val activity: Activity, val container: FrameLayout, var mgId:
if (retCode != 0) {
return
}
updateMyMicQueue(if (isReady) STATUS_READY else STATUS_NOT_READY)
updateMyMicQueue(if (isReady) GameStatus.STATUS_READY else GameStatus.STATUS_NOT_READY)
} catch (e: Exception) {
e.printStackTrace()
}
@@ -512,10 +503,10 @@ class GameDelegate(val activity: Activity, val container: FrameLayout, var mgId:
val isPlaying = jsonObject.getBoolean("isPlaying")
if (isPlaying) {
onGameStatusChangeListener?.onGameStart()
updateMyMicQueue(STATUS_PLAYING)
updateMyMicQueue(GameStatus.STATUS_PLAYING)
} else {
onGameStatusChangeListener?.onGameEnd()
updateMyMicQueue(STATUS_NOT_READY)
updateMyMicQueue(GameStatus.STATUS_NOT_READY)
}
} catch (e: Exception) {
e.printStackTrace()

View File

@@ -531,21 +531,6 @@ public class AvRoomPresenter extends BaseMvpPresenter<IAvRoomView> {
});
}
public void upAiMicroPhone(int micPosition, String uId) {
if (AvRoomDataManager.get().mCurrentRoomInfo == null) return;
mAvRoomModel.upAiMicroPhone(micPosition, uId, String.valueOf(AvRoomDataManager.get().mCurrentRoomInfo.getRoomId()),
new CallBack<String>() {
@Override
public void onSuccess(String data) {
Logger.i("用户%1$s上麦成功%2$s", uId, data);
}
@Override
public void onFail(int code, String error) {
Logger.i("用户%1$s上麦失败%2$s----", uId, error);
}
});
}
@Override
public void onDestroyPresenter() {

View File

@@ -39,6 +39,7 @@ import com.yizhuan.xchat_android_core.praise.PraiseModel;
import com.yizhuan.xchat_android_core.room.bean.RoomInfo;
import com.yizhuan.xchat_android_core.room.exception.AntiSpamHitException;
import com.yizhuan.xchat_android_core.room.face.FaceReceiveInfo;
import com.yizhuan.xchat_android_core.room.game.GameStatus;
import com.yizhuan.xchat_android_core.room.giftvalue.helper.GiftValueMrg;
import com.yizhuan.xchat_android_core.room.model.AvRoomModel;
import com.yizhuan.xchat_android_core.room.model.HomePartyModel;
@@ -113,6 +114,13 @@ public class GameRoomPresenter extends BaseMvpPresenter<IGameRoomView> {
if (currentRoom == null) {
return;
}
if (AvRoomDataManager.get().isSelfGamePlaying()){
SingleToastUtil.showToast("游戏中不可以换麦!");
return;
}
if (UserModel.get().getCacheLoginUserInfo() != null) {
UserModel.get().getCacheLoginUserInfo().setGameStatus(GameStatus.STATUS_NOT_JOIN);
}
final String currentUid = String.valueOf(AuthModel.get().getCurrentUid());
if (AvRoomDataManager.get().isRoomOwner(currentUid) || AvRoomDataManager.get().isRoomAdmin(currentUid)
|| SuperAdminUtil.isSuperAdmin()) {

View File

@@ -1043,6 +1043,11 @@ public class UserInfoDialog extends AppCompatDialog implements View.OnClickListe
return;
}
if (AvRoomDataManager.get().isSelfGamePlaying()){
SingleToastUtil.showToast("游戏中不可以主动下麦!");
return;
}
if (AvRoomDataManager.get().mCurrentRoomInfo.isOpenKTV()) {
new DialogManager(context).showOkCancelDialog("KTV模式下下麦会移除您已点的所有歌曲,确定进行此操作?", false,
() -> {
@@ -1307,8 +1312,12 @@ public class UserInfoDialog extends AppCompatDialog implements View.OnClickListe
}
}
if (AvRoomDataManager.get().isGamePlaying(AvRoomDataManager.get().getMicPosition(uid))){
SingleToastUtil.showToast("不可以抱正在游戏中的用户下麦!");
if (AvRoomDataManager.get().isGamePlaying(uid)){
new DialogManager(context).showOkCancelWithTitleDialog("抱Ta下麦后默认该玩家退出游戏,是否继续?",
(DialogManager.LambdaOkDialogListener) () -> {
kickDownMicCode();
dismiss();
});
return;
}
//ktv模式下麦