/////////////////////////////////////////////////////////////// ////////// EQW_DealHandler: 发牌(fapai)////////////////////// /////////////////////////////////////////////////////////////// // 协议 §1:asetidx 当前局数 / asetcount 总局数 / cards 自己的 28 张 / // step 阶段(=1 叫分) / seat 当前等待叫分者 / countdown 叫分倒计时 // // 【step 只读包字段,不按 rpc 硬编码】阶段与控制权由服务端唯一维护、逐包显式下发 //(前端红线「数据驱动、前端无对局状态机」/ 服务端红线「任何状态变更都要有包承载」)。 // 曾经这里写死 aset.step = 1:服务端一旦插入中间阶段,前端不会红、只会静默画错。 // // fapai 是一局的起点,先 reset 清掉上一局的残留(reset 保留 mySeat 与 options)。 var EQW_DealHandler = EQW_DealHandler || { handle: function (data) { if (!data.hasOwnProperty('cards')) { console.error('[EQW_DealHandler] fapai 缺 cards,已跳过该包'); return; } EQW_GameState.reset(); EQW_GameState._apply(EQW_GameState.room, data, { asetIdx: 'asetidx', asetCount: 'asetcount' }); EQW_GameState._apply(EQW_GameState.my, data, { cards: 'cards' }); EQW_GameState._apply(EQW_GameState.aset, data, { step: 'step' }); EQW_GameState._apply(EQW_GameState.turn, data, { seat: 'seat', countdown: 'countdown' }); EventBus.emit(EQW_Events.EQW_RESET); EventBus.emit(EQW_Events.EQW_HAND_CHANGED); EventBus.emit(EQW_Events.EQW_TURN_CHANGED); } };