123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218 |
- /**
- * 公共数据管理
- * 主要内容:
- * 1、影响多个模块的服务端推送数据的分发。如:“金豆变化”影响:背包、个人信息、牌局等
- * 2、影响多个模块的事件处理。如:“跨天”影响:很多模块
- */
- let PublicMgr = {
- /**
- * 初始化
- *
- * @author Pyden
- * @date 2019-05-09
- */
- init () {
- if (CC_EDITOR) {
- return;
- }
- // 标记 h5user_self_info on_h5user_system_info 状态
- // 必须要收到这两个消息后才发送 LOGIN_SUCCESS
- this.isDoneUserSelfInfo = false;
- this.isDoneSystemInfo = false;
- this.initEventListeners();
- // 玩家系统信息 20100
- cc.game.on('on_h5user_system_info', this._onPublishUserSystemInfo, this);
- // 更新玩家信息 20101
- cc.game.on('on_h5user_info', this._onPublishUserInfo, this);
- },
- /**
- * 初始化事件监听列表
- *
- * @author libo
- * @date 2019-05-25
- */
- initEventListeners () {
- // 事件监听列表
- this.eventListeners = {};
- for (const eventType of Object.values(JMC.PUBLIC_MSG)) {
- this.eventListeners[eventType] = [];
- }
- },
- /**
- * 监听消息
- *
- * @author libo
- * @date 2019-05-24
- * @param {JMC.PUBLIC_MSG} eventType 事件类型
- * @param {JMC.PUBLIC_MSG_ORDER} eventOrder 事件优先级
- * @param {Function} listener 监听函数
- * @param {Object} target 监听者
- * @returns
- */
- on (eventType, eventOrder, listener, target) {
- if (JMC.PUBLIC_MSG[eventType] === undefined) {
- // eventType 检查
- G.LogUtils.error('[PublicMgr]:未知消息类型 ' + eventType + ',请检查JMC.PUBLIC_MSG');
- return;
- }
- // 将消息加入列表中
- this.eventListeners[eventType].push({
- eventOrder: eventOrder,
- listener: listener,
- target: target
- });
- // 将消息重新排序
- this.eventListeners[eventType].sort((a, b) => {
- // 升序排序
- return a.eventOrder - b.eventOrder;
- });
- },
- /**
- * 发送消息
- *
- * @author libo
- * @date 2019-05-24
- * @param {JMC.PUBLIC_MSG} eventType 事件类型
- * @returns
- */
- emit (eventType) {
- if (JMC.PUBLIC_MSG[eventType] === undefined) {
- // eventType 检查
- G.LogUtils.error('[PublicMgr]:未知消息类型 ' + eventType + ',请检查JMC.PUBLIC_MSG');
- return;
- }
- for (const event of this.eventListeners[eventType]) {
- // 触发监听
- event.listener.call(event.target);
- }
- },
- /**
- * 取消监听
- *
- * @author libo
- * @date 2019-05-24
- * @param {JMC.PUBLIC_MSG} eventType 事件类型
- * @param {JMC.PUBLIC_MSG_ORDER} eventOrder 事件优先级
- * @param {Object} target 监听者
- * @returns
- */
- off (eventType, eventOrder, target) {
- if (JMC.PUBLIC_MSG[eventType] === undefined) {
- // eventType 检查
- G.LogUtils.error('[PublicMgr]:未知消息类型 ' + eventType + ',请检查JMC.PUBLIC_MSG');
- return;
- }
- for (let index = 0; index < this.eventListeners[eventType].length; index++) {
- const event = this.eventListeners[eventType];
- if (event.eventOrder == eventOrder && event.target == target) {
- // order相同 并且 target相同 就移除
- this.eventListeners[eventType].splice(index, 1);
- // splice后避免跳过下一个元素
- // index - 1
- index -= 1;
- }
- }
- },
- /**
- * 移除目标上的所有注册事件
- *
- * @author libo
- * @date 2019-05-25
- * @param {obejct} target 需要移除事件的对象
- */
- targetOff (target) {
- for (const eventListener of this.eventListeners) {
- // 循环所有的消息类型
- for (let index = 0; index < eventListener.length; index++) {
- // 循环所有的监听者
- const event = eventListener[index];
- if (event.target == target) {
- // target相同 就移除
- eventListener.splice(index, 1);
- // splice后避免跳过下一个元素
- // index - 1
- index -= 1;
- }
- }
- }
- },
- /**
- * 清理事件
- * eventType不指定就清除全部事件
- *
- * @author libo
- * @date 2019-05-25
- * @param {JMC.PUBLIC_MSG || undefined} eventType 事件类型
- */
- clear (eventType) {
- if (eventType) {
- if (JMC.PUBLIC_MSG[eventType] === undefined) {
- // eventType 检查
- G.LogUtils.error('[PublicMgr]:未知消息类型 ' + eventType + ',请检查JMC.PUBLIC_MSG');
- return;
- }
- // 清理指定类型监听
- this.eventListeners[eventType] = [];
- } else {
- // 清理全部监听者
- // this.eventListeners = {};
- for (const eventType of Object.keys(this.eventListeners)) {
- this.eventListeners[eventType] = [];
- }
- }
- },
- // # 玩家系统信息
- // on_user_system_info 2000 {
- // request {
- // sheildList 0: *integer # 功能ID列表
- // }
- // }
- _onPublishUserSystemInfo (data) {
- // 数据_onUserInfo统一处理
- this._onUserInfo(data);
- // 登录完成判断
- this.isDoneSystemInfo = true;
- if (this.isDoneUserSelfInfo) {
- this.isDoneUserSelfInfo = false;
- this.isDoneSystemInfo = false;
- this.emit(JMC.PUBLIC_MSG.LOGIN_SUCCESS);
- }
- },
- // # 更新玩家信息
- // on_h5user_info 20101 {
- // request {
- // payInfo 0: DataPayInfo # 支付信息
- // currDayStatement 1: DataDayStatement # 当天统计信息
- // clusteringInfo 2: DataClustering # 分群信息
- // }
- // }
- _onPublishUserInfo (data) {
- // 数据_onUserInfo统一处理
- this._onUserInfo(data);
- },
- // 玩家推送信息处理
- _onUserInfo (data) {
- G.UserMgr.setUserSystemInfo(data);
- // 发送用户信息更新
- // 通知UI刷新
- cc.game.emit('e_mgr_update_user_info');
- }
- };
- module.exports = PublicMgr;
|