878678516a72686ebd0cbe7b8e98ffd6f7c0f5b5.js 8.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284
  1. System.register(["__unresolved_0", "cc"], function (_export, _context) {
  2. "use strict";
  3. var _reporterNs, _cclegacy, __checkObsolete__, __checkObsoleteInNamespace__, log, warn, EventData, MessageEventData, MessageManager, _crd, message;
  4. function _reportPossibleCrUseOfListenerFunc(extras) {
  5. _reporterNs.report("ListenerFunc", "./EventMessage", _context.meta, extras);
  6. }
  7. _export({
  8. MessageEventData: void 0,
  9. MessageManager: void 0
  10. });
  11. return {
  12. setters: [function (_unresolved_) {
  13. _reporterNs = _unresolved_;
  14. }, function (_cc) {
  15. _cclegacy = _cc.cclegacy;
  16. __checkObsolete__ = _cc.__checkObsolete__;
  17. __checkObsoleteInNamespace__ = _cc.__checkObsoleteInNamespace__;
  18. log = _cc.log;
  19. warn = _cc.warn;
  20. }],
  21. execute: function () {
  22. _crd = true;
  23. _cclegacy._RF.push({}, "a401fY+wj9NsqOACoZ7Zy/R", "MessageManager", undefined);
  24. __checkObsolete__(['log', 'warn']);
  25. EventData = class EventData {
  26. constructor() {
  27. this.event = void 0;
  28. this.listener = void 0;
  29. this.object = void 0;
  30. }
  31. };
  32. /** 批量注册、移除全局事件对象 */
  33. _export("MessageEventData", MessageEventData = class MessageEventData {
  34. constructor() {
  35. this.events = new Map();
  36. }
  37. /**
  38. * 注册全局事件
  39. * @param event 事件名
  40. * @param listener 处理事件的侦听器函数
  41. * @param object 侦听函数绑定的作用域对象
  42. */
  43. on(event, listener, object) {
  44. var eds = this.events.get(event);
  45. if (eds == null) {
  46. eds = [];
  47. this.events.set(event, eds);
  48. }
  49. var ed = new EventData();
  50. ed.event = event;
  51. ed.listener = listener;
  52. ed.object = object;
  53. eds.push(ed);
  54. message.on(event, listener, object);
  55. }
  56. /**
  57. * 移除全局事件
  58. * @param event 事件名
  59. */
  60. off(event) {
  61. var eds = this.events.get(event);
  62. if (!eds) return;
  63. for (var eb of eds) {
  64. message.off(event, eb.listener, eb.object);
  65. }
  66. this.events.delete(event);
  67. }
  68. /**
  69. * 触发全局事件
  70. * @param event 事件名
  71. * @param args 事件参数
  72. */
  73. dispatchEvent(event) {
  74. for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
  75. args[_key - 1] = arguments[_key];
  76. }
  77. message.dispatchEvent(event, ...args);
  78. }
  79. /** 清除所有的全局事件监听 */
  80. clear() {
  81. var keys = Array.from(this.events.keys());
  82. for (var event of keys) {
  83. this.off(event);
  84. }
  85. }
  86. });
  87. /**
  88. * 全局消息管理
  89. * @help https://gitee.com/dgflash/oops-framework/wikis/pages?sort_id=12037894&doc_id=2873565
  90. * @example
  91. // 注册持续监听的全局事件
  92. export class RoleViewComp extends Component{
  93. onLoad(){
  94. // 监听全局事件
  95. oops.message.on(GameEvent.GameServerConnected, this.onHandler, this);
  96. }
  97. protected onDestroy() {
  98. // 对象释放时取消注册的全局事件
  99. oops.message.off(GameEvent.GameServerConnected, this.onHandler, this);
  100. }
  101. private onHandler(event: string, args: any) {
  102. switch (event) {
  103. case GameEvent.GameServerConnected:
  104. console.log("处理游戏服务器连接成功后的逻辑");
  105. break;
  106. }
  107. }
  108. }
  109. // 注册只触发一次的全局事件
  110. export class RoleViewComp extends Component{
  111. onLoad(){
  112. // 监听一次事件,事件响应后,该监听自动移除
  113. oops.message.once(GameEvent.GameServerConnected, this.onHandler, this);
  114. }
  115. private onHandler(event: string, args: any) {
  116. switch (event) {
  117. case GameEvent.GameServerConnected:
  118. console.log("处理游戏服务器连接成功后的逻辑");
  119. break;
  120. }
  121. }
  122. }
  123. */
  124. _export("MessageManager", MessageManager = class MessageManager {
  125. constructor() {
  126. this.events = new Map();
  127. }
  128. /**
  129. * 注册全局事件
  130. * @param event 事件名
  131. * @param listener 处理事件的侦听器函数
  132. * @param object 侦听函数绑定的作用域对象
  133. */
  134. on(event, listener, object) {
  135. if (!event || !listener) {
  136. warn("\u6CE8\u518C\u3010" + event + "\u3011\u4E8B\u4EF6\u7684\u4FA6\u542C\u5668\u51FD\u6570\u4E3A\u7A7A");
  137. return;
  138. }
  139. var eds = this.events.get(event);
  140. if (eds == null) {
  141. eds = [];
  142. this.events.set(event, eds);
  143. }
  144. var length = eds.length;
  145. for (var i = 0; i < length; i++) {
  146. var bin = eds[i];
  147. if (bin.listener == listener && bin.object == object) {
  148. warn("\u540D\u4E3A\u3010" + event + "\u3011\u7684\u4E8B\u4EF6\u91CD\u590D\u6CE8\u518C\u4FA6\u542C\u5668");
  149. }
  150. }
  151. var data = new EventData();
  152. data.event = event;
  153. data.listener = listener;
  154. data.object = object;
  155. eds.push(data);
  156. }
  157. /**
  158. * 监听一次事件,事件响应后,该监听自动移除
  159. * @param event 事件名
  160. * @param listener 事件触发回调方法
  161. * @param object 侦听函数绑定的作用域对象
  162. */
  163. once(event, listener, object) {
  164. var _this = this;
  165. var _listener2 = function _listener($event) {
  166. _this.off(event, _listener2, object);
  167. _listener2 = null;
  168. for (var _len2 = arguments.length, $args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {
  169. $args[_key2 - 1] = arguments[_key2];
  170. }
  171. listener.call(object, $event, $args);
  172. };
  173. this.on(event, _listener2, object);
  174. }
  175. /**
  176. * 移除全局事件
  177. * @param event 事件名
  178. * @param listener 处理事件的侦听器函数
  179. * @param object 侦听函数绑定的作用域对象
  180. */
  181. off(event, listener, object) {
  182. var eds = this.events.get(event);
  183. if (!eds) {
  184. log("\u540D\u4E3A\u3010" + event + "\u3011\u7684\u4E8B\u4EF6\u4E0D\u5B58\u5728");
  185. return;
  186. }
  187. var length = eds.length;
  188. for (var i = 0; i < length; i++) {
  189. var bin = eds[i];
  190. if (bin.listener == listener && bin.object == object) {
  191. eds.splice(i, 1);
  192. break;
  193. }
  194. }
  195. if (eds.length == 0) {
  196. this.events.delete(event);
  197. }
  198. }
  199. /**
  200. * 触发全局事件
  201. * @param event 事件名
  202. * @param args 事件参数
  203. */
  204. dispatchEvent(event) {
  205. var list = this.events.get(event);
  206. if (list != null) {
  207. var eds = list.concat();
  208. var length = eds.length;
  209. for (var _len3 = arguments.length, args = new Array(_len3 > 1 ? _len3 - 1 : 0), _key3 = 1; _key3 < _len3; _key3++) {
  210. args[_key3 - 1] = arguments[_key3];
  211. }
  212. for (var i = 0; i < length; i++) {
  213. var eventBin = eds[i];
  214. eventBin.listener.call(eventBin.object, event, ...args);
  215. }
  216. }
  217. }
  218. });
  219. _export("message", message = new MessageManager());
  220. _cclegacy._RF.pop();
  221. _crd = false;
  222. }
  223. };
  224. });
  225. //# sourceMappingURL=878678516a72686ebd0cbe7b8e98ffd6f7c0f5b5.js.map