import SDKCommandBase from "./SDKCommandBase"; import * as SDKLogicsCore from "../SDKLogics/SDKLogicsCore"; import * as SDKRegistCommand from "../SDKConst/SDKRegistCommand"; import SDKUserInfo from "../SDKLogics/SDKUserInfo"; import SDKPacketPool from "../SDKNetwork/SDKPacketPool"; import SDKPacket from "../SDKNetwork/SDKPacket"; import SDKApp from "../SDKBase/SDKApp"; import SDKContrllerManager from "../SDKController/SDKContrllerManager"; import SDKWebDashBoradController from "../SDKController/SDKWebDashBoradController"; import * as SDKControllerConst from "../SDKConst/SDKControllerConst"; /** * 处理历史消息 * 只恢复到最后一个场景的最后一个关键帧的状态 */ export default class SDKRespondGameHistoryCMD extends SDKCommandBase { private changeScene: string = "gameChangeScene"; execute(data: any): void { super.execute(data); let index = 0, count = 0; let msg: Object; let msgs: Array; let controllerId = SDKLogicsCore.controllState.controllerId; let userInfo: SDKUserInfo; let packet: SDKPacket; console.log("SDKRespondGameHistoryCMD......", data); SDKLogicsCore.historyInfo.isParse = true; if (data == undefined || data == null) { console.error("没有历史数据......"); return; } userInfo = SDKLogicsCore.userInfos.getUserInfoById(data["mobile"]); if (!userInfo) { console.error("历史记录玩家不存在......"); return; } //消息处理 msgs = data["packets"]; count = msgs.length; for (index = 0; index < count; index++) { msg = msgs[index]; if (msg["action"] == SDKRegistCommand.CONTROLLER_CHANGE) { controllerId = msg['data']; continue; } if (!msg['_isMainFrame']) { //非关键帧不处理。。。 continue; } packet = this.parseMsg(msg); userInfo.addPacket(packet); } SDKLogicsCore.controllState.controllerId = controllerId; if (SDKLogicsCore.parameterVo.isTeacher() || SDKLogicsCore.parameterVo.isStudent()) { if (userInfo.userId != SDKLogicsCore.parameterVo.userId) { return; } } else if (SDKLogicsCore.parameterVo.isGameObserver()) { if (userInfo.userId != SDKLogicsCore.parameterVo.observerId) { return; } } //恢复自己的控制权限。。。刷新是不表现魔法棒交接的动画效果的。 if (SDKLogicsCore.parameterVo.isTeacher() || SDKLogicsCore.parameterVo.isOberverTeacher()) { let controller: SDKWebDashBoradController; controller = SDKContrllerManager.instance().getController(SDKControllerConst.WEB_DASHBORAD) as SDKWebDashBoradController; if (controller) { controller.setController(controllerId); } } //恢复自己的界面数据包 let packets: Array = []; packet = userInfo.getLastMainPacket(); if (packet) { if (packet.name != this.changeScene) { packets.push(this.checkChangeScene(packet)); console.log("添加changeScene......"); } packets.push(packet); console.log("添加packet......", packet); } //派发数据包 更新游戏界面 count = packets.length; for (index = 0; index < count; index++) { console.log("派发历史记录消息....", packets[index].name); SDKApp.instance().packetHandler.dispatcherCMD(packets[index]); } this.recylePacket(); } private checkChangeScene(packet: SDKPacket): SDKPacket { let tempPacket: SDKPacket; tempPacket = SDKPacketPool.Acquire(packet.name); tempPacket.name = this.changeScene; tempPacket.isMainFrame = true; tempPacket.data = packet.secene; return tempPacket; } private parseMsg(data: Object): SDKPacket { let packet: SDKPacket; packet = SDKApp.instance().transceiver.messageToPacket(data); return packet; } }