# Conflicts: # app/build.gradle # common/src/main/res/values-zh-rHK/strings.xml # common/src/main/res/values-zh-rTW/strings.xml # common/src/main/res/values/strings.xml
800 lines
33 KiB
Java
800 lines
33 KiB
Java
package com.yunbao.live.activity;
|
||
|
||
import android.Manifest;
|
||
import android.app.Activity;
|
||
import android.os.Bundle;
|
||
import android.os.Handler;
|
||
import android.os.Looper;
|
||
import android.text.TextUtils;
|
||
import android.util.Log;
|
||
import android.view.View;
|
||
import android.widget.FrameLayout;
|
||
import android.widget.ImageView;
|
||
import android.widget.TextView;
|
||
|
||
import androidx.lifecycle.Observer;
|
||
import androidx.recyclerview.widget.LinearLayoutManager;
|
||
import androidx.recyclerview.widget.RecyclerView;
|
||
|
||
import com.alibaba.android.arouter.facade.annotation.Route;
|
||
import com.blankj.utilcode.util.LogUtils;
|
||
import com.google.gson.Gson;
|
||
import com.lxj.xpopup.XPopup;
|
||
import com.lzf.easyfloat.EasyFloat;
|
||
import com.yunbao.common.CommonAppConfig;
|
||
import com.yunbao.common.Constants;
|
||
import com.yunbao.common.R;
|
||
import com.yunbao.common.activity.AbsActivity;
|
||
import com.yunbao.common.adapter.SudGameChatAdapter;
|
||
import com.yunbao.common.adapter.SudGameUserListAdapter;
|
||
import com.yunbao.common.bean.CheckRemainingBalance;
|
||
import com.yunbao.common.bean.CreateSudRoomModel;
|
||
import com.yunbao.common.bean.CustomSidebarChildModel;
|
||
import com.yunbao.common.bean.CustomSidebarInfoModel;
|
||
import com.yunbao.common.bean.HttpCallbackModel;
|
||
import com.yunbao.common.bean.RoomMicStatusModel;
|
||
import com.yunbao.common.bean.SudGameChatImModel;
|
||
import com.yunbao.common.bean.SudGameInfoBean;
|
||
import com.yunbao.common.bean.SudGameScoreBean;
|
||
import com.yunbao.common.bean.SudGameUserModel;
|
||
import com.yunbao.common.bean.SudSettleBean;
|
||
import com.yunbao.common.dialog.AbsDialogCenterPopupWindow;
|
||
import com.yunbao.common.dialog.SudGameDoubleDialog;
|
||
import com.yunbao.common.dialog.SudGameMultipleDialog;
|
||
import com.yunbao.common.dialog.SudGameInputPopupWindow;
|
||
import com.yunbao.common.dialog.SudLoadDialog;
|
||
import com.yunbao.common.event.CheckRemainingBalanceEvent;
|
||
import com.yunbao.common.event.SudGameSocketImEvent;
|
||
import com.yunbao.common.glide.ImgLoader;
|
||
import com.yunbao.common.http.base.HttpCallback;
|
||
import com.yunbao.common.http.live.LiveNetManager;
|
||
import com.yunbao.common.manager.IMLoginManager;
|
||
import com.yunbao.common.manager.imrongcloud.GameSwMicManager;
|
||
import com.yunbao.common.sud.QuickStartGameViewModel;
|
||
import com.yunbao.common.sud.model.GameConfigModel;
|
||
import com.yunbao.common.sud.model.GameViewInfoModel;
|
||
import com.yunbao.common.sud.state.SudMGPMGState;
|
||
import com.yunbao.common.utils.Bus;
|
||
import com.yunbao.common.utils.DpUtil;
|
||
import com.yunbao.common.utils.ProcessResultUtil;
|
||
import com.yunbao.common.utils.RouteUtil;
|
||
import com.yunbao.common.utils.ToastUtil;
|
||
import com.yunbao.common.utils.WordUtil;
|
||
import com.yunbao.common.views.LiveSudGameHistoryPopup;
|
||
import com.yunbao.common.views.TopGradual;
|
||
import com.yunbao.common.views.floatingview.APPEasyFloat;
|
||
import com.yunbao.common.views.weight.ViewClicksAntiShake;
|
||
import com.yunbao.live.dialog.LiveUserDialogFragment;
|
||
|
||
import org.greenrobot.eventbus.Subscribe;
|
||
import org.greenrobot.eventbus.ThreadMode;
|
||
|
||
import java.util.ArrayList;
|
||
import java.util.List;
|
||
import java.util.Locale;
|
||
|
||
import cn.rongcloud.rtc.api.RCRTCEngine;
|
||
import cn.rongcloud.rtc.api.RCRTCRemoteUser;
|
||
import cn.rongcloud.rtc.api.RCRTCRoom;
|
||
import cn.rongcloud.rtc.api.stream.RCRTCInputStream;
|
||
import cn.rongcloud.rtc.base.RTCErrorCode;
|
||
import io.agora.beautyapi.faceunity.agora.SWAuManager;
|
||
import io.rong.imlib.IRongCoreCallback;
|
||
import io.rong.imlib.IRongCoreEnum;
|
||
import io.rong.imlib.chatroom.base.RongChatRoomClient;
|
||
|
||
@Route(path = RouteUtil.PATH_SudSwGameActivity)
|
||
public class SudSwGameActivity extends AbsActivity implements GameSwMicManager.MeetingCallback {
|
||
private FrameLayout gameContainer;
|
||
private long mInteractionID;
|
||
private String mLiveUid;
|
||
private final QuickStartGameViewModel gameViewModel = new QuickStartGameViewModel(); // 创建ViewModel
|
||
|
||
private CreateSudRoomModel mCreateSudRoomModel;
|
||
private TextView roomName, roomNumber;
|
||
private GameSwMicManager gameMicManager;
|
||
private ImageView gameCloseWheat, gameSeat;
|
||
private boolean disable = true, publishDefault = false;
|
||
|
||
private RecyclerView chatList, userList;
|
||
private SudGameChatAdapter mLiveChatAdapter;
|
||
private SudGameUserListAdapter sudGameUserListAdapter;
|
||
private ProcessResultUtil mProcessResultUtil;
|
||
private List<String> muteUser = new ArrayList<>();
|
||
private boolean imOff;
|
||
private boolean isSw = CommonAppConfig.getInstance().getConfig().isSw();
|
||
private SudGameDoubleDialog sudGameDoubleDialog;//双人游戏弹窗
|
||
private SudGameMultipleDialog sudGameMultipleDialog;//多人游戏弹窗
|
||
private SudLoadDialog sudLoadDialog;//加载弹窗
|
||
|
||
@Override
|
||
protected int getLayoutId() {
|
||
return R.layout.activity_sud_game;
|
||
}
|
||
|
||
@Override
|
||
protected void main() {
|
||
Bus.getOn(this);
|
||
super.main();
|
||
initView();
|
||
//进游戏房就关掉小窗
|
||
EasyFloat.dismiss("LiveFloatView", true);
|
||
APPEasyFloat.getInstance().dismiss(mContext);
|
||
initDate();
|
||
}
|
||
|
||
private List<CustomSidebarChildModel> customSidebarChildModels = new ArrayList<>();
|
||
|
||
private void initDate() {
|
||
|
||
LiveNetManager.get(mContext).getCustomSidebarInfo("1", new HttpCallback<List<CustomSidebarInfoModel>>() {
|
||
@Override
|
||
public void onSuccess(List<CustomSidebarInfoModel> data) {
|
||
for (CustomSidebarInfoModel datum : data) {
|
||
if (datum.getType().equals("6")) {
|
||
customSidebarChildModels = datum.getChild();
|
||
return;
|
||
}
|
||
}
|
||
}
|
||
|
||
@Override
|
||
public void onError(String error) {
|
||
|
||
}
|
||
});
|
||
|
||
// 设置禁用麦克风采集
|
||
//RCRTCEngine.getInstance().getDefaultAudioStream().setMicrophoneDisable(disable);
|
||
ImgLoader.display(mContext, R.mipmap.icon_game_close_wheat, gameCloseWheat);
|
||
gameCloseWheat.setVisibility(View.INVISIBLE);
|
||
|
||
mProcessResultUtil = new ProcessResultUtil(this);
|
||
LiveNetManager.get(mContext).getRoomMicStatus(new HttpCallback<RoomMicStatusModel>() {
|
||
@Override
|
||
public void onSuccess(RoomMicStatusModel data) {
|
||
gameMicManager = new GameSwMicManager();
|
||
gameMicManager.attachView(SudSwGameActivity.this);
|
||
gameMicManager.config(SudSwGameActivity.this);
|
||
//初始化声网引擎
|
||
SWAuManager.get().initRtcEngineAudio(mContext);
|
||
//语音
|
||
if (TextUtils.equals(data.getMicStatus(), "1")) {
|
||
imOff = true;
|
||
gameSeat.setVisibility(View.VISIBLE);
|
||
userList.setVisibility(View.VISIBLE);
|
||
new Handler().postDelayed(new Runnable() {
|
||
@Override
|
||
public void run() {
|
||
if (!mProcessResultUtil.checkPermissions(new String[]{Manifest.permission.RECORD_AUDIO})) {
|
||
ToastUtil.show("拒绝权限将无法使用上麦功能");
|
||
mProcessResultUtil.requestPermissions(new String[]{Manifest.permission.RECORD_AUDIO}, new Runnable() {
|
||
@Override
|
||
public void run() {
|
||
|
||
}
|
||
});
|
||
}
|
||
}
|
||
}, 1500);
|
||
} else {
|
||
imOff = false;
|
||
gameSeat.setVisibility(View.GONE);
|
||
userList.setVisibility(View.GONE);
|
||
}
|
||
if (TextUtils.equals(data.getImStatus(), "1")) {
|
||
findViewById(R.id.game_review_input).setVisibility(View.VISIBLE);
|
||
chatList.setVisibility(View.VISIBLE);
|
||
} else {
|
||
findViewById(R.id.game_review_input).setVisibility(View.GONE);
|
||
chatList.setVisibility(View.GONE);
|
||
}
|
||
gameMicManager.setmRoomID(mLiveUid);
|
||
if (isSw) {
|
||
SWAuManager.get().joinAudioRoom("v" + mLiveUid, CommonAppConfig.SWToken, Integer.parseInt(CommonAppConfig.getInstance().getUid()));
|
||
onJoinRoomSuccess(null);
|
||
onJoinSuccess();
|
||
} else {
|
||
gameMicManager.joinRoom(mLiveUid, imOff);
|
||
}
|
||
}
|
||
|
||
@Override
|
||
public void onError(String error) {
|
||
imOff = false;
|
||
//文字
|
||
findViewById(R.id.game_review_input).setVisibility(View.GONE);
|
||
chatList.setVisibility(View.GONE);
|
||
//语音
|
||
gameCloseWheat.setVisibility(View.GONE);
|
||
gameSeat.setVisibility(View.GONE);
|
||
userList.setVisibility(View.GONE);
|
||
}
|
||
});
|
||
}
|
||
|
||
private void onJoinSuccess() {
|
||
RongChatRoomClient.getInstance().joinChatRoom("v" + mLiveUid, -1, new IRongCoreCallback.OperationCallback() {
|
||
@Override
|
||
public void onSuccess() {
|
||
Log.i("tx", "加入成功");
|
||
gameMicManager.enterRoom();
|
||
}
|
||
|
||
@Override
|
||
public void onError(IRongCoreEnum.CoreErrorCode coreErrorCode) {
|
||
Log.i("tx", "加入" + "失败" + coreErrorCode);
|
||
if (WordUtil.isNewZh()) {
|
||
ToastUtil.show("網絡不佳無法連接,請重新進入");
|
||
} else {
|
||
ToastUtil.show("The network is not connected, please re-enter");
|
||
}
|
||
}
|
||
});
|
||
}
|
||
|
||
|
||
@Override
|
||
protected void onDestroy() {
|
||
|
||
LiveNetManager.get(mContext).leaveMic(mLiveUid, new HttpCallback<HttpCallbackModel>() {
|
||
@Override
|
||
public void onSuccess(HttpCallbackModel data) {
|
||
|
||
}
|
||
|
||
@Override
|
||
public void onError(String error) {
|
||
|
||
}
|
||
});
|
||
if(isSw){
|
||
SWAuManager.get().exitChannelAll();
|
||
}
|
||
if (gameMicManager != null) {
|
||
gameMicManager.leaveRoom();
|
||
gameMicManager.detachView();
|
||
}
|
||
|
||
Bus.getOff(this);
|
||
|
||
super.onDestroy();
|
||
}
|
||
|
||
private void initView() {
|
||
|
||
String createSudRoomJson = getIntent().getStringExtra("CreateSudRoom");
|
||
mCreateSudRoomModel = new Gson().fromJson(createSudRoomJson, CreateSudRoomModel.class);
|
||
mInteractionID = mCreateSudRoomModel.getLongSudGameId();
|
||
mLiveUid = mCreateSudRoomModel.getSudGameRoomId();
|
||
//第二次进入时,viewmodel数据丢失,所以初始化时直接获取
|
||
gameViewModel.getScore(mCreateSudRoomModel.getSudGameRoomId(),mContext);
|
||
|
||
gameContainer = findViewById(R.id.game_container);
|
||
roomName = findViewById(R.id.room_name);
|
||
roomNumber = findViewById(R.id.room_number);
|
||
gameCloseWheat = findViewById(R.id.game_close_wheat);
|
||
gameSeat = findViewById(R.id.game_seat);
|
||
chatList = findViewById(R.id.chat_list);
|
||
userList = findViewById(R.id.user_list);
|
||
//聊天栏
|
||
FrameLayout.LayoutParams params1 = (FrameLayout.LayoutParams) chatList.getLayoutParams();
|
||
params1.topMargin = DpUtil.dp2px(65);
|
||
chatList.setLayoutParams(params1);
|
||
|
||
chatList.setHasFixedSize(true);
|
||
LinearLayoutManager layoutManager = new LinearLayoutManager(mContext);
|
||
layoutManager.setOrientation(RecyclerView.VERTICAL);
|
||
layoutManager.setStackFromEnd(true);
|
||
chatList.setLayoutManager(layoutManager);
|
||
chatList.addItemDecoration(new TopGradual());
|
||
chatList.setItemViewCacheSize(10);
|
||
mLiveChatAdapter = new SudGameChatAdapter(mContext);
|
||
chatList.setAdapter(mLiveChatAdapter);
|
||
sudGameUserListAdapter = new SudGameUserListAdapter(new ArrayList<>());
|
||
ImgLoader.display(mContext, WordUtil.isNewZh() ? R.mipmap.icon_game_seat : R.mipmap.icon_game_seat_en, gameSeat);
|
||
sudGameUserListAdapter.setSudGameSmallCallBack(new SudGameUserListAdapter.SudGameSmallCallBack() {
|
||
@Override
|
||
public void unMute(String userID, int position) {
|
||
if (!TextUtils.equals(String.valueOf(IMLoginManager.get(mContext).getUserInfo().getId()), userID)) {
|
||
if (isSw) {
|
||
//靜音
|
||
SWAuManager.get().setMicAudio(Integer.parseInt(userID), false);
|
||
onSubscribeSuccess(userID, false, position);
|
||
} else {
|
||
gameMicManager.refreshStreams(userID, false, position);
|
||
}
|
||
} else {
|
||
ToastUtil.show(WordUtil.isNewZh() ? "無法對本人靜音" : "Unable to mute myself");
|
||
}
|
||
muteUser.remove(userID);
|
||
}
|
||
|
||
@Override
|
||
public void mute(String userID, int position) {
|
||
muteUser.add(userID);
|
||
if (!TextUtils.equals(String.valueOf(IMLoginManager.get(mContext).getUserInfo().getId()), userID)) {
|
||
if (isSw) {
|
||
//开启声音
|
||
SWAuManager.get().setMicAudio(Integer.parseInt(userID), true);
|
||
onSubscribeSuccess(userID, true, position);
|
||
} else {
|
||
gameMicManager.refreshStreams(userID, true, position);
|
||
}
|
||
} else {
|
||
ToastUtil.show(WordUtil.isNewZh() ? "無法對本人靜音" : "Unable to mute myself");
|
||
}
|
||
}
|
||
|
||
@Override
|
||
public void viewInformation(SudGameUserModel sudGameUserModel) {
|
||
LiveUserDialogFragment fragment = new LiveUserDialogFragment();
|
||
Bundle bundle = new Bundle();
|
||
bundle.putString(Constants.LIVE_UID, "uid");
|
||
bundle.putString(Constants.STREAM, "");
|
||
bundle.putString(Constants.TO_UID, sudGameUserModel.getId() + "");
|
||
fragment.setArguments(bundle);
|
||
fragment.show(((SudSwGameActivity) mContext).getSupportFragmentManager(), "LiveUserDialogFragment");
|
||
}
|
||
});
|
||
userList.setLayoutManager(new LinearLayoutManager(mContext, LinearLayoutManager.HORIZONTAL, false));
|
||
userList.setAdapter(sudGameUserListAdapter);
|
||
if (mCreateSudRoomModel != null) {
|
||
roomName.setText(mCreateSudRoomModel.getRoomName());
|
||
roomNumber.setText(mCreateSudRoomModel.getSudGameRoomId());
|
||
}
|
||
|
||
ViewClicksAntiShake.clicksAntiShake(findViewById(R.id.exit), new ViewClicksAntiShake.ViewClicksCallBack() {
|
||
@Override
|
||
public void onViewClicks() {
|
||
gameViewModel.onDestroy();
|
||
finish();
|
||
}
|
||
});
|
||
ViewClicksAntiShake.clicksAntiShake(findViewById(R.id.sud_history), new ViewClicksAntiShake.ViewClicksCallBack() {
|
||
@Override
|
||
public void onViewClicks() {
|
||
|
||
new XPopup.Builder(mContext).enableDrag(false).asCustom(new LiveSudGameHistoryPopup(mContext, customSidebarChildModels)).show();
|
||
}
|
||
});
|
||
|
||
ViewClicksAntiShake.clicksAntiShake(findViewById(R.id.game_seat), new ViewClicksAntiShake.ViewClicksCallBack() {
|
||
@Override
|
||
public void onViewClicks() {
|
||
if (imOff && gameMicManager != null) {
|
||
if (mProcessResultUtil.checkPermissions(new String[]{Manifest.permission.RECORD_AUDIO})) {
|
||
if (publishDefault) {
|
||
disable = true;
|
||
// 设置禁用麦克风采集
|
||
if (isSw) {
|
||
//下麥
|
||
SWAuManager.get().setMicAn(false);
|
||
onUnPublishStreamsSuccess();
|
||
} else {
|
||
RCRTCEngine.getInstance().getDefaultAudioStream().setMicrophoneDisable(disable);
|
||
// ImgLoader.display(mContext, R.mipmap.icon_game_close_wheat, gameCloseWheat);
|
||
gameMicManager.unPublishStreams();
|
||
}
|
||
} else {
|
||
if (sudGameUserListAdapter.isMicMax()) {
|
||
ToastUtil.show(WordUtil.isNewZh() ? "上麥人數最大7人" : "The maximum number of people on the microphone is 7");
|
||
} else {
|
||
//上麦
|
||
if (isSw) {
|
||
SWAuManager.get().setMicAn(true);
|
||
onPublishSuccess();
|
||
} else {
|
||
gameMicManager.publishDefaultAVStream();
|
||
}
|
||
}
|
||
}
|
||
} else {
|
||
mProcessResultUtil.requestPermissions(new String[]{Manifest.permission.RECORD_AUDIO}, new Runnable() {
|
||
@Override
|
||
public void run() {
|
||
|
||
}
|
||
});
|
||
}
|
||
}
|
||
}
|
||
});
|
||
ViewClicksAntiShake.clicksAntiShake(gameCloseWheat, new ViewClicksAntiShake.ViewClicksCallBack() {
|
||
@Override
|
||
public void onViewClicks() {
|
||
if (imOff && gameMicManager != null) {
|
||
|
||
gameCloseWheat.post(new Runnable() {
|
||
@Override
|
||
public void run() {
|
||
if (disable) {
|
||
disable = false;
|
||
// 设置禁用麦克风采集
|
||
if (isSw) {
|
||
SWAuManager.get().setMicAn(true);
|
||
} else {
|
||
RCRTCEngine.getInstance().getDefaultAudioStream().setMicrophoneDisable(disable);
|
||
}
|
||
ImgLoader.display(mContext, R.mipmap.icon_game_open_wheat, gameCloseWheat);
|
||
LiveNetManager.get(mContext).onMic(mLiveUid, new HttpCallback<HttpCallbackModel>() {
|
||
@Override
|
||
public void onSuccess(HttpCallbackModel data) {
|
||
|
||
}
|
||
|
||
@Override
|
||
public void onError(String error) {
|
||
|
||
}
|
||
});
|
||
ToastUtil.show(WordUtil.isNewZh() ? "麥克風已開啟" : "Microphone turned on");
|
||
} else {
|
||
disable = true;
|
||
// 设置禁用麦克风采集
|
||
if(isSw){
|
||
SWAuManager.get().setMicAn(false);
|
||
}else{
|
||
RCRTCEngine.getInstance().getDefaultAudioStream().setMicrophoneDisable(disable);
|
||
}
|
||
ImgLoader.display(mContext, R.mipmap.icon_game_close_wheat, gameCloseWheat);
|
||
LiveNetManager.get(mContext).offMic(mLiveUid, new HttpCallback<HttpCallbackModel>() {
|
||
@Override
|
||
public void onSuccess(HttpCallbackModel data) {
|
||
|
||
}
|
||
|
||
@Override
|
||
public void onError(String error) {
|
||
|
||
}
|
||
});
|
||
ToastUtil.show(WordUtil.isNewZh() ? "麥克風已關閉" : "Microphone turned off");
|
||
}
|
||
}
|
||
});
|
||
|
||
|
||
}
|
||
|
||
|
||
}
|
||
});
|
||
ViewClicksAntiShake.clicksAntiShake(findViewById(R.id.game_review_input), new ViewClicksAntiShake.ViewClicksCallBack() {
|
||
@Override
|
||
public void onViewClicks() {
|
||
new XPopup.Builder(mContext).enableDrag(false).asCustom(new SudGameInputPopupWindow(mContext, new SudGameInputPopupWindow.SudGameInputCallBack() {
|
||
@Override
|
||
public void sendMessage(String textMessage) {
|
||
gameMicManager.sendMessage(textMessage);
|
||
}
|
||
})).show();
|
||
}
|
||
});
|
||
|
||
gameViewModel.gameViewLiveData.observe(this, new Observer<View>() {
|
||
@Override
|
||
public void onChanged(View view) {
|
||
if (view == null) { // 在关闭游戏时,把游戏View给移除
|
||
gameContainer.removeAllViews();
|
||
} else { // 把游戏View添加到容器内
|
||
gameContainer.addView(view, FrameLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.MATCH_PARENT);
|
||
}
|
||
}
|
||
});
|
||
// 加载游戏,参数定义可查看BaseGameViewModel.switchGame()方法注释
|
||
// 游戏配置
|
||
GameConfigModel gameConfigModel = gameViewModel.getGameConfigModel();
|
||
gameConfigModel.ui.ping.hide = true; // 配置不隐藏ping值
|
||
gameConfigModel.ui.level.hide = true; // 配置不隐藏ping值
|
||
gameConfigModel.ui.lobby_game_setting.hide = true; // 配置不隐藏ping值
|
||
gameConfigModel.ui.gameSettle.hide = true;//是否隐藏结算界面(false: 显示; true: 隐藏,默认为 false)
|
||
|
||
gameConfigModel.ui.lobby_players.custom = true;
|
||
gameConfigModel.ui.join_btn.custom = true;
|
||
gameConfigModel.ui.game_settle_again_btn.custom = true;
|
||
gameConfigModel.ui.start_btn.custom = true;
|
||
|
||
|
||
// SudMGP平台64bit游戏ID
|
||
gameViewModel.switchGame((Activity) mContext, mLiveUid, mInteractionID);
|
||
// gameViewModel.sudFSTAPPDecorator.notifyAPPCommonSelfIn(true, -1, true, 1);
|
||
// gameViewModel.sudFSTAPPDecorator.notifyAPPCommonSelfCaptain(String.valueOf(IMLoginManager.get(mContext).getUserInfo().getId()));
|
||
// ViewClicksAntiShake.clicksAntiShake(gameTitle, new ViewClicksAntiShake.ViewClicksCallBack() {
|
||
// @Override
|
||
// public void onViewClicks() {
|
||
//
|
||
// }
|
||
// });
|
||
// 设置游戏安全操作区域
|
||
GameViewInfoModel.GameViewRectModel gameViewRectModel = new GameViewInfoModel.GameViewRectModel();
|
||
gameViewRectModel.left = 0;
|
||
gameViewRectModel.top = DpUtil.dp2px(180); //游戏安全区域
|
||
gameViewRectModel.right = 0;
|
||
gameViewRectModel.bottom = DpUtil.dp2px(155);
|
||
gameViewModel.gameViewRectModel = gameViewRectModel;
|
||
|
||
//初始化结算弹窗
|
||
sudGameDoubleDialog = new SudGameDoubleDialog(this);//双人游戏
|
||
sudGameMultipleDialog = new SudGameMultipleDialog(this);//多人游戏
|
||
sudLoadDialog = new SudLoadDialog(this);//加载弹窗
|
||
|
||
//游戏结算结束
|
||
gameViewModel.listMutableLiveData.observe(this, sudSettleBeans -> {
|
||
//观察结算排名数据,点击跳过和再来一局不需要显示结算界面
|
||
if (sudLoadDialog.getClickStatus() == 0) {
|
||
sudLoadDialog.dismiss();
|
||
if (gameViewModel.getSudGameScoreBean().getGame_mode() == 1) {
|
||
//双人游戏
|
||
sudGameDoubleDialog.setSudSettleList(sudSettleBeans);
|
||
sudGameDoubleDialog.showDialog();
|
||
} else {
|
||
//多人游戏
|
||
sudGameMultipleDialog.setSudSettleList(sudSettleBeans);
|
||
sudGameMultipleDialog.showDialog();
|
||
}
|
||
}
|
||
});
|
||
|
||
//加载弹窗消失监听,自动消失和点击跳过在这个监听中都不做处理
|
||
sudLoadDialog.setOnDismissListener(() -> {
|
||
if (sudLoadDialog.getClickStatus() == 2){
|
||
Bus.get().post(new CheckRemainingBalanceEvent().setSudMGPMGState(SudMGPMGState.MG_COMMON_SELF_CLICK_GAME_SETTLE_AGAIN_BTN).setSubReady(false));
|
||
}
|
||
});
|
||
}
|
||
|
||
@Subscribe(threadMode = ThreadMode.MAIN)
|
||
public void onCheckRemainingBalanceEvent(CheckRemainingBalanceEvent event) {
|
||
switch (event.getSudMGPMGState()) {
|
||
case SudMGPMGState.MG_COMMON_SELF_CLICK_JOIN_BTN:
|
||
case SudMGPMGState.MG_COMMON_SELF_CLICK_GAME_SETTLE_AGAIN_BTN:
|
||
//获取筹码信息,检查是否足够
|
||
LiveNetManager.get(mContext).getScore(mCreateSudRoomModel.getSudGameRoomId(), new HttpCallback<SudGameScoreBean>() {
|
||
@Override
|
||
public void onSuccess(SudGameScoreBean data) {
|
||
if (data.getGolden_bean_remaining_balance() == 1) {
|
||
gameViewModel.setSudGameScoreBean(data);
|
||
gameViewModel.sudFSTAPPDecorator.notifyAPPCommonSelfIn(true, event.getSeatIndex(), true, 1);
|
||
gameViewModel.sudFSTAPPDecorator.notifyAPPCommonSelfReady(event.getSubReady());
|
||
} else {
|
||
if (IMLoginManager.get(mContext).getLocaleLanguage() == Locale.SIMPLIFIED_CHINESE) {
|
||
ToastUtil.show("貨幣数量不足 ");
|
||
} else {
|
||
ToastUtil.show("Shortage of money");
|
||
}
|
||
|
||
}
|
||
// ToastUtil.show(data.toString());
|
||
|
||
}
|
||
|
||
@Override
|
||
public void onError(String error) {
|
||
if (IMLoginManager.get(mContext).getLocaleLanguage() == Locale.SIMPLIFIED_CHINESE) {
|
||
ToastUtil.show("貨幣数量不足 ");
|
||
} else {
|
||
ToastUtil.show("Shortage of money");
|
||
}
|
||
|
||
}
|
||
});
|
||
break;
|
||
case SudMGPMGState.MG_COMMON_GAME_SETTLE:
|
||
//结算状态
|
||
gameViewModel.sudFSTAPPDecorator.notifyAPPCommonSelfIn(false, event.getSeatIndex(), true, 1);
|
||
sudLoadDialog.setClickStatus(0);
|
||
sudLoadDialog.setDouble(gameViewModel.getSudGameScoreBean().getGame_mode());
|
||
sudLoadDialog.showDialog();
|
||
//先获取用户信息再进行结算处理
|
||
LiveNetManager.get(mContext).getSudGameInfo(mCreateSudRoomModel.getSudGameRoomId(), new HttpCallback<List<SudGameInfoBean>>() {
|
||
@Override
|
||
public void onSuccess(List<SudGameInfoBean> data) {
|
||
if (!data.isEmpty()){
|
||
gameViewModel.setSudGameInfoBeanList(data);
|
||
gameViewModel.sudGameRank(event.getMgCommonGameSettle());//结算游戏
|
||
}else {
|
||
ToastUtil.show(getString(R.string.net_error));
|
||
}
|
||
}
|
||
|
||
@Override
|
||
public void onError(String error) {
|
||
ToastUtil.show(error);
|
||
}
|
||
});
|
||
break;
|
||
case SudMGPMGState.MG_COMMON_SELF_CLICK_START_BTN:
|
||
//点击开始游戏
|
||
LiveNetManager.get(mContext).gameStartCheckRemainingBalance(mCreateSudRoomModel.getSudGameId(), mCreateSudRoomModel.getSudGameRoomId(), new HttpCallback<CheckRemainingBalance>() {
|
||
@Override
|
||
public void onSuccess(CheckRemainingBalance data) {
|
||
if (data.getStatus() == 1) {
|
||
gameViewModel.sudFSTAPPDecorator.notifyAPPCommonSelfPlaying(true);
|
||
} else {
|
||
|
||
}
|
||
|
||
}
|
||
|
||
@Override
|
||
public void onError(String error) {
|
||
ToastUtil.show(error);
|
||
}
|
||
});
|
||
break;
|
||
case SudMGPMGState.MG_COMMON_GAME_STATE:
|
||
LiveNetManager.get(mContext).deductMoney(mCreateSudRoomModel.getSudGameRoomId());
|
||
break;
|
||
}
|
||
}
|
||
|
||
@Override
|
||
public void onJoinRoomSuccess(RCRTCRoom rcrtcRoom) {
|
||
LiveNetManager.get(mContext).getRoomMicData(mLiveUid, new HttpCallback<List<SudGameUserModel>>() {
|
||
@Override
|
||
public void onSuccess(List<SudGameUserModel> data) {
|
||
gameMicManager.refreshStreams(data);
|
||
sudGameUserListAdapter.refreshSudGameUserList(data, muteUser);
|
||
}
|
||
|
||
@Override
|
||
public void onError(String error) {
|
||
ToastUtil.show(error);
|
||
}
|
||
});
|
||
// 主动订阅远端用户发布的资源
|
||
// gameMicManager.subscribeAVStream();
|
||
}
|
||
|
||
@Override
|
||
public void onJoinRoomFailed(RTCErrorCode rtcErrorCode) {
|
||
ToastUtil.show("加入失败 " + rtcErrorCode.toString());
|
||
}
|
||
|
||
@Override
|
||
public void onPublishSuccess() {
|
||
runOnUiThread(new Runnable() {
|
||
@Override
|
||
public void run() {
|
||
ImgLoader.display(mContext, WordUtil.isNewZh() ? R.mipmap.icon_game_hang_up : R.mipmap.icon_game_hang_up_en, gameSeat);
|
||
publishDefault = true;
|
||
gameCloseWheat.setVisibility(View.VISIBLE);
|
||
disable = false;
|
||
// 设置禁用麦克风采集
|
||
RCRTCEngine.getInstance().getDefaultAudioStream().setMicrophoneDisable(disable);
|
||
ImgLoader.display(mContext, R.mipmap.icon_game_open_wheat, gameCloseWheat);
|
||
}
|
||
});
|
||
|
||
LiveNetManager.get(mContext).joinMic(mLiveUid, new HttpCallback<HttpCallbackModel>() {
|
||
@Override
|
||
public void onSuccess(HttpCallbackModel data) {
|
||
|
||
}
|
||
|
||
@Override
|
||
public void onError(String error) {
|
||
|
||
}
|
||
});
|
||
}
|
||
|
||
@Override
|
||
public void onPublishFailed() {
|
||
ToastUtil.show(WordUtil.isNewZh() ? "語音加入失敗" : "Voice joining failed");
|
||
}
|
||
|
||
@Override
|
||
public void onSubscribeSuccess(List<RCRTCInputStream> inputStreamList) {
|
||
// ToastUtil.show("订阅成功 ");
|
||
}
|
||
|
||
@Override
|
||
public void onSubscribeFailed() {
|
||
ToastUtil.show("订阅失败 ");
|
||
}
|
||
|
||
@Override
|
||
public void onSubscribeSuccess(String userID, boolean mute, int position) {
|
||
runOnUiThread(new Runnable() {
|
||
@Override
|
||
public void run() {
|
||
if (mute) {
|
||
ToastUtil.show(WordUtil.isNewZh() ? "已靜音該用戶" : "The user has been muted");
|
||
} else {
|
||
ToastUtil.show(WordUtil.isNewZh() ? "已取消該用戶靜音" : "The user has been unmuted");
|
||
}
|
||
sudGameUserListAdapter.muteUser(userID, mute, position);
|
||
}
|
||
});
|
||
|
||
}
|
||
|
||
@Override
|
||
public void onSubscribeFailed(String userID) {
|
||
ToastUtil.show("订阅失败 ");
|
||
}
|
||
|
||
@Override
|
||
public void onUserJoined(RCRTCRemoteUser rcrtcRemoteUser) {
|
||
|
||
}
|
||
|
||
@Override
|
||
public void onUserLeft(RCRTCRemoteUser rcrtcRemoteUser) {
|
||
|
||
}
|
||
|
||
@Override
|
||
public void insertItem(SudGameChatImModel sudGameChatImModel) {
|
||
mLiveChatAdapter.insertItem(sudGameChatImModel);
|
||
}
|
||
|
||
@Override
|
||
public void refreshSudGameUserList(List<SudGameUserModel> personList) {
|
||
sudGameUserListAdapter.refreshSudGameUserList(personList, muteUser);
|
||
}
|
||
|
||
@Override
|
||
public void onUnPublishStreamsSuccess() {
|
||
runOnUiThread(new Runnable() {
|
||
@Override
|
||
public void run() {
|
||
ImgLoader.display(mContext, WordUtil.isNewZh() ? R.mipmap.icon_game_seat : R.mipmap.icon_game_seat_en, gameSeat);
|
||
publishDefault = false;
|
||
gameCloseWheat.setVisibility(View.INVISIBLE);
|
||
}
|
||
});
|
||
LiveNetManager.get(mContext).leaveMic(mLiveUid, new HttpCallback<HttpCallbackModel>() {
|
||
@Override
|
||
public void onSuccess(HttpCallbackModel data) {
|
||
|
||
}
|
||
|
||
@Override
|
||
public void onError(String error) {
|
||
|
||
}
|
||
});
|
||
|
||
}
|
||
|
||
@Override
|
||
public void onUnPublishStreamsFailed() {
|
||
|
||
}
|
||
|
||
@Subscribe(threadMode = ThreadMode.MAIN)
|
||
public void onSudGameSocketImEvent(SudGameSocketImEvent event) {
|
||
gameMicManager.processingMessage(event);
|
||
}
|
||
|
||
@Subscribe(threadMode = ThreadMode.MAIN)
|
||
public void onSudGameUserModel(SudGameUserModel model) {
|
||
if (model.isNullUser()) {
|
||
if (!publishDefault) {
|
||
if (mProcessResultUtil.checkPermissions(new String[]{Manifest.permission.RECORD_AUDIO})) {
|
||
if (sudGameUserListAdapter.isMicMax()) {
|
||
ToastUtil.show(WordUtil.isNewZh() ? "上麥人數最大7人" : "The maximum number of people on the microphone is 7");
|
||
} else {
|
||
gameMicManager.publishDefaultAVStream();
|
||
}
|
||
|
||
} else {
|
||
mProcessResultUtil.requestPermissions(new String[]{Manifest.permission.RECORD_AUDIO}, new Runnable() {
|
||
@Override
|
||
public void run() {
|
||
|
||
}
|
||
});
|
||
}
|
||
|
||
} else {
|
||
ToastUtil.show(WordUtil.isNewZh() ? "已經是上麥狀態" : "It is already in the wheat state");
|
||
}
|
||
|
||
}
|
||
}
|
||
}
|