// 明牌 / 提示 / 准备 handler 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/net/handlers/QueryHandler.js'); load('client/js/01_SubGame/codes/net/handlers/ReadyHandler.js'); const S = EQW_GameState; const payloads = []; EventBus.on(EQW_Events.EQW_TIP, d => payloads.push(d)); const evts = []; Object.keys(EQW_Events).forEach(k => EventBus.on(EQW_Events[k], () => evts.push(k))); // ================= mingpai ================= S.reset(); evts.length = 0; EQW_QueryHandler.handleMingpai({ success: true, seat: 1, others: [{ seat: 0, zhucards: [52, 2] }, { seat: 2, zhucards: [53, 15] }] }); t.eq('明牌数据入状态', S.table.mingpai, [{ seat: 0, zhucards: [52, 2] }, { seat: 2, zhucards: [53, 15] }]); t.eq('明牌发事件', evts.indexOf('EQW_MINGPAI') >= 0, true); // ================= tishi ================= // 提示是一次性的,不进 GameState,只随事件带出去 S.reset(); payloads.length = 0; evts.length = 0; const before = S.snapshot(); // 处理前的状态快照 EQW_QueryHandler.handleTishi({ success: true, seat: 2, tip: 1 }); t.eq('提示发事件', evts.indexOf('EQW_TIP') >= 0, true); t.eq('提示内容随事件带出', payloads, [{ seat: 2, tip: 1 }]); t.eq('提示未改动 GameState 任何字段', S.snapshot(), before); // ================= zhunbei ================= S.reset(); evts.length = 0; EQW_ReadyHandler.handle({ success: true, seat: 1 }); t.eq('准备发事件', evts.indexOf('EQW_READY_CHANGED') >= 0, true); // ================= 缺必需字段 ================= S.reset(); EQW_QueryHandler.handleMingpai({ success: true }); //缺 others t.eq('明牌缺 others 时不写', S.table.mingpai, null); payloads.length = 0; EQW_QueryHandler.handleTishi({ success: true, seat: 0 }); //缺 tip t.eq('提示缺 tip 时不发事件', payloads, []); process.exit(t.done('handlers_query') ? 0 : 1);