// SubGameHooks 接线:平台入口 → 新架构 const { load } = require('./_load'); const t = require('./_assert')(); global.window = global; // 转发壳用 window.SubGameHooks 判定 load('client/js/gameabc-framework/system/EventBus.js'); load('client/js/gameabc-framework/system/SpriteEventController.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'); ['DealHandler','CallHandler','MainHandler','BuryHandler','PlayHandler', 'QueryHandler','ReadyHandler','ResultHandler','ResyncHandler','FailHandler'] .forEach(h => load('client/js/01_SubGame/codes/net/handlers/' + h + '.js')); load('client/js/01_SubGame/codes/net/Dispatcher.js'); load('client/js/01_SubGame/codes/SubGameHooks.js'); const S = EQW_GameState; // ---- _ReceiveData:完整包 → 分发 ---- S.reset(); S.room.mySeat = 0; SubGameHooks._ReceiveData({ app: 'youle', route: 'erqiwang', rpc: 'fapai', data: { success: true, asetidx: 1, asetcount: 6, cards: [1,2], seat: 0, countdown: 15 } }); t.eq('_ReceiveData 分发到 handler', S.my.cards, [1,2]); // ---- setRoomDes ---- SubGameHooks.setRoomDes(123, 12, '00010'); t.eq('setRoomDes 解析选项', S.room.options.climb, 1); // ---- Free:null 不崩 ---- let boom = false; try { SubGameHooks.Free(null); } catch (e) { boom = true; } t.eq('Free(null) 不崩', boom, false); // ---- Reconnect ---- S.reset(); S.room.mySeat = 1; SubGameHooks.Reconnect({ count: 6, idx: 3, PlayerInfo: [0,0,0], step: 1, MyCards: [5,6] }); t.eq('Reconnect 填状态', S.my.cards, [5,6]); t.eq('Reconnect 填局数', S.room.asetIdx, 3); // ---- 畸形入参一律不崩 ---- boom = false; try { SubGameHooks._ReceiveData(null); SubGameHooks._ReceiveData({}); SubGameHooks.StartWar(null); SubGameHooks.Reconnect(null); SubGameHooks.setRoomDes(); } catch (e) { boom = true; } t.eq('畸形入参不崩', boom, false); process.exit(t.done('hooks') ? 0 : 1);