@ives_xxz/framework 1.5.17 → 1.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/FW.d.ts CHANGED
@@ -373,11 +373,12 @@ declare namespace FW {
373
373
  type Symbol = string | number;
374
374
 
375
375
  type UiManager = {
376
- registerButtonEvent(args: FW.RegisterEventArgs | FW.RegisterEventArgs[]);
376
+ register(args: RegisterArgs);
377
+ find(path: string, referenceNode: cc.Node): cc.Node;
377
378
  pauseEvent<T extends TargetType>(target: T);
378
379
  resumeEvent<T extends TargetType>(target: T);
379
380
  hasRegister(eventName: string, target: FW.TargetType): boolean;
380
- unRegisterEvent(args: FW.RegisterEventArgs);
381
+ unRegisterEvent(args: RegisterArgs);
381
382
  unRegisterTarget(target: TargetType);
382
383
  unRegisterAll();
383
384
  buttonEnable(target: TargetType);
@@ -599,7 +600,7 @@ declare namespace FW {
599
600
  /**
600
601
  * 事件管理参数
601
602
  */
602
- type EventManagerArgs = string | number | object | [];
603
+ type EventManagerArgs = string | number | object | void | boolean | [];
603
604
 
604
605
  /**
605
606
  * 层级打开参数
@@ -1138,15 +1139,8 @@ declare namespace FW {
1138
1139
  prototype: T;
1139
1140
  }
1140
1141
  ): T;
1141
- /** 指定注册CC事件 */
1142
- registerCCEvent(eventName: string, event: FW.CCEvent | FW.CCEvent[]): void;
1143
-
1144
- /** 指定注册框架自定义事件 */
1145
- registerFWEvent(eventName: string, event: FW.FWEvent | FW.FWEvent[]): void;
1146
-
1147
- registerEvent(args: FW.RegisterEventArgs | FW.RegisterEventArgs[]): void;
1148
-
1149
- unRegisterEvent(args: FW.RegisterEventArgs);
1142
+ registerEvent(args: RegisterArgs): void;
1143
+ unRegisterEvent(args: RegisterArgs);
1150
1144
  unRegisterAll(): void;
1151
1145
  unRegisterTarget(target: TargetType);
1152
1146
  /** 暂停事件 */
@@ -1168,15 +1162,34 @@ declare namespace FW {
1168
1162
  };
1169
1163
 
1170
1164
  type CCEvent = {
1165
+ eventName?: string;
1171
1166
  cb: (...args: any) => void;
1172
1167
  target: TargetType;
1168
+ responseInterval?: number;
1173
1169
  pause?: boolean;
1170
+ enable?: boolean;
1171
+ responseTime?: number;
1172
+ lastResponseTimestamp?: number;
1174
1173
  };
1175
1174
 
1176
1175
  type FWEvent = {
1176
+ eventName?: string;
1177
1177
  cb: (...args: any) => void;
1178
- target: any;
1179
- pause?: boolean;
1178
+ responseTime?: number;
1179
+ responseInterval?: number;
1180
+ lastResponseTimestamp?: number;
1181
+ options?: {
1182
+ priority?: number;
1183
+ intercept?: boolean;
1184
+ pause?: boolean;
1185
+ enable?: boolean;
1186
+ };
1187
+ };
1188
+
1189
+ type RegisterArgs = {
1190
+ target?: any;
1191
+ CCEvent?: CCEvent[];
1192
+ FWEvent?: FWEvent[];
1180
1193
  };
1181
1194
 
1182
1195
  type RegisterEventArgs = {
@@ -1189,7 +1202,7 @@ declare namespace FW {
1189
1202
  /**
1190
1203
  * 注册事件对象
1191
1204
  */
1192
- target: any;
1205
+ target?: any;
1193
1206
  /**
1194
1207
  * 自定义事件
1195
1208
  */
@@ -1,7 +1,6 @@
1
1
  import { FWSystemDefine } from "../define/FWSystemDefine";
2
2
  import FWLayer from "../layer/FWLayer";
3
3
  import { FWLayerData } from "../manager/FWLayerManager";
4
- import FWLog from "../log/FWLog";
5
4
  import { FrameworkBase } from "../FrameworkBase";
6
5
  export abstract class FWLayerController
7
6
  extends FrameworkBase
@@ -56,17 +55,7 @@ export abstract class FWLayerController
56
55
  * @returns
57
56
  */
58
57
  find(path: string, referenceNode: cc.Node) {
59
- if (!cc.isValid(parent)) {
60
- FWLog.error(`查找节点失败:${path}`);
61
- return undefined;
62
- }
63
- const node = cc.find(path, referenceNode);
64
-
65
- if (!cc.isValid(node)) {
66
- FWLog.error(`查找节点失败:${path}`);
67
- return undefined;
68
- }
69
- return node;
58
+ return this.entry.uiMgr.find(path, referenceNode);
70
59
  }
71
60
 
72
61
  hide(ctr?: FW.LayerController) {
@@ -106,104 +95,63 @@ export abstract class FWLayerController
106
95
  return this.layer.getComponentInChildren(type);
107
96
  }
108
97
 
109
- /** 指定注册CC事件 */
110
- registerCCEvent(event: FW.CCEvent | FW.CCEvent[]);
111
- registerCCEvent(eventName: string, event: FW.CCEvent | FW.CCEvent[]);
112
- registerCCEvent() {
113
- let eventName: string;
114
- let event: FW.CCEvent | FW.CCEvent[];
115
- if (arguments.length == 1) {
116
- event = arguments[0];
117
- } else {
118
- eventName = arguments[0];
119
- event = arguments[1];
120
- }
121
-
122
- if (Array.isArray(event)) {
123
- event.forEach((v) => {
124
- FW.Entry.uiMgr.registerButtonEvent({
125
- eventName: eventName,
126
- CCEvent: {
127
- cb: v.cb,
128
- target: v.target,
129
- pause: v.pause,
130
- },
131
- responseInterval: this.defaultResponseInterval,
132
- target: this,
133
- });
134
- });
135
- } else {
136
- FW.Entry.uiMgr.registerButtonEvent({
137
- eventName: eventName,
138
- CCEvent: {
139
- cb: event.cb,
140
- target: event.target,
141
- pause: event.pause,
142
- },
143
- responseInterval: this.defaultResponseInterval,
144
- target: this,
145
- });
146
- }
147
- }
148
-
149
98
  /**
150
99
  * 注册事件
151
- * 支持CC事件和框架事件
152
100
  */
153
- registerEvent(args: FW.RegisterEventArgs | FW.RegisterEventArgs[]): void {
154
- const cb: (d: FW.RegisterEventArgs) => void = (d: FW.RegisterEventArgs) => {
155
- if (d.CCEvent) {
156
- this.registerCCEvent(d.CCEvent);
157
- } else {
158
- this.registerFWEvent(d.FWEvent);
159
- }
160
- };
161
-
162
- if (Array.isArray(args)) {
163
- args.forEach((v) => {
164
- cb(v);
165
- });
166
- } else {
167
- cb(args);
168
- }
169
- }
170
-
171
- /** 指定注册框架自定义事件 */
172
- registerFWEvent(event: FW.FWEvent | FW.FWEvent[]);
173
- registerFWEvent(eventName: string, event: FW.FWEvent | FW.FWEvent[]);
174
- registerFWEvent() {
175
- let eventName: string;
176
- let event: FW.CCEvent | FW.CCEvent[];
177
- if (arguments.length == 1) {
178
- event = arguments[0];
179
- } else {
180
- eventName = arguments[0];
181
- event = arguments[1];
182
- }
183
-
184
- if (Array.isArray(event)) {
185
- event.forEach((v) => {
186
- FW.Entry.uiMgr.registerButtonEvent({
101
+ registerEvent(args: FW.RegisterArgs): void {
102
+ args.target = args.target || this;
103
+ args.CCEvent?.forEach(
104
+ (v) => (v.responseInterval = this.defaultResponseInterval)
105
+ );
106
+ args.FWEvent?.forEach(
107
+ (v) => (v.responseInterval = this.defaultResponseInterval)
108
+ );
109
+ return this.entry.uiMgr.register({
110
+ target: this,
111
+ CCEvent: args?.CCEvent ? args?.CCEvent : [],
112
+ FWEvent: args?.FWEvent ? args?.FWEvent : [],
113
+ });
114
+ }
115
+
116
+ cc(
117
+ target: cc.Node,
118
+ cb: (event: cc.Event) => void,
119
+ responseInterval?: number,
120
+ eventName?: string
121
+ ): this {
122
+ this.registerEvent({
123
+ target: this,
124
+ CCEvent: [
125
+ {
126
+ eventName: eventName || cc.Node.EventType.TOUCH_END,
127
+ cb: cb,
128
+ target: target,
129
+ responseInterval: responseInterval,
130
+ },
131
+ ],
132
+ });
133
+
134
+ return this;
135
+ }
136
+
137
+ fw(
138
+ eventName: string,
139
+ cb: (event: cc.Event) => void,
140
+ target?: cc.Node,
141
+ responseInterval?: number
142
+ ): this {
143
+ this.registerEvent({
144
+ target: target || this,
145
+ FWEvent: [
146
+ {
187
147
  eventName: eventName,
188
- FWEvent: {
189
- target: v.target,
190
- cb: v.cb,
191
- pause: v.pause,
192
- },
193
- target: this,
194
- });
195
- });
196
- } else {
197
- FW.Entry.uiMgr.registerButtonEvent({
198
- eventName: eventName,
199
- FWEvent: {
200
- target: event.target,
201
- cb: event.cb,
202
- pause: event.pause,
148
+ cb: cb,
149
+ responseInterval: responseInterval ?? this.defaultResponseInterval,
203
150
  },
204
- target: this,
205
- });
206
- }
151
+ ],
152
+ });
153
+
154
+ return this;
207
155
  }
208
156
 
209
157
  /**
@@ -211,7 +159,7 @@ export abstract class FWLayerController
211
159
  * @param args
212
160
  * @returns
213
161
  */
214
- unRegisterEvent(args: FW.RegisterEventArgs) {
162
+ unRegisterEvent(args: FW.RegisterArgs) {
215
163
  FW.Entry.uiMgr.unRegisterEvent(args);
216
164
  }
217
165
 
@@ -1,5 +1,5 @@
1
- import { FWEventDefine } from '../define/FWEventDefine';
2
- import { FWLodash } from '../utils/FWLodash';
1
+ import { FWEventDefine } from "../define/FWEventDefine";
2
+ import { FWLodash } from "../utils/FWLodash";
3
3
 
4
4
  const { ccclass, property, executeInEditMode } = cc._decorator;
5
5
 
@@ -10,8 +10,11 @@ export default abstract class FWLanguage extends cc.Component {
10
10
  protected _language: number = 0;
11
11
 
12
12
  @property({
13
- type: FWLodash.CCEnum(['请选择语言', ...FW.Entry.languageMgr.getSupportedLanguages()]),
14
- displayName: 'language',
13
+ type: FWLodash.CCEnum([
14
+ "请选择语言",
15
+ ...FW.Entry.languageMgr.getSupportedLanguages(),
16
+ ]),
17
+ displayName: "language",
15
18
  visible: true,
16
19
  serializable: true,
17
20
  })
@@ -31,7 +34,7 @@ export default abstract class FWLanguage extends cc.Component {
31
34
 
32
35
  private refreshInspector() {
33
36
  //@ts-ignore
34
- Editor.Utils.refreshSelectedInspector('node', this.node.uuid);
37
+ Editor.Utils.refreshSelectedInspector("node", this.node.uuid);
35
38
  }
36
39
 
37
40
  protected onLoad(): void {
@@ -41,7 +44,7 @@ export default abstract class FWLanguage extends cc.Component {
41
44
  this._language = FW.Entry.languageMgr.getLanguageIndex();
42
45
  this.onLanguageChange();
43
46
  },
44
- this,
47
+ this
45
48
  );
46
49
  }
47
50
 
@@ -105,54 +105,56 @@ export class FWAssetManager extends FWManager implements FW.AssetManager {
105
105
  ? assetProperty
106
106
  : [assetProperty];
107
107
 
108
- propertys.forEach(async (property) => {
109
- const bundleName = property.bundle || FW.Entry.bundleName;
110
- const type = property.type;
111
- const path = property.path;
112
- const progress = property.progress;
113
-
114
- if (!bundleName || bundleName === "") {
115
- FWLog.error(`找不到bundle${bundleName},或者bundle未加载!`);
116
- return undefined;
117
- }
118
-
119
- if (!path || path === "") {
120
- FWLog.error(`找不到资源路径${path},请检查!`);
121
- return undefined;
122
- }
123
-
124
- let bundle: cc.AssetManager.Bundle = await this.resMgr.loadBundle(
125
- bundleName
126
- );
127
-
128
- if (!bundle) {
129
- FWLog.error(`加载bundle失败,请检查!`);
130
- return undefined;
131
- }
108
+ await Promise.all(
109
+ propertys.map(async (property) => {
110
+ const bundleName = property.bundle || FW.Entry.bundleName;
111
+ const type = property.type;
112
+ const path = property.path;
113
+ const progress = property.progress;
114
+
115
+ if (!bundleName || bundleName === "") {
116
+ FWLog.error(`找不到bundle${bundleName},或者bundle未加载!`);
117
+ return undefined;
118
+ }
119
+
120
+ if (!path || path === "") {
121
+ FWLog.error(`找不到资源路径${path},请检查!`);
122
+ return undefined;
123
+ }
124
+
125
+ let bundle: cc.AssetManager.Bundle = await this.resMgr.loadBundle(
126
+ bundleName
127
+ );
132
128
 
133
- return await this.invoke(
134
- FW.Entry.promiseMgr.execute((resolve, reject, signal) => {
135
- bundle.preload(
136
- path,
137
- type,
138
- (
139
- finish: number,
140
- total: number,
141
- item: cc.AssetManager.RequestItem
142
- ) => {
143
- progress?.(finish, total, item);
144
- },
145
- (err: Error, item: cc.AssetManager.RequestItem[]) => {
146
- if (err || !item || item?.length == 0) {
147
- reject(err || "preload failed!");
129
+ if (!bundle) {
130
+ FWLog.error(`加载bundle失败,请检查!`);
131
+ return undefined;
132
+ }
133
+
134
+ return await this.invoke(
135
+ FW.Entry.promiseMgr.execute((resolve, reject, signal) => {
136
+ bundle.preload(
137
+ path,
138
+ type,
139
+ (
140
+ finish: number,
141
+ total: number,
142
+ item: cc.AssetManager.RequestItem
143
+ ) => {
144
+ progress?.(finish, total, item);
145
+ },
146
+ (err: Error, item: cc.AssetManager.RequestItem[]) => {
147
+ if (err || !item || item?.length == 0) {
148
+ reject(err || "preload failed!");
149
+ }
150
+ resolve(item);
148
151
  }
149
- resolve(item);
150
- }
151
- );
152
- }, FWSystemConfig.PromiseConfig.loadAsset).promise,
153
- `preLoadAssets -> ${property.path}`
154
- );
155
- });
152
+ );
153
+ }, FWSystemConfig.PromiseConfig.loadAsset).promise,
154
+ `preLoadAssets -> ${property.path}`
155
+ );
156
+ })
157
+ );
156
158
  }
157
159
 
158
160
  /**
@@ -1,15 +1,8 @@
1
1
  import { FWManager } from "./FWManager";
2
- import { FWLayerController } from "../controller/FWLayerController";
3
2
  import { FWSystemDefine } from "../define/FWSystemDefine";
4
3
  import FWLayer from "../layer/FWLayer";
5
4
  import FWLog from "../log/FWLog";
6
5
  import { FWQueue } from "../utils/FWQueue";
7
- import FWAssetConfig from "../config/FWAssetConfig";
8
- import FWLogic from "../logic/FWLogic";
9
- import FWData from "../data/FWData";
10
- import FWSocketSender from "../service/socket/FWSocketSender";
11
- import FWSocketHandle from "../service/socket/FWSocketHandle";
12
- import Framework from "../Framework";
13
6
  import { FrameworkBase } from "../FrameworkBase";
14
7
  import { PerformanceMonitor } from "../expand/FWDecorator";
15
8
 
@@ -1,97 +1,19 @@
1
- import FWLog from '../log/FWLog';
2
- import { FWManager } from './FWManager';
1
+ import { searchChild } from "../expand/FWDecorator";
2
+ import FWLog from "../log/FWLog";
3
+ import { FWManager } from "./FWManager";
3
4
 
4
5
  export default class FWUiManager extends FWManager implements FW.UiManager {
5
- /** 默认点击时间间隔 */
6
- private eventMap: Map<string, FW.CCEvent | FW.FWEvent> = new Map<
7
- string,
8
- FW.CCEvent | FW.FWEvent
9
- >();
6
+ private eventMap: Map<
7
+ number,
8
+ {
9
+ uniqueId: number;
10
+ target: FW.TargetType;
11
+ event: FW.CCEvent | FW.FWEvent;
12
+ }
13
+ > = new Map();
14
+ private uniqueId: number = 0;
10
15
  public initialize(): void {}
11
16
  public onDestroy(): void {}
12
- registerButtonEvent(args: FW.RegisterEventArgs | FW.RegisterEventArgs[]) {
13
- const register: (eventArgs: FW.RegisterEventArgs) => void = (
14
- eventArgs: FW.RegisterEventArgs,
15
- ) => {
16
- if (eventArgs?.CCEvent?.target instanceof cc.Node) {
17
- if (cc.isValid(eventArgs.CCEvent.target)) {
18
- eventArgs.CCEvent.target.on(
19
- eventArgs.eventName || cc.Node.EventType.TOUCH_END,
20
- (evt: cc.Event.EventTouch, custom?: string) => {
21
- /** 未设置禁用默认为启用状态 */
22
- if (eventArgs.enable === undefined) {
23
- eventArgs.enable = true;
24
- }
25
-
26
- if (!eventArgs.enable) return;
27
-
28
- /** 检测触发间隔 */
29
- if (Date.now() - eventArgs.lastResponseTimestamp < eventArgs.responseInterval) {
30
- return;
31
- }
32
-
33
- const button = (eventArgs.CCEvent.target as cc.Node).getComponent(cc.Button);
34
- if (button && !button.interactable) return;
35
-
36
- eventArgs.lastResponseTimestamp = Date.now();
37
- eventArgs.CCEvent.cb?.bind(eventArgs.target)?.(evt, custom, eventArgs.data);
38
- },
39
- eventArgs.CCEvent.target,
40
- );
41
- this.eventMap.set(
42
- `${eventArgs.eventName}_${eventArgs.CCEvent.target.name}`,
43
- eventArgs.CCEvent,
44
- );
45
- } else {
46
- FWLog.warn(`register CCEvent is not cc.Node:${eventArgs.CCEvent.target}`);
47
- return;
48
- }
49
- }
50
-
51
- if (eventArgs.FWEvent) {
52
- FW.Entry.evtMgr?.register(
53
- eventArgs.eventName,
54
- (
55
- args1?: FW.EventManagerArgs,
56
- args2?: FW.EventManagerArgs,
57
- args3?: FW.EventManagerArgs,
58
- args4?: FW.EventManagerArgs,
59
- args5?: FW.EventManagerArgs,
60
- args6?: FW.EventManagerArgs,
61
- args7?: FW.EventManagerArgs,
62
- args8?: FW.EventManagerArgs,
63
- args9?: FW.EventManagerArgs,
64
- args10?: FW.EventManagerArgs,
65
- ) => {
66
- if (Date.now() - eventArgs.lastResponseTimestamp < (eventArgs.responseInterval || 0)) {
67
- return;
68
- }
69
- eventArgs.lastResponseTimestamp = Date.now();
70
- eventArgs.FWEvent.cb?.bind(eventArgs.FWEvent.target)(
71
- args1,
72
- args2,
73
- args3,
74
- args4,
75
- args5,
76
- args6,
77
- args7,
78
- args8,
79
- args9,
80
- args10,
81
- );
82
- },
83
- eventArgs.FWEvent.target,
84
- );
85
- this.eventMap.set(eventArgs.eventName, eventArgs.FWEvent);
86
- }
87
- };
88
-
89
- if (Array.isArray(args)) {
90
- args.forEach((v) => register(v));
91
- } else {
92
- register(args);
93
- }
94
- }
95
17
 
96
18
  /** 暂停事件 */
97
19
  pauseEvent(target: FW.TargetType) {
@@ -114,29 +36,55 @@ export default class FWUiManager extends FWManager implements FW.UiManager {
114
36
  this.eventMap.forEach((v) => FW.Entry.evtMgr?.targetResume(v));
115
37
  }
116
38
 
117
- unRegisterEvent(args: FW.RegisterEventArgs) {
118
- if (this.eventMap.has(args.eventName)) return;
119
- this.eventMap.delete(args.eventName);
39
+ unRegisterEvent(args: FW.RegisterArgs) {
40
+ this.eventMap.forEach((evt) => {
41
+ if (args.target === evt.target) {
42
+ if (this.eventMap.has(evt.uniqueId)) {
43
+ this.eventMap.delete(evt.uniqueId);
44
+ FW.Entry.evtMgr.unRegister(evt.event.eventName, evt.target);
45
+ }
46
+ }
47
+ });
120
48
  }
121
49
 
122
50
  unRegisterAll() {
51
+ this.eventMap.forEach((evt) => this.unRegisterTarget(evt.target));
123
52
  this.eventMap.clear();
124
53
  }
125
54
 
126
55
  unRegisterTarget(target: FW.TargetType) {
127
- this.eventMap.forEach((v) => {
128
- if (v.target == target) FW.Entry.evtMgr?.targetOff(v.target);
56
+ this.eventMap.forEach((evt) => {
57
+ if (evt.target == target) {
58
+ FW.Entry.evtMgr?.targetOff(evt.target);
59
+ this.eventMap.delete(evt.uniqueId);
60
+ }
129
61
  });
130
62
  }
131
63
 
132
64
  hasRegister(eventName: string, target: FW.TargetType): boolean {
133
65
  let has = false;
134
66
  this.eventMap.forEach((v, key) => {
135
- if (v.target == target && key == eventName) has = true;
67
+ if (v.target == target && v.event.eventName == eventName) has = true;
136
68
  });
137
69
  return has;
138
70
  }
139
71
 
72
+ find(path: string, rootNode: cc.Node): cc.Node | null {
73
+ if (!cc.isValid(rootNode)) {
74
+ FWLog.error(`查找节点失败: ${path}, 根节点无效`);
75
+ return null;
76
+ }
77
+
78
+ const node = searchChild(rootNode, path);
79
+
80
+ if (!cc.isValid(node)) {
81
+ FWLog.warn(`未找到节点: ${path}`);
82
+ return null;
83
+ }
84
+
85
+ return node;
86
+ }
87
+
140
88
  buttonEnable(target: FW.TargetType) {
141
89
  this.eventMap.forEach((v) => {
142
90
  const node = v.target as cc.Node;
@@ -149,6 +97,7 @@ export default class FWUiManager extends FWManager implements FW.UiManager {
149
97
  }
150
98
  });
151
99
  }
100
+
152
101
  buttonDisable(target: FW.TargetType) {
153
102
  this.eventMap.forEach((v) => {
154
103
  const node = v.target as cc.Node;
@@ -161,4 +110,95 @@ export default class FWUiManager extends FWManager implements FW.UiManager {
161
110
  }
162
111
  });
163
112
  }
113
+
114
+ register(args: FW.RegisterArgs) {
115
+ if (!args.target) {
116
+ FWLog.error("注册事件失败,目标为空!");
117
+ return;
118
+ }
119
+
120
+ this.uniqueId++;
121
+
122
+ if (args.CCEvent) {
123
+ args.CCEvent.forEach((evt) => {
124
+ if (evt.target instanceof cc.Node && cc.isValid(evt.target)) {
125
+ evt.target.on(
126
+ evt.eventName || cc.Node.EventType.TOUCH_END,
127
+ (e: cc.Event.EventTouch, c?: string) => {
128
+ if (evt.enable === undefined) {
129
+ evt.enable = true;
130
+ }
131
+
132
+ if (!evt.enable) return;
133
+
134
+ /** 检测触发间隔 */
135
+ if (
136
+ Date.now() - evt.lastResponseTimestamp <
137
+ evt.responseInterval
138
+ ) {
139
+ return;
140
+ }
141
+
142
+ const button = evt.target.getComponent(cc.Button);
143
+ if (button && !button.interactable) return;
144
+
145
+ evt.lastResponseTimestamp = Date.now();
146
+ evt.cb?.bind(args.target)?.(e, c);
147
+ },
148
+ args.target
149
+ );
150
+ this.eventMap.set(this.uniqueId, {
151
+ uniqueId: this.uniqueId,
152
+ target: args.target,
153
+ event: evt,
154
+ });
155
+ }
156
+ });
157
+ } else if (args.FWEvent) {
158
+ args.FWEvent.forEach((evt) => {
159
+ FW.Entry.evtMgr?.register(
160
+ evt.eventName,
161
+ (
162
+ args1?: FW.EventManagerArgs,
163
+ args2?: FW.EventManagerArgs,
164
+ args3?: FW.EventManagerArgs,
165
+ args4?: FW.EventManagerArgs,
166
+ args5?: FW.EventManagerArgs,
167
+ args6?: FW.EventManagerArgs,
168
+ args7?: FW.EventManagerArgs,
169
+ args8?: FW.EventManagerArgs,
170
+ args9?: FW.EventManagerArgs,
171
+ args10?: FW.EventManagerArgs
172
+ ) => {
173
+ if (
174
+ Date.now() - evt.lastResponseTimestamp <
175
+ (evt.responseInterval || 0)
176
+ ) {
177
+ return;
178
+ }
179
+ evt.lastResponseTimestamp = Date.now();
180
+ evt.cb?.bind(args.target)(
181
+ args1,
182
+ args2,
183
+ args3,
184
+ args4,
185
+ args5,
186
+ args6,
187
+ args7,
188
+ args8,
189
+ args9,
190
+ args10
191
+ );
192
+ },
193
+ args.target
194
+ );
195
+
196
+ this.eventMap.set(this.uniqueId, {
197
+ uniqueId: this.uniqueId,
198
+ target: args.target,
199
+ event: evt,
200
+ });
201
+ });
202
+ }
203
+ }
164
204
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ives_xxz/framework",
3
- "version": "1.5.17",
3
+ "version": "1.6.0",
4
4
  "description": "cocoscreator 2.x mvc framework",
5
5
  "main": "index.js",
6
6
  "keywords": [
@@ -1,9 +1,10 @@
1
- import { FWSystemConfig } from '../../config/FWSystemConfig';
2
- import { FWSystemDefine } from '../../define/FWSystemDefine';
3
- import FWLog from '../../log/FWLog';
4
- import FWService from '../FWService';
1
+ import { FWSystemConfig } from "../../config/FWSystemConfig";
2
+ import { FWSystemDefine } from "../../define/FWSystemDefine";
3
+ import FWLog from "../../log/FWLog";
4
+ import FWService from "../FWService";
5
5
 
6
6
  export default class FWHttp extends FWService {
7
+ public initialize() {}
7
8
  public onDestroy(): void {}
8
9
  protected onRestart(): void {}
9
10
 
@@ -11,18 +12,30 @@ export default class FWHttp extends FWService {
11
12
  url: string,
12
13
  params?: string,
13
14
  cb?: (response: string) => void,
14
- tag?: string,
15
+ tag?: string
15
16
  ): Promise<string> {
16
- return this.process(url, params, cb, tag, FWSystemDefine.FWHttpRequestType.GET);
17
+ return this.process(
18
+ url,
19
+ params,
20
+ cb,
21
+ tag,
22
+ FWSystemDefine.FWHttpRequestType.GET
23
+ );
17
24
  }
18
25
 
19
26
  protected async postMessage(
20
27
  url: string,
21
28
  params?: string,
22
29
  cb?: (response: string) => void,
23
- tag?: string,
30
+ tag?: string
24
31
  ): Promise<string> {
25
- return this.process(url, params, cb, tag, FWSystemDefine.FWHttpRequestType.POST);
32
+ return this.process(
33
+ url,
34
+ params,
35
+ cb,
36
+ tag,
37
+ FWSystemDefine.FWHttpRequestType.POST
38
+ );
26
39
  }
27
40
 
28
41
  private async process(
@@ -30,48 +43,54 @@ export default class FWHttp extends FWService {
30
43
  params: string,
31
44
  cb: (response: any) => void,
32
45
  tag: string,
33
- type: FWSystemDefine.FWHttpRequestType,
46
+ type: FWSystemDefine.FWHttpRequestType
34
47
  ): Promise<string> {
35
48
  let xhr: XMLHttpRequest;
36
49
 
37
- const promiseProxy: FW.PromiseProxy<string> = FW.Entry.promiseMgr.execute<string>(
38
- (resolve, reject, signal, reason) => {
39
- xhr = new XMLHttpRequest();
50
+ const promiseProxy: FW.PromiseProxy<string> =
51
+ FW.Entry.promiseMgr.execute<string>(
52
+ (resolve, reject, signal, reason) => {
53
+ xhr = new XMLHttpRequest();
40
54
 
41
- xhr.onreadystatechange = () => {
42
- if (xhr.readyState == 4 && xhr.status === 200) {
43
- cb?.(xhr.response);
44
- resolve(xhr.response);
45
- }
46
- };
55
+ xhr.onreadystatechange = () => {
56
+ if (xhr.readyState == 4 && xhr.status === 200) {
57
+ cb?.(xhr.response);
58
+ resolve(xhr.response);
59
+ }
60
+ };
47
61
 
48
- xhr.onerror = (err: any) => {
49
- FWLog.error(err);
50
- this.onError?.(err);
51
- reject(`http request error:${err}`);
52
- };
62
+ xhr.onerror = (err: any) => {
63
+ FWLog.error(err);
64
+ this.onError?.(err);
65
+ reject(`http request error:${err}`);
66
+ };
53
67
 
54
- xhr.ontimeout = () => {
55
- this.onTimeout?.();
56
- reject(`http request timeout!`);
57
- };
68
+ xhr.ontimeout = () => {
69
+ this.onTimeout?.();
70
+ reject(`http request timeout!`);
71
+ };
58
72
 
59
- xhr.open(type, url, true);
60
- xhr.send(params);
61
- },
62
- {
63
- ...FWSystemConfig.PromiseConfig.http,
64
- retryCondition(error, retryCount) {
65
- return xhr.readyState != 4 || (xhr.status !== 200 && retryCount < 3);
73
+ xhr.open(type, url, true);
74
+ xhr.send(params);
66
75
  },
67
- },
68
- );
76
+ {
77
+ ...FWSystemConfig.PromiseConfig.http,
78
+ retryCondition(error, retryCount) {
79
+ return (
80
+ xhr.readyState != 4 || (xhr.status !== 200 && retryCount < 3)
81
+ );
82
+ },
83
+ }
84
+ );
69
85
 
70
86
  promiseProxy.addAbortEventListener(() => {
71
87
  xhr.abort();
72
88
  });
73
89
 
74
- return await this.invoke(promiseProxy.promise, tag ? `http request ->${tag}` : '');
90
+ return await this.invoke(
91
+ promiseProxy.promise,
92
+ tag ? `http request ->${tag}` : ""
93
+ );
75
94
  }
76
95
 
77
96
  onError?(err: any);