// 重连(deskinfo)与开局(StartWar) const { load } = require('./_load'); const t = require('./_assert')(); load('client/js/gameabc-framework/system/EventBus.js'); load('client/js/01_SubGame/codes/state/Events.js'); load('client/js/01_SubGame/codes/state/GameState.js'); load('client/js/01_SubGame/codes/state/RoomOptions.js'); load('client/js/01_SubGame/codes/net/handlers/ResyncHandler.js'); const S = EQW_GameState; const evts = []; Object.keys(EQW_Events).forEach(k => EventBus.on(EQW_Events[k], () => evts.push(k))); // ================= setRoomDes:房间选项 ================= S.reset(); S.room.options = null; EQW_ResyncHandler.handleSetRoomDes(123456, 12, '10100'); t.eq('总局数', S.room.asetCount, 12); t.eq('傍王开', S.room.options.bangwang, 1); t.eq('可查牌', S.room.options.nocheck, 0); // ================= deskinfo:step 5 出牌阶段 ================= S.reset(); S.room.mySeat = 1; evts.length = 0; EQW_ResyncHandler.handleDeskinfo({ count: 6, idx: 2, PlayerInfo: [10, -5, -5], step: 5, MyCards: [1,2,3], PushCards: { banker: 0, call: 60, multiple: 3, flower: 3, countdown: 15, grade: 25, playproc: { round: 4, currseat: 1, cards: [[9],[],[]] }, seatlist: [[0,0,0,0,[5,2]],[0,0,0,0,[6,1]],[0,0,0,0,[7,3]]], liangpai: { cards: [52,53] }, pushlist: [[[1],[2],[3]]], curmultiple: 2, mustcard: [4,5] } }); t.eq('总局数', S.room.asetCount, 6); t.eq('当前局', S.room.asetIdx, 2); t.eq('三家总分', S.room.playerScores, [10, -5, -5]); t.eq('阶段', S.aset.step, 5); t.eq('手牌', S.my.cards, [1,2,3]); t.eq('庄家', S.aset.banker, 0); t.eq('主牌花色', S.aset.flower, 3); t.eq('捡分', S.aset.grade, 25); t.eq('抓分倍数', S.aset.curmultiple, 2); t.eq('当前轮出牌情况', S.table.playproc.round, 4); t.eq('出牌历史', S.table.pushlist.length, 1); t.eq('亮牌', S.table.liangpai, { cards: [52,53] }); t.eq('必出牌', S.my.mustCard, [4,5]); t.eq('控制权(由 playproc.currseat 给出)', S.turn.seat, 1); t.eq('重连发全量重画事件', evts.indexOf('EQW_RESYNC_ALL') >= 0, true); // ================= deskinfo:step 1 叫分阶段 ================= S.reset(); evts.length = 0; EQW_ResyncHandler.handleDeskinfo({ count: 6, idx: 1, PlayerInfo: [0,0,0], step: 1, MyCards: [7,8], CallRun: { seat: 2, countdown: 15, nowcall: 65, multiple: 2, call: [null, 0, 65] } }); t.eq('叫分阶段', S.aset.step, 1); t.eq('当前叫分者', S.turn.seat, 2); t.eq('当前叫到的分', S.call.currcall, 65); t.eq('三家叫分', S.call.calls, [null, 0, 65]); // ================= deskinfo:step 2 选主阶段(庄家有 bottomcards)================= S.reset(); evts.length = 0; EQW_ResyncHandler.handleDeskinfo({ count: 6, idx: 1, PlayerInfo: [0,0,0], step: 2, MyCards: [1,2], ChooseMain: { banker: 0, call: 70, multiple: 2, countdown: 20, bottomcards: [1,2,3,4,5,6,7,8], touxiang: 1 } }); t.eq('选主阶段', S.aset.step, 2); t.eq('底牌', S.my.bottomCards, [1,2,3,4,5,6,7,8]); t.eq('允许投降', S.aset.touxiang, 1); t.eq('控制权归庄家', S.turn.seat, 0); // 重连【不重放】70 分开底:deskinfo 里没有 ancard3s t.eq('重连不重放开底', S.table.ancard3s, 0); // ================= deskinfo:step 6 结算阶段 ================= S.reset(); evts.length = 0; EQW_ResyncHandler.handleDeskinfo({ count: 6, idx: 6, PlayerInfo: [12,-6,-6], step: 6, MyCards: [], Balance: { readystate: [1,0,0], aset: { banker: 0, upgrade: 1, seatlist: [] } } }); t.eq('结算阶段', S.aset.step, 6); t.eq('小局结算数据', S.result.aset.upgrade, 1); // ================= StartWar:差异化下发 ================= S.reset(); S.room.mySeat = 2; evts.length = 0; EQW_ResyncHandler.handleStartWar({ data: { deskwar: { sendtype: 1, seatlist: [ { seat: 0, data: { count: 6, idx: 1, PlayerInfo: [0,0,0], step: 1, MyCards: [90] } }, { seat: 2, data: { count: 6, idx: 1, PlayerInfo: [0,0,0], step: 1, MyCards: [11,12] } } ] } } }); t.eq('按本座位取到自己那份', S.my.cards, [11,12]); // 非差异化下发:直接用 data S.reset(); S.room.mySeat = 0; EQW_ResyncHandler.handleStartWar({ data: { count: 6, idx: 1, PlayerInfo: [0,0,0], step: 1, MyCards: [3,4] } }); t.eq('非差异化下发', S.my.cards, [3,4]); // 畸形入参不崩 let boom = false; try { EQW_ResyncHandler.handleStartWar(null); EQW_ResyncHandler.handleDeskinfo(null); } catch (e) { boom = true; } t.eq('畸形入参不崩', boom, false); process.exit(t.done('resync') ? 0 : 1);