|
|
@@ -0,0 +1,609 @@
|
|
|
+package com.yunbao.live.presenter;
|
|
|
+
|
|
|
+import android.content.Context;
|
|
|
+import android.graphics.drawable.ColorDrawable;
|
|
|
+import android.os.Handler;
|
|
|
+import android.os.Message;
|
|
|
+import android.os.SystemClock;
|
|
|
+import android.text.TextUtils;
|
|
|
+import android.view.Gravity;
|
|
|
+import android.view.LayoutInflater;
|
|
|
+import android.view.View;
|
|
|
+import android.view.ViewGroup;
|
|
|
+import android.widget.PopupWindow;
|
|
|
+
|
|
|
+import com.alibaba.fastjson.JSON;
|
|
|
+import com.alibaba.fastjson.JSONObject;
|
|
|
+import com.yunbao.common.CommonAppConfig;
|
|
|
+import com.yunbao.common.bean.UserBean;
|
|
|
+import com.yunbao.common.http.HttpCallback;
|
|
|
+import com.yunbao.common.utils.DpUtil;
|
|
|
+import com.yunbao.common.utils.StringUtil;
|
|
|
+import com.yunbao.common.utils.ToastUtil;
|
|
|
+import com.yunbao.common.utils.L;
|
|
|
+import com.yunbao.common.utils.WordUtil;
|
|
|
+import com.yunbao.live.R;
|
|
|
+import com.yunbao.live.activity.LiveAnchorActivity;
|
|
|
+import com.yunbao.live.custom.ProgressTextView;
|
|
|
+import com.yunbao.live.http.LiveHttpUtil;
|
|
|
+import com.yunbao.live.interfaces.ILiveLinkMicViewHolder;
|
|
|
+import com.yunbao.live.socket.SocketClient;
|
|
|
+import com.yunbao.live.socket.SocketLinkMicPkUtil;
|
|
|
+import com.yunbao.live.socket.SocketLinkMicThreePkUtil;
|
|
|
+import com.yunbao.live.views.LiveLinkMicThreePkViewHolder;
|
|
|
+
|
|
|
+/**
|
|
|
+ * Created by cxf on 2023/09/27.
|
|
|
+ * 三人主播PK逻辑
|
|
|
+ */
|
|
|
+public class LiveLinkMicThreePkPresenter implements View.OnClickListener {
|
|
|
+
|
|
|
+ private static final int WHAT_THREE_PK_WAIT_RECEIVE = 0;//收到三人pk申请等待 what
|
|
|
+ private static final int WHAT_THREE_PK_WAIT_SEND = 1;//发送三人pk申请等待 what
|
|
|
+ private static final int WHAT_THREE_PK_TIME = 2;//三人pk时间变化 what
|
|
|
+ private static final int LINK_MIC_COUNT_MAX = 10;
|
|
|
+ private static final int THREE_PK_TIME_MAX = 60 * 5;//三人pk时间 5分钟
|
|
|
+ private static final int THREE_PK_TIME_MAX_2 = 60;//惩罚时间 1分钟
|
|
|
+
|
|
|
+ private Context mContext;
|
|
|
+ private View mRoot;
|
|
|
+ private boolean mIsAnchor;//自己是否是主播
|
|
|
+ private SocketClient mSocketClient;
|
|
|
+ private ViewGroup mPkContainer;
|
|
|
+ private boolean mIsApplyDialogShow;//是否显示了申请三人PK的弹窗
|
|
|
+ private boolean mAcceptThreePk;//是否接受三人连麦
|
|
|
+ private boolean mIsThreePk;//是否已经三人Pk了
|
|
|
+ private String mApplyUid;//正在申请三人Pk的主播的uid
|
|
|
+ private String mApplyPkUid2;//第二个主播uid
|
|
|
+ private String mApplyPkUid3;//第三个主播uid
|
|
|
+ private String mLiveUid;//自己主播的uid
|
|
|
+ private String mStream;//自己的推流地址
|
|
|
+ private String mPkUid1;//正在三人Pk的第一个主播的uid
|
|
|
+ private String mPkUid2;//正在三人Pk的第二个主播的uid
|
|
|
+ private String mPkUid3;//正在三人Pk的第三个主播的uid
|
|
|
+ private String mPkRoomId;//三人PK房间ID
|
|
|
+ private long mPkAddTime;//三人PK开始时间
|
|
|
+ private ProgressTextView mLinkMicWaitProgress;
|
|
|
+ private int mPkWaitCount;//三人Pk弹窗等待倒计时
|
|
|
+ private int mPkTimeCount;//三人pk时间
|
|
|
+ private PopupWindow mPkPopWindow;
|
|
|
+ private Handler mHandler;
|
|
|
+ private LiveLinkMicThreePkViewHolder mLiveLinkMicThreePkViewHolder;
|
|
|
+ private String mPkTimeString1;
|
|
|
+ private String mPkTimeString2;
|
|
|
+ private boolean mIsThreePkEnd;//三人pk是否结束,进入惩罚时间
|
|
|
+ private boolean mThreePkSend;//三人pk请求是否已经发送
|
|
|
+ private int mThreePkSendWaitCount;//发送三人pk请求后的等待时间
|
|
|
+
|
|
|
+ public LiveLinkMicThreePkPresenter(Context context, ILiveLinkMicViewHolder linkMicViewHolder, boolean isAnchor, View root) {
|
|
|
+ mContext = context;
|
|
|
+ mIsAnchor = isAnchor;
|
|
|
+ mRoot = root;
|
|
|
+ mPkContainer = linkMicViewHolder.getPkContainer();
|
|
|
+ mPkTimeString1 = WordUtil.getString(R.string.live_pk_time_1);
|
|
|
+ mPkTimeString2 = WordUtil.getString(R.string.live_pk_time_2);
|
|
|
+
|
|
|
+ // 确保状态正确初始化
|
|
|
+ mIsThreePk = false;
|
|
|
+ mIsApplyDialogShow = false;
|
|
|
+ mIsThreePkEnd = false;
|
|
|
+ mThreePkSend = false;
|
|
|
+ mAcceptThreePk = false;
|
|
|
+ mHandler = new Handler() {
|
|
|
+ @Override
|
|
|
+ public void handleMessage(Message msg) {
|
|
|
+ switch (msg.what) {
|
|
|
+ case WHAT_THREE_PK_WAIT_RECEIVE:
|
|
|
+ onApplyThreePkWait();
|
|
|
+ break;
|
|
|
+ case WHAT_THREE_PK_WAIT_SEND:
|
|
|
+ onSendThreePkWait();
|
|
|
+ break;
|
|
|
+ case WHAT_THREE_PK_TIME:
|
|
|
+ changeThreePkTime();
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ };
|
|
|
+ }
|
|
|
+
|
|
|
+ public void setSocketClient(SocketClient socketClient) {
|
|
|
+ mSocketClient = socketClient;
|
|
|
+ }
|
|
|
+
|
|
|
+ public void setLiveUid(String liveUid) {
|
|
|
+ mLiveUid = liveUid;
|
|
|
+ }
|
|
|
+
|
|
|
+ public void setSelfStream(String stream) {
|
|
|
+ mStream = stream;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 申请三人pk弹窗倒计时
|
|
|
+ */
|
|
|
+ private void onApplyThreePkWait() {
|
|
|
+ mPkWaitCount--;
|
|
|
+ if (mPkWaitCount >= 0) {
|
|
|
+ if (mLinkMicWaitProgress != null) {
|
|
|
+ mLinkMicWaitProgress.setProgress(mPkWaitCount);
|
|
|
+ if (mHandler != null) {
|
|
|
+ mHandler.sendEmptyMessageAtTime(WHAT_THREE_PK_WAIT_RECEIVE, getNextSecondTime());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ if (mPkPopWindow != null) {
|
|
|
+ mPkPopWindow.dismiss();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 发送三人pk申请后等待倒计时
|
|
|
+ */
|
|
|
+ private void onSendThreePkWait() {
|
|
|
+ mThreePkSendWaitCount--;
|
|
|
+ if (mThreePkSendWaitCount >= 0) {
|
|
|
+ nextSendThreePkWaitCountDown();
|
|
|
+ } else {
|
|
|
+ hideSendThreePkWait();
|
|
|
+ if (mIsAnchor) {
|
|
|
+ ((LiveAnchorActivity) mContext).setThreePkBtnVisible(true);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 进入下一次三人pk申请等待倒计时
|
|
|
+ */
|
|
|
+ private void nextSendThreePkWaitCountDown() {
|
|
|
+ if (mLiveLinkMicThreePkViewHolder != null) {
|
|
|
+ mLiveLinkMicThreePkViewHolder.setThreePkWaitProgress(mThreePkSendWaitCount);
|
|
|
+ }
|
|
|
+ if (mHandler != null) {
|
|
|
+ mHandler.sendEmptyMessageAtTime(WHAT_THREE_PK_WAIT_SEND, getNextSecondTime());
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 隐藏三人pk申请等待
|
|
|
+ */
|
|
|
+ private void hideSendThreePkWait() {
|
|
|
+ mThreePkSend = false;
|
|
|
+ if (mHandler != null) {
|
|
|
+ mHandler.removeMessages(WHAT_THREE_PK_WAIT_SEND);
|
|
|
+ }
|
|
|
+ if (mLiveLinkMicThreePkViewHolder != null) {
|
|
|
+ mLiveLinkMicThreePkViewHolder.setThreePkWaitProgressVisible(false);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 进入下一次三人pk倒计时
|
|
|
+ */
|
|
|
+ private void nextThreePkTimeCountDown() {
|
|
|
+ if (mHandler != null) {
|
|
|
+ mHandler.sendEmptyMessageAtTime(WHAT_THREE_PK_TIME, getNextSecondTime());
|
|
|
+ }
|
|
|
+ if (mLiveLinkMicThreePkViewHolder != null) {
|
|
|
+ String s = mIsThreePkEnd ? mPkTimeString2 : mPkTimeString1;
|
|
|
+ String timeText = s + " " + StringUtil.getDurationText(mPkTimeCount * 1000);
|
|
|
+ L.e("三人PK倒计时", "nextThreePkTimeCountDown() 被调用,时间文本: " + timeText +
|
|
|
+ ", mPkTimeCount: " + mPkTimeCount + ", mIsThreePkEnd: " + mIsThreePkEnd);
|
|
|
+ mLiveLinkMicThreePkViewHolder.setTime(timeText);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 三人pk时间倒计时
|
|
|
+ */
|
|
|
+ private void changeThreePkTime() {
|
|
|
+ mPkTimeCount--;
|
|
|
+ if (mPkTimeCount > 0) {
|
|
|
+ nextThreePkTimeCountDown();
|
|
|
+ } else {
|
|
|
+ if (mIsThreePkEnd) {
|
|
|
+ onLinkMicThreePkClose();
|
|
|
+ if (mIsAnchor) {
|
|
|
+ ((LiveAnchorActivity) mContext).setThreePkBtnVisible(true);
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ // 时间到了,自动结束三人PK
|
|
|
+ if (mIsAnchor) {
|
|
|
+ LiveHttpUtil.endThreePK(mPkAddTime, 0, new HttpCallback() {
|
|
|
+ @Override
|
|
|
+ public void onSuccess(int code, String msg, String[] info) {
|
|
|
+ // 自动结束成功,等待服务器推送结果
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取下一秒钟的时间
|
|
|
+ */
|
|
|
+ private long getNextSecondTime() {
|
|
|
+ long now = SystemClock.uptimeMillis();
|
|
|
+ return now + (1000 - now % 1000);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 发起三人主播PK申请
|
|
|
+ */
|
|
|
+ public void applyLinkMicThreePk(String pkUid2, String pkUid3) {
|
|
|
+ if (mThreePkSend) {
|
|
|
+ ToastUtil.show("三人PK申请等待中...");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ if (mIsThreePk) {
|
|
|
+ ToastUtil.show("正在三人PK中,无法发起新的PK");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ mThreePkSend = true;
|
|
|
+ SocketLinkMicThreePkUtil.linkMicThreePkApply(mSocketClient, pkUid2, pkUid3);
|
|
|
+ ToastUtil.show("三人PK申请已发送");
|
|
|
+
|
|
|
+ if (mLiveLinkMicThreePkViewHolder == null) {
|
|
|
+ mLiveLinkMicThreePkViewHolder = new LiveLinkMicThreePkViewHolder(mContext, mPkContainer);
|
|
|
+ mLiveLinkMicThreePkViewHolder.addToParent();
|
|
|
+ }
|
|
|
+ mLiveLinkMicThreePkViewHolder.setThreePkWaitProgressVisible(true);
|
|
|
+ mThreePkSendWaitCount = LINK_MIC_COUNT_MAX;
|
|
|
+ nextSendThreePkWaitCountDown();
|
|
|
+ if (mIsAnchor) {
|
|
|
+ ((LiveAnchorActivity) mContext).setThreePkBtnVisible(false);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 三人主播PK 主播收到其他主播发过来的三人PK申请的回调
|
|
|
+ */
|
|
|
+ public void onLinkMicThreePkApply(UserBean u, String pkUid2, String pkUid3) {
|
|
|
+ L.e("三人PK", "收到三人PK申请: uid=" + (u != null ? u.getId() : "null") +
|
|
|
+ ", pkUid2=" + pkUid2 + ", pkUid3=" + pkUid3 +
|
|
|
+ ", mIsAnchor=" + mIsAnchor +
|
|
|
+ ", mIsThreePk=" + mIsThreePk +
|
|
|
+ ", mIsApplyDialogShow=" + mIsApplyDialogShow);
|
|
|
+
|
|
|
+ if (!mIsAnchor) {
|
|
|
+ L.e("三人PK", "不是主播,忽略三人PK申请");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ if (u == null || TextUtils.isEmpty(pkUid2) || TextUtils.isEmpty(pkUid3)) {
|
|
|
+ L.e("三人PK", "参数无效,忽略三人PK申请");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ if (!TextUtils.isEmpty(mApplyUid) && mApplyUid.equals(u.getId())) {
|
|
|
+ L.e("三人PK", "重复的三人PK申请,忽略");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ if (!mIsThreePk && !mIsApplyDialogShow) {
|
|
|
+ L.e("三人PK", "显示三人PK申请弹窗");
|
|
|
+ mApplyUid = u.getId();
|
|
|
+ mApplyPkUid2 = pkUid2;
|
|
|
+ mApplyPkUid3 = pkUid3;
|
|
|
+ showApplyThreePkDialog(u);
|
|
|
+ } else {
|
|
|
+ L.e("三人PK", "当前状态不允许接受三人PK,发送忙碌消息");
|
|
|
+ SocketLinkMicThreePkUtil.linkMicThreePkBusy(mSocketClient, u.getId(), pkUid2, pkUid3);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 显示申请三人PK的弹窗
|
|
|
+ */
|
|
|
+ private void showApplyThreePkDialog(UserBean u) {
|
|
|
+ mIsApplyDialogShow = true;
|
|
|
+ mAcceptThreePk = false;
|
|
|
+ View v = LayoutInflater.from(mContext).inflate(R.layout.dialog_link_mic_three_pk_wait, null);
|
|
|
+ mLinkMicWaitProgress = v.findViewById(R.id.three_pk_wait_progress);
|
|
|
+ v.findViewById(R.id.btn_refuse).setOnClickListener(this);
|
|
|
+ v.findViewById(R.id.btn_accept).setOnClickListener(this);
|
|
|
+ mPkWaitCount = LINK_MIC_COUNT_MAX;
|
|
|
+ mPkPopWindow = new PopupWindow(v, DpUtil.dp2px(280), ViewGroup.LayoutParams.WRAP_CONTENT, true);
|
|
|
+ mPkPopWindow.setBackgroundDrawable(new ColorDrawable());
|
|
|
+ mPkPopWindow.setOutsideTouchable(true);
|
|
|
+ mPkPopWindow.setOnDismissListener(new PopupWindow.OnDismissListener() {
|
|
|
+ @Override
|
|
|
+ public void onDismiss() {
|
|
|
+ if (mHandler != null) {
|
|
|
+ mHandler.removeMessages(WHAT_THREE_PK_WAIT_RECEIVE);
|
|
|
+ }
|
|
|
+ if (mAcceptThreePk) {
|
|
|
+ // 接受三人PK,调用API开始三人PK
|
|
|
+// LiveHttpUtil.setThreePK(mApplyPkUid2, mApplyPkUid3, new HttpCallback() {
|
|
|
+// @Override
|
|
|
+// public void onSuccess(int code, String msg, String[] info) {
|
|
|
+// if (code == 0) {
|
|
|
+// SocketLinkMicThreePkUtil.linkMicThreePkAccept(mSocketClient, mApplyUid, mApplyPkUid2, mApplyPkUid3);
|
|
|
+// mIsThreePk = true;
|
|
|
+// } else {
|
|
|
+// ToastUtil.show(msg);
|
|
|
+// }
|
|
|
+// }
|
|
|
+// });
|
|
|
+ SocketLinkMicThreePkUtil.linkMicThreePkAccept(mSocketClient, mApplyUid, mApplyPkUid2, mApplyPkUid3);
|
|
|
+ mIsThreePk = true;
|
|
|
+
|
|
|
+ } else {
|
|
|
+ if (mPkWaitCount < 0) {
|
|
|
+ SocketLinkMicThreePkUtil.linkMicThreePkNotResponse(mSocketClient, mApplyUid, mApplyPkUid2, mApplyPkUid3);
|
|
|
+ } else {
|
|
|
+ SocketLinkMicThreePkUtil.linkMicThreePkRefuse(mSocketClient, mApplyUid, mApplyPkUid2, mApplyPkUid3);
|
|
|
+ }
|
|
|
+ mApplyUid = null;
|
|
|
+ mApplyPkUid2 = null;
|
|
|
+ mApplyPkUid3 = null;
|
|
|
+ }
|
|
|
+ mIsApplyDialogShow = false;
|
|
|
+ mLinkMicWaitProgress = null;
|
|
|
+ mPkPopWindow = null;
|
|
|
+ }
|
|
|
+ });
|
|
|
+ mPkPopWindow.showAtLocation(mRoot, Gravity.CENTER, 0, 0);
|
|
|
+ if (mHandler != null) {
|
|
|
+ mHandler.sendEmptyMessageAtTime(WHAT_THREE_PK_WAIT_RECEIVE, getNextSecondTime());
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void onClick(View v) {
|
|
|
+ int i = v.getId();
|
|
|
+ if (i == R.id.btn_refuse) {
|
|
|
+ refuseThreePkLinkMic();
|
|
|
+ } else if (i == R.id.btn_accept) {
|
|
|
+ acceptThreePkLinkMic();
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 拒绝三人PK
|
|
|
+ */
|
|
|
+ private void refuseThreePkLinkMic() {
|
|
|
+ if (mPkPopWindow != null) {
|
|
|
+ mPkPopWindow.dismiss();
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 接受三人PK
|
|
|
+ */
|
|
|
+ private void acceptThreePkLinkMic() {
|
|
|
+ mAcceptThreePk = true;
|
|
|
+ if (mPkPopWindow != null) {
|
|
|
+ mPkPopWindow.dismiss();
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 三人pk 进度发送变化
|
|
|
+ */
|
|
|
+ public void onThreePkProgressChanged(long gift1, long gift2, long gift3) {
|
|
|
+ if (mLiveLinkMicThreePkViewHolder != null) {
|
|
|
+ mLiveLinkMicThreePkViewHolder.onProgressChanged(gift1, gift2, gift3);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 进房间的时候三人PK开始
|
|
|
+ */
|
|
|
+ public void onEnterRoomThreePkStart(String uid1, String uid2, String uid3, String roomId, long addTime,
|
|
|
+ long gift1, long gift2, long gift3, int pkTime) {
|
|
|
+ mIsThreePk = true;
|
|
|
+ mIsThreePkEnd = false;
|
|
|
+ mPkUid1 = uid1;
|
|
|
+ mPkUid2 = uid2;
|
|
|
+ mPkUid3 = uid3;
|
|
|
+ mPkRoomId = roomId;
|
|
|
+ mPkAddTime = addTime;
|
|
|
+
|
|
|
+ if (mLiveLinkMicThreePkViewHolder == null) {
|
|
|
+ mLiveLinkMicThreePkViewHolder = new LiveLinkMicThreePkViewHolder(mContext, mPkContainer);
|
|
|
+ mLiveLinkMicThreePkViewHolder.addToParent();
|
|
|
+ }
|
|
|
+ mLiveLinkMicThreePkViewHolder.showTime();
|
|
|
+ mLiveLinkMicThreePkViewHolder.onEnterRoomThreePkStart();
|
|
|
+ mLiveLinkMicThreePkViewHolder.onProgressChanged(gift1, gift2, gift3);
|
|
|
+ mPkTimeCount = pkTime;
|
|
|
+ nextThreePkTimeCountDown();
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 三人主播PK 所有人收到三人PK开始的回调
|
|
|
+ */
|
|
|
+ public void onLinkMicThreePkStart(String uid1, String uid2, String uid3, String roomId, long addTime) {
|
|
|
+ L.e("三人PK倒计时", "onLinkMicThreePkStart() 被调用,开始三人PK");
|
|
|
+ mIsThreePk = true;
|
|
|
+ hideSendThreePkWait();
|
|
|
+ mIsThreePkEnd = false;
|
|
|
+ mPkUid1 = uid1;
|
|
|
+ mPkUid2 = uid2;
|
|
|
+ mPkUid3 = uid3;
|
|
|
+ mPkRoomId = roomId;
|
|
|
+ mPkAddTime = addTime;
|
|
|
+
|
|
|
+ if (mLiveLinkMicThreePkViewHolder == null) {
|
|
|
+ L.e("三人PK倒计时", "创建新的 LiveLinkMicThreePkViewHolder");
|
|
|
+ mLiveLinkMicThreePkViewHolder = new LiveLinkMicThreePkViewHolder(mContext, mPkContainer);
|
|
|
+ mLiveLinkMicThreePkViewHolder.addToParent();
|
|
|
+ }
|
|
|
+ L.e("三人PK倒计时", "开始动画和显示时间");
|
|
|
+ mLiveLinkMicThreePkViewHolder.startAnim();
|
|
|
+ mLiveLinkMicThreePkViewHolder.showTime();
|
|
|
+ mPkTimeCount = THREE_PK_TIME_MAX;
|
|
|
+ L.e("三人PK倒计时", "设置倒计时时间: " + mPkTimeCount + " 秒");
|
|
|
+ nextThreePkTimeCountDown();
|
|
|
+ if (mIsAnchor) {
|
|
|
+ ((LiveAnchorActivity) mContext).setThreePkBtnVisible(false);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 三人主播PK 三人PK结果的回调
|
|
|
+ */
|
|
|
+ public void onLinkMicThreePkEnd(String winUid, String uid1, String uid2, String uid3,
|
|
|
+ long gift1, long gift2, long gift3, String roomId) {
|
|
|
+ if (mIsThreePkEnd) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ mIsThreePkEnd = true;
|
|
|
+ if (mHandler != null) {
|
|
|
+ mHandler.removeMessages(WHAT_THREE_PK_TIME);
|
|
|
+ }
|
|
|
+ if (mLiveLinkMicThreePkViewHolder != null) {
|
|
|
+ if (!TextUtils.isEmpty(winUid)) {
|
|
|
+ if ("0".equals(winUid)) {
|
|
|
+ // 平局
|
|
|
+ mLiveLinkMicThreePkViewHolder.end(0);
|
|
|
+ mLiveLinkMicThreePkViewHolder.hideTime();
|
|
|
+ if (mHandler != null) {
|
|
|
+ mHandler.postDelayed(new Runnable() {
|
|
|
+ @Override
|
|
|
+ public void run() {
|
|
|
+ onLinkMicThreePkClose();
|
|
|
+ if (mIsAnchor) {
|
|
|
+ ((LiveAnchorActivity) mContext).setThreePkBtnVisible(true);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }, 3000);
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ // 有获胜者
|
|
|
+ if (winUid.equals(mLiveUid)) {
|
|
|
+ mLiveLinkMicThreePkViewHolder.end(1); // 自己获胜
|
|
|
+ } else {
|
|
|
+ mLiveLinkMicThreePkViewHolder.end(-1); // 自己失败
|
|
|
+ }
|
|
|
+ mPkTimeCount = THREE_PK_TIME_MAX_2;//进入惩罚时间
|
|
|
+ nextThreePkTimeCountDown();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 三人主播PK 断开连麦三人PK的回调
|
|
|
+ */
|
|
|
+ public void onLinkMicThreePkClose() {
|
|
|
+ if (mHandler != null) {
|
|
|
+ mHandler.removeCallbacksAndMessages(null);
|
|
|
+ }
|
|
|
+ if (mPkPopWindow != null) {
|
|
|
+ mPkPopWindow.dismiss();
|
|
|
+ }
|
|
|
+ mPkPopWindow = null;
|
|
|
+ mIsThreePk = false;
|
|
|
+ mIsThreePkEnd = false;
|
|
|
+ hideSendThreePkWait();
|
|
|
+ mPkUid1 = null;
|
|
|
+ mPkUid2 = null;
|
|
|
+ mPkUid3 = null;
|
|
|
+ mPkRoomId = null;
|
|
|
+ mPkAddTime = 0;
|
|
|
+ mApplyUid = null;
|
|
|
+ mApplyPkUid2 = null;
|
|
|
+ mApplyPkUid3 = null;
|
|
|
+ if (mLiveLinkMicThreePkViewHolder != null) {
|
|
|
+ mLiveLinkMicThreePkViewHolder.removeFromParent();
|
|
|
+ mLiveLinkMicThreePkViewHolder.release();
|
|
|
+ }
|
|
|
+ mLiveLinkMicThreePkViewHolder = null;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 三人主播Pk 对方主播拒绝三人Pk的回调
|
|
|
+ */
|
|
|
+ public void onLinkMicThreePkRefuse() {
|
|
|
+ hideSendThreePkWait();
|
|
|
+ if (mIsAnchor) {
|
|
|
+ ((LiveAnchorActivity) mContext).setThreePkBtnVisible(true);
|
|
|
+ }
|
|
|
+ ToastUtil.show("对方拒绝了三人PK");
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 三人主播Pk 对方主播无响应的回调
|
|
|
+ */
|
|
|
+ public void onLinkMicThreePkNotResponse() {
|
|
|
+ hideSendThreePkWait();
|
|
|
+ if (mIsAnchor) {
|
|
|
+ ((LiveAnchorActivity) mContext).setThreePkBtnVisible(true);
|
|
|
+ }
|
|
|
+ ToastUtil.show("对方主播无响应");
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 三人主播Pk 对方主播正在忙的回调
|
|
|
+ */
|
|
|
+ public void onLinkMicThreePkBusy() {
|
|
|
+ hideSendThreePkWait();
|
|
|
+ if (mIsAnchor) {
|
|
|
+ ((LiveAnchorActivity) mContext).setThreePkBtnVisible(true);
|
|
|
+ }
|
|
|
+ ToastUtil.show("对方主播正在忙");
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 手动结束三人PK
|
|
|
+ */
|
|
|
+ public void endThreePk() {
|
|
|
+ if (mIsThreePk && mIsAnchor && mPkAddTime > 0) {
|
|
|
+ LiveHttpUtil.endThreePK(mPkAddTime, 1, new HttpCallback() {
|
|
|
+ @Override
|
|
|
+ public void onSuccess(int code, String msg, String[] info) {
|
|
|
+ if (code == 0) {
|
|
|
+ SocketLinkMicThreePkUtil.linkMicThreePkClose(mSocketClient, mPkUid1, mPkUid2, mPkUid3);
|
|
|
+ } else {
|
|
|
+ ToastUtil.show(msg);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ public void release() {
|
|
|
+ if (mHandler != null) {
|
|
|
+ mHandler.removeCallbacksAndMessages(null);
|
|
|
+ }
|
|
|
+ mHandler = null;
|
|
|
+ mSocketClient = null;
|
|
|
+ if (mLiveLinkMicThreePkViewHolder != null) {
|
|
|
+ mLiveLinkMicThreePkViewHolder.release();
|
|
|
+ }
|
|
|
+ mLiveLinkMicThreePkViewHolder = null;
|
|
|
+ }
|
|
|
+
|
|
|
+ public void clearData() {
|
|
|
+ mIsApplyDialogShow = false;
|
|
|
+ mAcceptThreePk = false;
|
|
|
+ mIsThreePk = false;
|
|
|
+ mApplyUid = null;
|
|
|
+ mApplyPkUid2 = null;
|
|
|
+ mApplyPkUid3 = null;
|
|
|
+ mLiveUid = null;
|
|
|
+ mPkUid1 = null;
|
|
|
+ mPkUid2 = null;
|
|
|
+ mPkUid3 = null;
|
|
|
+ mPkRoomId = null;
|
|
|
+ mPkAddTime = 0;
|
|
|
+ mPkWaitCount = 0;
|
|
|
+ mPkTimeCount = 0;
|
|
|
+ mIsThreePkEnd = false;
|
|
|
+ mThreePkSend = false;
|
|
|
+ mThreePkSendWaitCount = 0;
|
|
|
+ if (mHandler != null) {
|
|
|
+ mHandler.removeCallbacksAndMessages(null);
|
|
|
+ }
|
|
|
+ if (mLiveLinkMicThreePkViewHolder != null) {
|
|
|
+ mLiveLinkMicThreePkViewHolder.release();
|
|
|
+ mLiveLinkMicThreePkViewHolder.removeFromParent();
|
|
|
+ }
|
|
|
+ mLiveLinkMicThreePkViewHolder = null;
|
|
|
+ }
|
|
|
+
|
|
|
+ public boolean isThreePk() {
|
|
|
+ return mIsThreePk;
|
|
|
+ }
|
|
|
+}
|