eventManager.ts 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. export class eventManager {
  2. private static _instance: eventManager;
  3. private constructor() { }
  4. public static get instance(): eventManager {
  5. if (!this._instance) {
  6. this._instance = new eventManager();
  7. }
  8. return this._instance;
  9. }
  10. acList: any = {};
  11. on(ac: string | number, cb: Function, sender: any) {
  12. let arr = this.acList[ac];
  13. if (!arr) {
  14. arr = [];
  15. this.acList[ac] = arr;
  16. }
  17. // 避免重复添加
  18. for (let i in arr) {
  19. let item = arr[i];
  20. if (item.sender == sender) {
  21. return;
  22. }
  23. }
  24. let item: any = {};
  25. item.cb = cb;
  26. item.sender = sender;
  27. arr.push(item);
  28. }
  29. off(ac: string | number, cb: Function, sender: any) {
  30. let arr = this.acList[ac];
  31. if (!arr) {
  32. return;
  33. }
  34. let tmpArr = [];
  35. for (let i in arr) {
  36. let item = arr[i];
  37. if (item.cb == cb || item.sender == sender) {
  38. continue;
  39. }
  40. tmpArr.push(item);
  41. }
  42. this.acList[ac] = tmpArr;
  43. }
  44. send(ac: string | number, data?: any) {
  45. let arr = this.acList[ac];
  46. if (!arr) {
  47. return;
  48. }
  49. try {
  50. for (let i in arr) {
  51. let item = arr[i];
  52. let cb = item.cb;
  53. let sender = item.sender;
  54. let info = {
  55. ac: ac,
  56. data: data
  57. };
  58. cb.call(sender, info);
  59. }
  60. } catch (err) {
  61. console.log("eventManager send error:" + err.message, ac, data, err);
  62. }
  63. }
  64. }