/////////////////////////////////////////////////////////////// ////////// EQW_Dispatcher: 唯一收包入口 + 纯路由表 //////////// /////////////////////////////////////////////////////////////// // 前端 04 §2:收包统一分发,一 rpc 一处理器。 // 【本文件只分发,不写业务】——新增一种服务端推送 = 注册一条 rpc → handler。 // // 判定顺序(关键):先看 data.success,为 false 一律交 FailHandler、不进业务 handler。 // 因为协议 §0.2 规定失败回包的 rpc 与【请求】同名(chupai 失败回 chupai, // 而成功走 chupai1/2/3),不先分流的话每个业务 handler 都得自己判一遍。 var EQW_Dispatcher = EQW_Dispatcher || { _handlers: {}, //注册一条 rpc → handler register: function (rpc, handler) { if (typeof rpc !== 'string' || typeof handler !== 'function') { throw new Error('[EQW_Dispatcher] register 参数非法: ' + rpc); } if (this._handlers.hasOwnProperty(rpc)) { throw new Error('[EQW_Dispatcher] rpc 重复注册: ' + rpc); } this._handlers[rpc] = handler; }, hasHandler: function (rpc) { return this._handlers.hasOwnProperty(rpc); }, //唯一收包入口。msg = { rpc, data } dispatch: function (msg) { if (!msg || typeof msg.rpc !== 'string') { console.warn('[EQW_Dispatcher] 畸形数据包,已忽略'); return; } var data = msg.data || {}; //成败只认 data.success(前端 04 §4):失败包一律先分流 if (data.success === false) { EQW_FailHandler.handle(msg.rpc, data); return; } var h = this._handlers[msg.rpc]; if (h) { h(data); } else { //平台日后新增推送不该让前端崩 console.warn('[EQW_Dispatcher] 未处理的 rpc: ' + msg.rpc); } } };