sequenceDiagram participant User as 用户 participant StageView as StageView participant RoomVC as XPRoomViewController participant NIM as NIM SDK participant API as Api服务 participant MenuView as XPRoomMenuContainerView Note over User,MenuView: 用户上mic完整流程 %% 触发阶段 User->>StageView: 点击麦位 StageView->>StageView: microViewTapped(调用didSelectAtIndex) %% 权限检查阶段 StageView->>StageView: 检查麦位状态(空闲/占用/锁定) alt 麦位被占用 StageView->>StageView: displayUserCard(显示用户信息) else 麦位空闲且未锁定 StageView->>RoomVC: 获取聊天室成员信息 %% 用户身份判断 alt 超级管理员/管理员 StageView->>StageView: 显示操作菜单(上麦/锁麦/静音/邀请) User->>StageView: 选择"上麦"操作 else 普通用户 alt 用户已在其他麦位 StageView->>NIM: nimDownQueue(下麦) NIM->>NIM: 更新聊天室队列 end end %% 特殊房间类型处理 alt 特定房间类型(RoomType_19Mic)且位置为6 StageView->>API: requestBossMicUp(老板上麦) API-->>StageView: 返回结果 end %% 上麦核心流程 StageView->>NIM: nimUpQueue(上麦请求) NIM->>NIM: 构建队列扩展信息(userInfoToQueueExt) NIM->>API: 更新聊天室队列 API-->>NIM: 确认队列更新 %% 状态同步阶段 NIM->>RoomVC: onMicroQueueUpdate回调 RoomVC->>MenuView: 分发队列更新事件 MenuView->>MenuView: 更新micButton状态 MenuView->>MenuView: recheckMicState(状态同步检查) %% UI更新阶段 StageView->>StageView: 更新麦位UI显示 StageView->>StageView: 显示用户头像和信息 %% 消息广播 NIM->>NIM: 发送自定义消息(CustomMessageType_Hall_Super_Admin) NIM->>RoomVC: 广播给房间内所有用户 else 麦位被锁定 StageView->>User: 显示"麦位已锁定"提示 end Note over User,MenuView: 流程完成,用户成功上麦