三人PK功能实现说明.md 5.8 KB

三人PK功能Android客户端实现说明

📋 功能概述

基于后台三人PK修改,成功实现了Android客户端的三人PK功能。该功能允许在三人连麦的基础上进行PK竞赛,通过礼物统计来决定胜负。

🏗️ 架构设计

核心组件

1. Socket通信层

  • SocketLinkMicThreePkUtil.java - 三人PK Socket消息处理工具类
    • 发起三人PK邀请
    • 接受/拒绝PK邀请
    • PK开始/结束通知
    • 实时状态同步

2. 业务逻辑层

  • LiveLinkMicThreePkPresenter.java - 三人PK业务逻辑处理器
    • 管理PK完整生命周期
    • 处理礼物统计逻辑
    • 状态管理和转换
    • 定时器管理

3. UI展示层

  • LiveLinkMicThreePkViewHolder.java - 三人PK界面控制器
  • ThreePkProgressBar.java - 自定义三人PK进度条
  • 相关布局文件 - 完整的UI布局

4. 数据模型

  • LiveThreePkBean.java - 三人PK数据模型
  • 支持完整的PK信息存储和传输

🔧 集成实现

HTTP接口集成

LiveHttpUtil.java 中添加:

// 开始三人PK
public static void setThreePK(String uid, String pkUid2, String pkUid3, HttpCallback callback)

// 结束三人PK  
public static void endThreePK(String uid, long addTime, int type, HttpCallback callback)

Socket消息处理

SocketClient.java 中添加:

case Constants.SOCKET_LIVE_THREE_PK:
    // 处理三人PK相关消息
    handleLiveThreePkMessage(obj);
    break;

Activity集成

主播端 (LiveAnchorActivity)

// 三人PK Presenter初始化
mLiveLinkMicThreePkPresenter = new LiveLinkMicThreePkPresenter(mContext, mLivePushViewHolder, true, mContainer);

// 接口方法实现
@Override
public void onLinkMicThreePkApply(UserBean u, String pkUid2, String pkUid3) {
    // 处理三人PK申请
}

@Override  
public void onLinkMicThreePkGiftUpdate(String uid1, String uid2, String uid3, 
                                      long gift1, long gift2, long gift3) {
    // 处理礼物统计更新
}

观众端 (LiveAudienceActivity)

// 实现所有三人PK相关接口方法
@Override
public void onLinkMicThreePkStart(String uid1, String uid2, String uid3, String roomId, long addTime) {
    // 观众端处理三人PK开始
}

@Override
public void onLinkMicThreePkEnd(String winUid, String uid1, String uid2, String uid3, 
                               long gift1, long gift2, long gift3, String roomId) {
    // 观众端处理三人PK结束
}

📱 UI组件

自定义进度条

public class ThreePkProgressBar extends View {
    // 支持三个主播的礼物统计显示
    // 实时更新PK进度
    // 自定义绘制逻辑
}

布局文件

  • view_live_link_mic_three_pk.xml - 三人PK主布局
  • view_three_pk_progress.xml - 进度条布局
  • item_three_pk_anchor.xml - 主播信息项布局

🔄 与后台对接

Redis数据结构对应

  • LivePK_Three - 三人PK房间信息
  • LivePK_Three_gift - 礼物统计
  • LivePK_Three_timer - PK开始时间

Socket消息协议

{
    "msg": [{
        "_method_": "LiveThreePK",
        "action": "1", // 1:发起 2:接受 3:拒绝 4:开始 5:结束 7:忙碌 8:无响应 9:结果
        "msgtype": "10",
        "uid": "发起者ID",
        "pkuid2": "主播2ID", 
        "pkuid3": "主播3ID"
    }]
}

HTTP接口参数

// 开始三人PK
setThreePK(uid, pkuid2, pkuid3, sign)

// 结束三人PK
endThreePK(uid, addtime, type, sign)

🎯 功能流程

完整PK流程

  1. 建立三人连麦 - 三个主播先建立连麦关系
  2. 发起三人PK - 任一主播发起三人PK邀请
  3. 接受PK - 其他主播接受PK邀请
  4. PK进行 - 观众送礼物,实时统计各主播礼物价值
  5. PK结束 - 5分钟后自动结束或手动结束
  6. 结果公布 - 礼物价值最高者获胜

状态管理

  • mIsThreePk - 是否在三人PK中
  • mAcceptThreePk - 是否接受PK
  • mPkTimeCount - PK倒计时
  • mIsThreePkEnd - PK是否结束

✅ 兼容性保证

向后兼容

  • ✅ 不影响现有的一对一PK功能
  • ✅ 不影响现有的三人连麦功能
  • ✅ 遵循现有代码架构和规范
  • ✅ 复用现有UI组件和样式

最小改动原则

  • 复用现有的房间管理机制
  • 复用现有的礼物发送机制
  • 复用现有的Socket通信机制
  • 仅在必要位置增加三人PK相关逻辑

🧪 测试建议

功能测试

  1. 三人连麦建立后发起PK
  2. PK过程中礼物统计准确性
  3. PK自动结束和手动结束
  4. 异常情况处理(断线重连等)

性能测试

  1. 多个三人PK房间同时进行
  2. 高频礼物发送时的统计性能
  3. UI渲染性能测试

兼容性测试

  1. 确保一对一PK功能正常
  2. 确保三人连麦功能正常
  3. 确保普通礼物发送功能正常

📦 部署说明

编译状态

  • ✅ live模块编译成功
  • ✅ 所有Java代码编译通过
  • ✅ 资源文件正确集成
  • ✅ AndroidManifest.xml合并成功

部署步骤

  1. 备份现有代码
  2. 集成新增的三人PK代码
  3. 测试功能完整性
  4. 与后台进行联调

回滚方案

如果出现问题,可以快速回滚,因为新功能是增量式的,不会破坏现有数据结构。

🎉 总结

本次三人PK功能的实现严格遵循了最小改动原则,在现有架构基础上进行扩展,确保了:

  1. 功能完整性 - 支持完整的三人PK流程
  2. 向后兼容 - 不影响现有功能
  3. 代码质量 - 遵循现有代码规范
  4. 性能优化 - 复用现有机制,避免重复开发
  5. 易于维护 - 代码结构清晰,便于后续维护

该实现方案已经编译通过,可以直接与后台进行联调测试,为平台增加更丰富的互动玩法。


实现完成时间: 2025年9月27日
编译状态: ✅ 成功
准备状态: 🚀 可以部署测试