fcr-ui-scene 3.7.7 → 3.7.8-rc.2
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/lib/creator/index.js +13 -19
- package/lib/creator/provider-initializer.browser.js +2 -2
- package/lib/creator/provider-initializer.electron.js +2 -2
- package/lib/electron/bootstrap-sdk.js +89 -35
- package/lib/electron/hang-detection/index.d.ts +3 -0
- package/lib/electron/hang-detection/index.js +15 -0
- package/lib/electron/hang-detection/manager.d.ts +28 -0
- package/lib/electron/hang-detection/manager.js +231 -0
- package/lib/electron/hang-detection/types.d.ts +14 -0
- package/lib/electron/sdk-helper.js +6 -2
- package/lib/electron/until.d.ts +1 -4
- package/lib/electron/until.js +12 -4
- package/lib/index.js +8 -1
- package/lib/modules/action-bar/components/screen-share/index.electron.js +1 -1
- package/lib/modules/components/control-bar/components/switch-theme/index.js +4 -2
- package/lib/modules/components/control-bar/index.js +1 -3
- package/lib/modules/components/leave-meeting/store.base.d.ts +1 -0
- package/lib/modules/components/leave-meeting/store.base.js +46 -5
- package/lib/modules/dialog/dialogs/confirm-leave-meeting/index.d.ts +1 -0
- package/lib/modules/dialog/dialogs/confirm-leave-meeting/index.js +2 -1
- package/lib/modules/dialog/dialogs/share-screen-selection/index.js +0 -12
- package/lib/modules/participant/store.base.js +0 -1
- package/lib/modules/share-screen/store.base.js +0 -2
- package/lib/modules/share-screen/store.electron.js +54 -22
- package/lib/modules/state-bar/store.base.electron.js +6 -2
- package/lib/modules/video-window/popover-watcher.js +4 -1
- package/lib/modules/video-window/store.js +7 -1
- package/lib/modules/video-window/view.js +14 -4
- package/lib/providers/board-share/bar-control/base.d.ts +2 -0
- package/lib/providers/board-share/bar-control/base.js +13 -3
- package/lib/providers/board-share/bar-control/electron.d.ts +1 -0
- package/lib/providers/board-share/bar-control/electron.js +15 -4
- package/lib/providers/board-share/provider.base.d.ts +1 -0
- package/lib/providers/board-share/provider.base.js +3 -1
- package/lib/providers/board-share/provider.electron.d.ts +1 -0
- package/lib/providers/board-share/provider.electron.js +8 -2
- package/lib/providers/board-share/type.d.ts +2 -0
- package/lib/providers/dialog/provider.electron.js +10 -2
- package/lib/providers/screen-share/strategy/browser.js +51 -4
- package/lib/providers/screen-share/strategy/electron.js +77 -8
- package/lib/providers/screen-share/stream-state-sync.d.ts +3 -1
- package/lib/providers/screen-share/stream-state-sync.js +133 -40
- package/lib/providers/window/main-window.js +0 -3
- package/lib/providers/window/renderer-window.d.ts +3 -0
- package/lib/providers/window/renderer-window.js +47 -4
- package/lib/providers/window/type.d.ts +1 -0
- package/lib/scenes/main-scene.d.ts +1 -0
- package/lib/scenes/main-scene.js +32 -1
- package/lib/utilities/logger.js +1 -1
- package/package.json +5 -5
- package/public/index.html +2 -149
- package/public/meeting-manager.js +391 -0
- package/installer/icons/favicon.ico +0 -0
- package/installer/icons/favicon.png +0 -0
- package/installer/icons/icon.png +0 -0
- package/installer/mac/entitlements.mac.plist +0 -16
- package/lib/creator.d.ts +0 -36
- package/lib/creator.js +0 -465
- package/lib/modules/action-bar/index.d.ts +0 -58
- package/lib/modules/action-bar/index.dev.d.ts +0 -0
- package/lib/modules/action-bar/index.dev.js +0 -94
- package/lib/modules/action-bar/index.js +0 -109
- package/lib/modules/action-bar/store.d.ts +0 -259
- package/lib/modules/action-bar/store.js +0 -1529
- package/lib/modules/action-bar/types.d.ts +0 -90
- package/lib/modules/action-bar/view.d.ts +0 -5
- package/lib/modules/action-bar/view.js +0 -112
- package/lib/modules/annotation/annotation-index.d.ts +0 -2
- package/lib/modules/annotation/annotation-index.js +0 -80
- package/lib/modules/annotation/annotation-toolbar-store.d.ts +0 -75
- package/lib/modules/annotation/annotation-toolbar-store.js +0 -459
- package/lib/modules/annotation/board-cursor.css +0 -77
- package/lib/modules/annotation/components/color-picker/components/color.d.ts +0 -5
- package/lib/modules/annotation/components/color-picker/components/color.js +0 -38
- package/lib/modules/annotation/components/color-picker/components/panel.d.ts +0 -1
- package/lib/modules/annotation/components/color-picker/components/panel.js +0 -109
- package/lib/modules/annotation/components/color-picker/components/picker.d.ts +0 -1
- package/lib/modules/annotation/components/color-picker/components/picker.js +0 -75
- package/lib/modules/annotation/components/color-picker/index.d.ts +0 -2
- package/lib/modules/annotation/components/color-picker/index.js +0 -47
- package/lib/modules/annotation/components/eraser-picker.d.ts +0 -4
- package/lib/modules/annotation/components/eraser-picker.js +0 -144
- package/lib/modules/annotation/components/expansion/index.d.ts +0 -1
- package/lib/modules/annotation/components/expansion/index.js +0 -100
- package/lib/modules/annotation/components/extra-tool-picker.d.ts +0 -1
- package/lib/modules/annotation/components/extra-tool-picker.js +0 -62
- package/lib/modules/annotation/components/history.d.ts +0 -2
- package/lib/modules/annotation/components/history.js +0 -78
- package/lib/modules/annotation/components/icons/fold-icon.d.ts +0 -2
- package/lib/modules/annotation/components/icons/fold-icon.js +0 -41
- package/lib/modules/annotation/components/icons/move-icon.d.ts +0 -1
- package/lib/modules/annotation/components/icons/move-icon.js +0 -66
- package/lib/modules/annotation/components/item/index.d.ts +0 -1
- package/lib/modules/annotation/components/item/index.js +0 -43
- package/lib/modules/annotation/components/move-handle.d.ts +0 -5
- package/lib/modules/annotation/components/move-handle.js +0 -134
- package/lib/modules/annotation/components/pen-picker.d.ts +0 -4
- package/lib/modules/annotation/components/pen-picker.js +0 -155
- package/lib/modules/annotation/components/screen-capture-picker.d.ts +0 -4
- package/lib/modules/annotation/components/screen-capture-picker.js +0 -85
- package/lib/modules/annotation/components/shape-picker.d.ts +0 -4
- package/lib/modules/annotation/components/shape-picker.js +0 -210
- package/lib/modules/annotation/hooks/index.d.ts +0 -14
- package/lib/modules/annotation/hooks/index.js +0 -292
- package/lib/modules/annotation/index.d.ts +0 -45
- package/lib/modules/annotation/index.js +0 -168
- package/lib/modules/annotation/store.d.ts +0 -98
- package/lib/modules/annotation/store.js +0 -620
- package/lib/modules/annotation/style.css +0 -36
- package/lib/modules/annotation/view.d.ts +0 -3
- package/lib/modules/annotation/view.js +0 -44
- package/lib/modules/components/device-control/store.d.ts +0 -42
- package/lib/modules/components/device-control/store.js +0 -241
- package/lib/modules/components/leave-meeting/store.d.ts +0 -39
- package/lib/modules/components/leave-meeting/store.js +0 -270
- package/lib/modules/control-bar/components/annotation-button/index.d.ts +0 -1
- package/lib/modules/control-bar/components/annotation-button/index.js +0 -72
- package/lib/modules/control-bar/reactor.d.ts +0 -2
- package/lib/modules/control-bar/reactor.js +0 -8
- package/lib/modules/control-bar/types.d.ts +0 -20
- package/lib/modules/control-bar/types.js +0 -6
- package/lib/modules/dialog/dialogs/pre-setting/index.css +0 -26
- package/lib/modules/dialog/dialogs/pre-setting/index.d.ts +0 -6
- package/lib/modules/dialog/dialogs/pre-setting/index.js +0 -62
- package/lib/modules/dialog/dialogs/widget/electron.d.ts +0 -6
- package/lib/modules/dialog/dialogs/widget/electron.js +0 -38
- package/lib/modules/dialog/hooks/use-popover-watcher.d.ts +0 -14
- package/lib/modules/dialog/hooks/use-popover-watcher.js +0 -110
- package/lib/modules/dialog/hooks/useElectron.d.ts +0 -28
- package/lib/modules/dialog/hooks/useElectron.js +0 -277
- package/lib/modules/dialog/store.d.ts +0 -135
- package/lib/modules/dialog/store.js +0 -616
- package/lib/modules/event-confirm/components/window/index.d.ts +0 -7
- package/lib/modules/event-confirm/components/window/index.js +0 -221
- package/lib/modules/event-confirm/index.css +0 -24
- package/lib/modules/event-confirm/index.d.ts +0 -27
- package/lib/modules/event-confirm/index.js +0 -76
- package/lib/modules/event-confirm/store.d.ts +0 -50
- package/lib/modules/event-confirm/store.js +0 -394
- package/lib/modules/event-confirm/view.d.ts +0 -2
- package/lib/modules/event-confirm/view.js +0 -55
- package/lib/modules/event-toast/store.d.ts +0 -27
- package/lib/modules/event-toast/store.js +0 -205
- package/lib/modules/layout/store.d.ts +0 -176
- package/lib/modules/layout/store.js +0 -1452
- package/lib/modules/participant/store.d.ts +0 -222
- package/lib/modules/participant/store.js +0 -1929
- package/lib/modules/pc-audio-connect/index.d.ts +0 -22
- package/lib/modules/pc-audio-connect/index.js +0 -67
- package/lib/modules/pc-audio-connect/store.d.ts +0 -46
- package/lib/modules/pc-audio-connect/store.js +0 -304
- package/lib/modules/setting/common/advance-link.d.ts +0 -3
- package/lib/modules/setting/common/advance-link.js +0 -27
- package/lib/modules/setting/common/index.css +0 -26
- package/lib/modules/setting/common/useNamespace.d.ts +0 -15
- package/lib/modules/setting/common/useNamespace.js +0 -66
- package/lib/modules/setting/dialog-wrapper.d.ts +0 -2
- package/lib/modules/setting/dialog-wrapper.js +0 -110
- package/lib/modules/setting/store.d.ts +0 -261
- package/lib/modules/setting/store.js +0 -1321
- package/lib/modules/share-screen/store.d.ts +0 -148
- package/lib/modules/share-screen/store.js +0 -960
- package/lib/modules/share-screen/types.d.ts +0 -26
- package/lib/modules/share-screen/types.js +0 -6
- package/lib/modules/state-bar/store.d.ts +0 -124
- package/lib/modules/state-bar/store.js +0 -664
- package/lib/modules/whiteboard/components/progress/electron.d.ts +0 -1
- package/lib/modules/whiteboard/components/progress/electron.js +0 -33
- package/lib/modules/widget/store.d.ts +0 -14
- package/lib/modules/widget/store.js +0 -28
- package/lib/providers/annotation-provider.d.ts +0 -124
- package/lib/providers/annotation-provider.js +0 -369
- package/lib/providers/dialog-provider.d.ts +0 -137
- package/lib/providers/dialog-provider.js +0 -194
- package/lib/providers/message-provider.d.ts +0 -69
- package/lib/providers/message-provider.js +0 -140
- package/lib/providers/room-provider.d.ts +0 -194
- package/lib/providers/room-provider.js +0 -916
- package/lib/providers/screen-share-provider.d.ts +0 -245
- package/lib/providers/screen-share-provider.js +0 -850
- package/lib/providers/sharing-provider.d.ts +0 -42
- package/lib/providers/sharing-provider.js +0 -228
- package/lib/providers/user-setting-storage-provider.d.ts +0 -21
- package/lib/providers/user-setting-storage-provider.js +0 -65
- package/lib/providers/whiteboard-provider.d.ts +0 -24
- package/lib/providers/whiteboard-provider.js +0 -128
- package/lib/shared-data-source/annotation-data.d.ts +0 -17
- package/lib/shared-data-source/annotation-data.js +0 -110
- package/lib/shared-data-source/app-list-data.d.ts +0 -34
- package/lib/shared-data-source/app-list-data.js +0 -133
- package/lib/shared-data-source/chat-data.d.ts +0 -25
- package/lib/shared-data-source/chat-data.js +0 -139
- package/lib/shared-data-source/config.d.ts +0 -35
- package/lib/shared-data-source/config.js +0 -40
- package/lib/shared-data-source/confirm-data.d.ts +0 -44
- package/lib/shared-data-source/confirm-data.js +0 -201
- package/lib/shared-data-source/device-privilege-data.d.ts +0 -8
- package/lib/shared-data-source/device-privilege-data.js +0 -25
- package/lib/shared-data-source/interpreter.d.ts +0 -77
- package/lib/shared-data-source/interpreter.js +0 -247
- package/lib/shared-data-source/layout-data.d.ts +0 -31
- package/lib/shared-data-source/layout-data.js +0 -189
- package/lib/shared-data-source/meeting-time.d.ts +0 -90
- package/lib/shared-data-source/meeting-time.js +0 -416
- package/lib/shared-data-source/member-data.d.ts +0 -139
- package/lib/shared-data-source/member-data.js +0 -517
- package/lib/shared-data-source/pin-data.d.ts +0 -13
- package/lib/shared-data-source/pin-data.js +0 -111
- package/lib/shared-data-source/screen-share-data.d.ts +0 -357
- package/lib/shared-data-source/screen-share-data.js +0 -513
- package/lib/shared-data-source/security-data.d.ts +0 -39
- package/lib/shared-data-source/security-data.js +0 -156
- package/lib/shared-data-source/setting.d.ts +0 -67
- package/lib/shared-data-source/setting.js +0 -220
- package/lib/shared-data-source/speaker-spotlight.d.ts +0 -5
- package/lib/shared-data-source/speaker-spotlight.js +0 -15
- package/lib/shared-data-source/video-window.d.ts +0 -165
- package/lib/shared-data-source/video-window.js +0 -1266
- package/lib/shared-data-source/waiting-room.d.ts +0 -46
- package/lib/shared-data-source/waiting-room.js +0 -222
- package/lib/shared-data-source/whiteboard-data.d.ts +0 -70
- package/lib/shared-data-source/whiteboard-data.js +0 -348
- package/lib/utilities/board-context.d.ts +0 -4
- package/lib/utilities/board-context.js +0 -12
- package/lib/utilities/copyText.d.ts +0 -2
- package/lib/utilities/copyText.js +0 -48
- package/lib/utilities/renderer-event.d.ts +0 -10
- package/lib/utilities/renderer-event.js +0 -95
- package/lib/utilities/screen-capture-permission.d.ts +0 -2
- package/lib/utilities/screen-capture-permission.js +0 -24
- package/lib/utilities/screen.d.ts +0 -3
- package/lib/utilities/screen.js +0 -53
- package/lib/utilities/video-track-render-context.d.ts +0 -6
- package/lib/utilities/video-track-render-context.js +0 -9
- package/lib/waiting-room-control-manager.d.ts +0 -28
- package/lib/waiting-room-control-manager.js +0 -230
- /package/lib/{modules/action-bar → electron/hang-detection}/types.js +0 -0
package/lib/creator/index.js
CHANGED
|
@@ -183,17 +183,6 @@ var FcrUISceneCreator = exports.FcrUISceneCreator = /*#__PURE__*/function () {
|
|
|
183
183
|
type: _type.FcrUIGlobalNodeEventType.LAUNCH_SUCCESS,
|
|
184
184
|
data: args
|
|
185
185
|
});
|
|
186
|
-
|
|
187
|
-
// if (isElectron()) {
|
|
188
|
-
// const windowProvider = this._objectManager.getObject<FcrUIWindowProvider>(
|
|
189
|
-
// FcrUIObjectKeys.P_WINDOW_PROVIDER,
|
|
190
|
-
// );
|
|
191
|
-
|
|
192
|
-
// const mainWindow = windowProvider.getCurrentWindow();
|
|
193
|
-
|
|
194
|
-
// focusWindow(mainWindow);
|
|
195
|
-
// }
|
|
196
|
-
|
|
197
186
|
onSuccess.apply(void 0, args);
|
|
198
187
|
},
|
|
199
188
|
onLaunchFailure: function onLaunchFailure() {
|
|
@@ -325,12 +314,14 @@ var FcrUISceneCreator = exports.FcrUISceneCreator = /*#__PURE__*/function () {
|
|
|
325
314
|
key: "release",
|
|
326
315
|
value: function release() {
|
|
327
316
|
this._precheckState();
|
|
317
|
+
if (this._scene) {
|
|
318
|
+
this.logger.info('exit existing scene before releasing creator');
|
|
319
|
+
this._scene.exit();
|
|
320
|
+
}
|
|
328
321
|
this._globalNode.unmount();
|
|
329
322
|
this._globalNode.nodeWillInactive();
|
|
330
323
|
this._providerInitializer.onCreatorRelease();
|
|
331
|
-
// Release core engine last
|
|
332
324
|
this._released = true;
|
|
333
|
-
this._resetScene();
|
|
334
325
|
}
|
|
335
326
|
}, {
|
|
336
327
|
key: "_setMeetingState",
|
|
@@ -348,13 +339,16 @@ var FcrUISceneCreator = exports.FcrUISceneCreator = /*#__PURE__*/function () {
|
|
|
348
339
|
}, {
|
|
349
340
|
key: "_resetScene",
|
|
350
341
|
value: function _resetScene() {
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
342
|
+
var scene = this._scene;
|
|
343
|
+
var sceneObserver = this._sceneObserver;
|
|
344
|
+
if (scene) {
|
|
345
|
+
if (sceneObserver) {
|
|
346
|
+
scene.removeObserver(sceneObserver);
|
|
347
|
+
this._sceneObserver = null;
|
|
348
|
+
}
|
|
349
|
+
this._setMeetingState(_renderer.MeetingState.NOT_IN_MEETING);
|
|
350
|
+
this._scene = null;
|
|
355
351
|
}
|
|
356
|
-
this._setMeetingState(_renderer.MeetingState.NOT_IN_MEETING);
|
|
357
|
-
this._scene = null;
|
|
358
352
|
}
|
|
359
353
|
}, {
|
|
360
354
|
key: "_precheckState",
|
|
@@ -210,14 +210,14 @@ var FcrUIBrowserProviderInitializer = exports.FcrUIBrowserProviderInitializer =
|
|
|
210
210
|
objectManager.setObject(_objectManager.FcrUIObjectKeys.S_SHARED_APPLIST_DATA_SOURCE, sharedApplistDataSource);
|
|
211
211
|
var applistProvider = new _appListProvider.FcrUIApplistProviderImpl(dialogProvider, eventProvider, widgetProvider, sharedApplistDataSource);
|
|
212
212
|
objectManager.setObject(_objectManager.FcrUIObjectKeys.P_APPLIST_PROVIDER, applistProvider);
|
|
213
|
+
var videoWindowDataSource = new _videoWindow.FcrUIVideoWindowDataSourceImpl(sharedSettingDataSource);
|
|
214
|
+
objectManager.setObject(_objectManager.FcrUIObjectKeys.S_SHARED_VIDEO_WINDOW_DATA_SOURCE, videoWindowDataSource);
|
|
213
215
|
var screenShareProvider = new _provider5.FcrUIScreenShareProviderImpl(objectManager);
|
|
214
216
|
objectManager.setObject(_objectManager.FcrUIObjectKeys.P_SCREEN_SHARE_PROVIDER, screenShareProvider);
|
|
215
217
|
var sharedSpeakerSoptlightDataSource = new _speakerSpotlight.FcrUISharedSpeakerSpotlightDataSourceImpl();
|
|
216
218
|
objectManager.setObject(_objectManager.FcrUIObjectKeys.S_SHARED_SPEAKER_SPOTLIGHT_DATA_SOURCE, sharedSpeakerSoptlightDataSource);
|
|
217
219
|
var localVideoRenderProvider = new _rendererProvider.FcrUIMainLocalVideoRenderProviderImpl(deviceProvider, screenShareProvider);
|
|
218
220
|
objectManager.setObject(_objectManager.FcrUIObjectKeys.P_LOCAL_VIDEO_RENDER_PROVIDER, localVideoRenderProvider);
|
|
219
|
-
var videoWindowDataSource = new _videoWindow.FcrUIVideoWindowDataSourceImpl(sharedSettingDataSource);
|
|
220
|
-
objectManager.setObject(_objectManager.FcrUIObjectKeys.S_SHARED_VIDEO_WINDOW_DATA_SOURCE, videoWindowDataSource);
|
|
221
221
|
var pinDataSource = new _pinData.FcrUISharedPinDataSourceImpl(messageProvider, videoWindowDataSource);
|
|
222
222
|
objectManager.setObject(_objectManager.FcrUIObjectKeys.S_SHARED_PIN_DATA_SOURCE, pinDataSource);
|
|
223
223
|
}
|
|
@@ -240,10 +240,10 @@ var FcrUIElectronProviderInitializer = exports.FcrUIElectronProviderInitializer
|
|
|
240
240
|
objectManager.setObject(_objectManager.FcrUIObjectKeys.S_SHARED_APPLIST_DATA_SOURCE, sharedApplistDataSource);
|
|
241
241
|
var applistProvider = new _appListProvider.FcrUIApplistProviderImpl(dialogProvider, eventProvider, widgetProvider, sharedApplistDataSource);
|
|
242
242
|
objectManager.setObject(_objectManager.FcrUIObjectKeys.P_APPLIST_PROVIDER, applistProvider);
|
|
243
|
-
var screenShareProvider = new _provider6.FcrUIScreenShareProviderImpl(objectManager);
|
|
244
|
-
objectManager.setObject(_objectManager.FcrUIObjectKeys.P_SCREEN_SHARE_PROVIDER, screenShareProvider);
|
|
245
243
|
var sharedVideoWindowDataSource = new _videoWindow.FcrUIVideoWindowDataSourceImpl(sharedSettingDataSource);
|
|
246
244
|
objectManager.setObject(_objectManager.FcrUIObjectKeys.S_SHARED_VIDEO_WINDOW_DATA_SOURCE, sharedVideoWindowDataSource);
|
|
245
|
+
var screenShareProvider = new _provider6.FcrUIScreenShareProviderImpl(objectManager);
|
|
246
|
+
objectManager.setObject(_objectManager.FcrUIObjectKeys.P_SCREEN_SHARE_PROVIDER, screenShareProvider);
|
|
247
247
|
var localVideoRenderProvider = new _rendererProvider.FcrUIMainLocalVideoRenderProviderImpl(deviceProvider, screenShareProvider);
|
|
248
248
|
objectManager.setObject(_objectManager.FcrUIObjectKeys.P_LOCAL_VIDEO_RENDER_PROVIDER, localVideoRenderProvider);
|
|
249
249
|
var multiDisplayProvider = new _multiDisplayProvider.FcrUIMultiDisplayProviderImpl({
|
|
@@ -13,6 +13,7 @@ require("core-js/modules/es.array.concat.js");
|
|
|
13
13
|
require("core-js/modules/es.array.find.js");
|
|
14
14
|
require("core-js/modules/es.array.for-each.js");
|
|
15
15
|
require("core-js/modules/es.array.join.js");
|
|
16
|
+
require("core-js/modules/es.array.map.js");
|
|
16
17
|
require("core-js/modules/es.date.to-json.js");
|
|
17
18
|
require("core-js/modules/es.json.stringify.js");
|
|
18
19
|
require("core-js/modules/es.object.keys.js");
|
|
@@ -22,6 +23,7 @@ require("core-js/modules/es.string.starts-with.js");
|
|
|
22
23
|
require("core-js/modules/esnext.iterator.constructor.js");
|
|
23
24
|
require("core-js/modules/esnext.iterator.find.js");
|
|
24
25
|
require("core-js/modules/esnext.iterator.for-each.js");
|
|
26
|
+
require("core-js/modules/esnext.iterator.map.js");
|
|
25
27
|
require("core-js/modules/esnext.json.parse.js");
|
|
26
28
|
require("core-js/modules/web.dom-collections.for-each.js");
|
|
27
29
|
require("core-js/modules/web.timers.js");
|
|
@@ -42,6 +44,7 @@ var _exitCodes = require("./exit-codes");
|
|
|
42
44
|
var _struct = require("./struct");
|
|
43
45
|
var _eventManager = require("./event-manager");
|
|
44
46
|
var _until = require("./until");
|
|
47
|
+
var _hangDetection = require("./hang-detection");
|
|
45
48
|
var _process$argv$find; // TODO 需要将其改造成 processManager --- stateManager 和 eventManager 的逻辑,保持兼容
|
|
46
49
|
// processManager --- stateManager 和 eventManager
|
|
47
50
|
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
@@ -50,6 +53,7 @@ var mainWindow;
|
|
|
50
53
|
var mainWindowReady = false;
|
|
51
54
|
var userMinimize = false;
|
|
52
55
|
var mainWindowDisplayState = _struct.DisplayState.HIDE;
|
|
56
|
+
var lastInitParams = '';
|
|
53
57
|
(0, _main.initialize)();
|
|
54
58
|
var port = (_process$argv$find = process.argv.find(function (arg) {
|
|
55
59
|
return arg.startsWith('--port=');
|
|
@@ -98,7 +102,10 @@ ipcClient.addObserver({
|
|
|
98
102
|
_eventManager.eventManager.startMeetingProcess(roomId);
|
|
99
103
|
(0, _logger.getLogger)().info("CPP EVENT: LaunchMeeting: ".concat(JSON.stringify(message.data), ", has mainWindow ").concat(!!mainWindow, ", state changed to ").concat(_struct.FcrUISceneLaunchState[_eventManager.eventManager.launchState]));
|
|
100
104
|
if (mainWindow) {
|
|
101
|
-
mainWindow.webContents.send(_type.IPCMessageCMD.LaunchMeeting,
|
|
105
|
+
mainWindow.webContents.send(_type.IPCMessageCMD.LaunchMeeting, {
|
|
106
|
+
data: message.data,
|
|
107
|
+
lastInitParams: lastInitParams
|
|
108
|
+
});
|
|
102
109
|
mainWindow.show();
|
|
103
110
|
mainWindow.focus();
|
|
104
111
|
mainWindow.moveTop();
|
|
@@ -119,7 +126,8 @@ ipcClient.addObserver({
|
|
|
119
126
|
}
|
|
120
127
|
break;
|
|
121
128
|
case _type.IPCMessageCMD.InitCreator:
|
|
122
|
-
(0, _logger.getLogger)().info("InitCreator: ".concat(JSON.stringify(message.data)));
|
|
129
|
+
(0, _logger.getLogger)().info("InitCreator, current message data: ".concat(JSON.stringify(message.data)));
|
|
130
|
+
lastInitParams = JSON.stringify(message.data);
|
|
123
131
|
|
|
124
132
|
// 检查调用顺序:如果是 init -> launch 但 launch 在 PROCESSING 阶段,需要报错
|
|
125
133
|
if (_eventManager.eventManager.launchState === _struct.FcrUISceneLaunchState.PROCESSING) {
|
|
@@ -139,7 +147,10 @@ ipcClient.addObserver({
|
|
|
139
147
|
(0, _logger.getLogger)().error("InitCreator: ".concat(e));
|
|
140
148
|
}
|
|
141
149
|
if (mainWindow) {
|
|
150
|
+
(0, _logger.getLogger)().info("InitCreator: send InitCreator message to mainWindow");
|
|
142
151
|
mainWindow.webContents.send(_type.IPCMessageCMD.InitCreator, message.data);
|
|
152
|
+
} else {
|
|
153
|
+
(0, _logger.getLogger)().error("InitCreator: mainWindow is not ready");
|
|
143
154
|
}
|
|
144
155
|
break;
|
|
145
156
|
case _type.IPCMessageCMD.OpenSetting:
|
|
@@ -289,6 +300,9 @@ _electron.app.addListener('ready', function () {
|
|
|
289
300
|
});
|
|
290
301
|
mainWindow.addListener('hide', function () {
|
|
291
302
|
(0, _logger.getLogger)().info("windows_release main window hidden, current launch state: ".concat(_struct.FcrUISceneLaunchState[_eventManager.eventManager.launchState]));
|
|
303
|
+
(0, _logger.getLogger)().info("windows_release the main window is hide, all window State: ".concat(_electron.BrowserWindow.getAllWindows().map(function (windowItem) {
|
|
304
|
+
return "the window id ".concat(windowItem.id, " ").concat(windowItem.getTitle(), " ").concat(windowItem.isVisible());
|
|
305
|
+
})));
|
|
292
306
|
mainWindowDisplayState = _struct.DisplayState.HIDE;
|
|
293
307
|
if (userMinimize) {
|
|
294
308
|
(0, _logger.getLogger)().info('windows_release main window hidden, but user minimize, ignore this event');
|
|
@@ -317,6 +331,15 @@ _electron.app.addListener('ready', function () {
|
|
|
317
331
|
if (_eventManager.eventManager.launchState !== _struct.FcrUISceneLaunchState.PROCESSING) {
|
|
318
332
|
return;
|
|
319
333
|
}
|
|
334
|
+
try {
|
|
335
|
+
// 再会议启动过程中,窗口被其他窗口遮挡也会触发hide事件,实际窗口在后面运行,所以需要判断窗口是否可见
|
|
336
|
+
if (mainWindow.isVisible()) {
|
|
337
|
+
(0, _logger.getLogger)().info('windows_release main window hidden, but window is visible, ignore this event');
|
|
338
|
+
return;
|
|
339
|
+
}
|
|
340
|
+
} catch (error) {
|
|
341
|
+
(0, _logger.getLogger)().error("windows_release main window hide, get main window visible error");
|
|
342
|
+
}
|
|
320
343
|
ipcClient.sendMessage({
|
|
321
344
|
// TODO
|
|
322
345
|
// cmd: IPCMessageCMD.ExitUiSceneFromMainProcess,
|
|
@@ -330,6 +353,8 @@ _electron.app.addListener('ready', function () {
|
|
|
330
353
|
});
|
|
331
354
|
mainWindow.addListener('closed', function () {
|
|
332
355
|
(0, _logger.getLogger)().info('windows_release main window closed');
|
|
356
|
+
// 清理主窗口的hang detection状态
|
|
357
|
+
hangDetectionManager.handleWindowClosed(mainWindow.id);
|
|
333
358
|
_electron.app.exit(_exitCodes.AppExitCode.NORMAL_EXIT);
|
|
334
359
|
});
|
|
335
360
|
mainWindow.addListener('close', function (e) {
|
|
@@ -355,18 +380,12 @@ _electron.app.addListener('ready', function () {
|
|
|
355
380
|
});
|
|
356
381
|
(0, _logger.getLogger)().info('main window close event prevented');
|
|
357
382
|
setTimeout(function () {
|
|
358
|
-
mainWindow.
|
|
383
|
+
if (mainWindow && !mainWindow.isDestroyed()) {
|
|
384
|
+
mainWindow.hide();
|
|
385
|
+
}
|
|
359
386
|
}, 300);
|
|
360
387
|
}
|
|
361
388
|
});
|
|
362
|
-
mainWindow.addListener('unresponsive', function () {
|
|
363
|
-
(0, _logger.getLogger)().warn("main window unresponsive in bootstrap-sdk");
|
|
364
|
-
handleUnresponsive();
|
|
365
|
-
});
|
|
366
|
-
mainWindow.addListener('responsive', function () {
|
|
367
|
-
(0, _logger.getLogger)().warn("main window responsive in bootstrap-sdk");
|
|
368
|
-
handleResponsive();
|
|
369
|
-
});
|
|
370
389
|
if (_env.isDev) {
|
|
371
390
|
mainWindow.webContents.openDevTools({
|
|
372
391
|
mode: 'detach'
|
|
@@ -379,6 +398,22 @@ _electron.app.addListener('ready', function () {
|
|
|
379
398
|
return mainWindow;
|
|
380
399
|
});
|
|
381
400
|
_electron.app.addListener('browser-window-created', function (_, window) {
|
|
401
|
+
var windowId = window.id;
|
|
402
|
+
(0, _logger.getLogger)().warn("window created: ".concat(windowId, " ,window title: ").concat(window.getTitle()));
|
|
403
|
+
window.webContents.addListener('unresponsive', function () {
|
|
404
|
+
(0, _logger.getLogger)().warn("browser window ".concat(windowId, " unresponsive in bootstrap-sdk"));
|
|
405
|
+
handleUnresponsive(windowId);
|
|
406
|
+
});
|
|
407
|
+
window.webContents.addListener('responsive', function () {
|
|
408
|
+
(0, _logger.getLogger)().warn("browser window ".concat(windowId, " responsive in bootstrap-sdk"));
|
|
409
|
+
handleResponsive(windowId);
|
|
410
|
+
});
|
|
411
|
+
|
|
412
|
+
// 监听窗口关闭事件,清理hang detection状态
|
|
413
|
+
window.addListener('closed', function () {
|
|
414
|
+
(0, _logger.getLogger)().info("browser window ".concat(windowId, " closed, cleaning hang detection state"));
|
|
415
|
+
hangDetectionManager.handleWindowClosed(windowId);
|
|
416
|
+
});
|
|
382
417
|
(0, _main.enable)(window.webContents);
|
|
383
418
|
});
|
|
384
419
|
|
|
@@ -393,31 +428,50 @@ _electron.app.addListener('quit', function (event, exitCode) {
|
|
|
393
428
|
(0, _logger.getLogger)().info("app quit event triggered with exit code: ".concat(exitCode));
|
|
394
429
|
// 清理 EventManager 资源
|
|
395
430
|
_eventManager.eventManager.dispose();
|
|
431
|
+
|
|
432
|
+
// 清理所有hang detection计时器
|
|
433
|
+
hangDetectionManager.dispose();
|
|
396
434
|
});
|
|
397
|
-
var
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
}
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
435
|
+
var onHangTimeout = function onHangTimeout(windowId) {
|
|
436
|
+
(0, _logger.getLogger)().error("Window ".concat(windowId, " hang timeout, triggering application exit"));
|
|
437
|
+
_eventManager.eventManager.onExitedMeeting(_eventManager.eventManager.roomId, _struct.FcrUISceneLaunchEndReason.HANG_DETECTION);
|
|
438
|
+
ipcClient.sendMessage({
|
|
439
|
+
cmd: _type.IPCMessageCMD.ExitedMeeting,
|
|
440
|
+
data: {
|
|
441
|
+
roomId: _eventManager.eventManager.roomId,
|
|
442
|
+
reason: _until.hangDetectionErrorCode
|
|
443
|
+
}
|
|
444
|
+
});
|
|
445
|
+
};
|
|
446
|
+
var onStateChange = function onStateChange(windowId, isUnresponsive, duration) {
|
|
447
|
+
if (isUnresponsive) {
|
|
448
|
+
(0, _logger.getLogger)().warn("Window ".concat(windowId, " became unresponsive"));
|
|
449
|
+
} else {
|
|
450
|
+
(0, _logger.getLogger)().info("Window ".concat(windowId, " became responsive").concat(duration ? " after ".concat(duration, "ms") : ''));
|
|
451
|
+
}
|
|
452
|
+
};
|
|
453
|
+
var hangDetectionManager = new _hangDetection.MultiWindowHangDetectionManager({
|
|
454
|
+
onHangTimeout: onHangTimeout,
|
|
455
|
+
onStateChange: onStateChange
|
|
456
|
+
}, {
|
|
457
|
+
timeout: _hangDetection.DEFAULT_HANG_DETECTION_TIMEOUT,
|
|
458
|
+
enableVerboseLogging: true
|
|
459
|
+
});
|
|
460
|
+
function handleUnresponsive(windowId) {
|
|
461
|
+
var _mainWindow;
|
|
462
|
+
var targetWindowId = windowId || ((_mainWindow = mainWindow) === null || _mainWindow === void 0 ? void 0 : _mainWindow.id);
|
|
463
|
+
if (!targetWindowId) {
|
|
464
|
+
(0, _logger.getLogger)().warn('Cannot handle unresponsive: no window ID available');
|
|
465
|
+
return;
|
|
466
|
+
}
|
|
467
|
+
hangDetectionManager.handleWindowUnresponsive(targetWindowId);
|
|
417
468
|
}
|
|
418
|
-
function
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
469
|
+
function handleResponsive(windowId) {
|
|
470
|
+
var _mainWindow2;
|
|
471
|
+
var targetWindowId = windowId || ((_mainWindow2 = mainWindow) === null || _mainWindow2 === void 0 ? void 0 : _mainWindow2.id);
|
|
472
|
+
if (!targetWindowId) {
|
|
473
|
+
(0, _logger.getLogger)().warn('Cannot handle responsive: no window ID available');
|
|
474
|
+
return;
|
|
422
475
|
}
|
|
476
|
+
hangDetectionManager.handleWindowResponsive(targetWindowId);
|
|
423
477
|
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
require("core-js/modules/es.object.define-property.js");
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.DEFAULT_HANG_DETECTION_TIMEOUT = void 0;
|
|
8
|
+
Object.defineProperty(exports, "MultiWindowHangDetectionManager", {
|
|
9
|
+
enumerable: true,
|
|
10
|
+
get: function get() {
|
|
11
|
+
return _manager.MultiWindowHangDetectionManager;
|
|
12
|
+
}
|
|
13
|
+
});
|
|
14
|
+
var _manager = require("./manager");
|
|
15
|
+
var DEFAULT_HANG_DETECTION_TIMEOUT = exports.DEFAULT_HANG_DETECTION_TIMEOUT = 15 * 1000; // 15秒
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { WindowHangState, HangDetectionConfig, HangDetectionCallbacks } from './types';
|
|
2
|
+
/**
|
|
3
|
+
* 多窗口 Hang Detection 管理器
|
|
4
|
+
*/
|
|
5
|
+
export declare class MultiWindowHangDetectionManager {
|
|
6
|
+
private windowStates;
|
|
7
|
+
private logger;
|
|
8
|
+
private config;
|
|
9
|
+
private callbacks;
|
|
10
|
+
constructor(callbacks: HangDetectionCallbacks, config?: HangDetectionConfig);
|
|
11
|
+
handleWindowUnresponsive(windowId: number): void;
|
|
12
|
+
/**
|
|
13
|
+
* 处理窗口变为responsive
|
|
14
|
+
*/
|
|
15
|
+
handleWindowResponsive(windowId: number): void;
|
|
16
|
+
private clearWindowTimer;
|
|
17
|
+
clearAllTimers(): void;
|
|
18
|
+
getUnresponsiveWindowCount(): number;
|
|
19
|
+
getUnresponsiveWindowIds(): number[];
|
|
20
|
+
getWindowHangState(windowId: number): WindowHangState | undefined;
|
|
21
|
+
isWindowUnresponsive(windowId: number): boolean;
|
|
22
|
+
getWindowUnresponsiveDuration(windowId: number): number | null;
|
|
23
|
+
private logCurrentState;
|
|
24
|
+
handleWindowClosed(windowId: number): void;
|
|
25
|
+
updateConfig(config: Partial<HangDetectionConfig>): void;
|
|
26
|
+
getConfig(): Required<HangDetectionConfig>;
|
|
27
|
+
dispose(): void;
|
|
28
|
+
}
|
|
@@ -0,0 +1,231 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
require("core-js/modules/es.symbol.js");
|
|
4
|
+
require("core-js/modules/es.symbol.description.js");
|
|
5
|
+
require("core-js/modules/es.symbol.iterator.js");
|
|
6
|
+
require("core-js/modules/es.error.cause.js");
|
|
7
|
+
require("core-js/modules/es.error.to-string.js");
|
|
8
|
+
require("core-js/modules/es.array.filter.js");
|
|
9
|
+
require("core-js/modules/es.array.for-each.js");
|
|
10
|
+
require("core-js/modules/es.array.is-array.js");
|
|
11
|
+
require("core-js/modules/es.array.push.js");
|
|
12
|
+
require("core-js/modules/es.array.slice.js");
|
|
13
|
+
require("core-js/modules/es.date.to-string.js");
|
|
14
|
+
require("core-js/modules/es.function.name.js");
|
|
15
|
+
require("core-js/modules/es.object.define-properties.js");
|
|
16
|
+
require("core-js/modules/es.object.define-property.js");
|
|
17
|
+
require("core-js/modules/es.object.get-own-property-descriptor.js");
|
|
18
|
+
require("core-js/modules/es.object.get-own-property-descriptors.js");
|
|
19
|
+
require("core-js/modules/es.object.keys.js");
|
|
20
|
+
require("core-js/modules/es.regexp.exec.js");
|
|
21
|
+
require("core-js/modules/es.regexp.test.js");
|
|
22
|
+
require("core-js/modules/es.regexp.to-string.js");
|
|
23
|
+
require("core-js/modules/esnext.iterator.constructor.js");
|
|
24
|
+
require("core-js/modules/esnext.iterator.filter.js");
|
|
25
|
+
require("core-js/modules/esnext.iterator.for-each.js");
|
|
26
|
+
require("core-js/modules/web.dom-collections.for-each.js");
|
|
27
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
28
|
+
Object.defineProperty(exports, "__esModule", {
|
|
29
|
+
value: true
|
|
30
|
+
});
|
|
31
|
+
exports.MultiWindowHangDetectionManager = void 0;
|
|
32
|
+
require("core-js/modules/es.array.concat.js");
|
|
33
|
+
require("core-js/modules/es.array.from.js");
|
|
34
|
+
require("core-js/modules/es.array.iterator.js");
|
|
35
|
+
require("core-js/modules/es.array.join.js");
|
|
36
|
+
require("core-js/modules/es.date.now.js");
|
|
37
|
+
require("core-js/modules/es.date.to-json.js");
|
|
38
|
+
require("core-js/modules/es.json.stringify.js");
|
|
39
|
+
require("core-js/modules/es.map.js");
|
|
40
|
+
require("core-js/modules/es.object.to-string.js");
|
|
41
|
+
require("core-js/modules/es.string.iterator.js");
|
|
42
|
+
require("core-js/modules/esnext.map.delete-all.js");
|
|
43
|
+
require("core-js/modules/esnext.map.emplace.js");
|
|
44
|
+
require("core-js/modules/esnext.map.every.js");
|
|
45
|
+
require("core-js/modules/esnext.map.filter.js");
|
|
46
|
+
require("core-js/modules/esnext.map.find.js");
|
|
47
|
+
require("core-js/modules/esnext.map.find-key.js");
|
|
48
|
+
require("core-js/modules/esnext.map.includes.js");
|
|
49
|
+
require("core-js/modules/esnext.map.key-of.js");
|
|
50
|
+
require("core-js/modules/esnext.map.map-keys.js");
|
|
51
|
+
require("core-js/modules/esnext.map.map-values.js");
|
|
52
|
+
require("core-js/modules/esnext.map.merge.js");
|
|
53
|
+
require("core-js/modules/esnext.map.reduce.js");
|
|
54
|
+
require("core-js/modules/esnext.map.some.js");
|
|
55
|
+
require("core-js/modules/esnext.map.update.js");
|
|
56
|
+
require("core-js/modules/web.dom-collections.iterator.js");
|
|
57
|
+
require("core-js/modules/web.timers.js");
|
|
58
|
+
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
59
|
+
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
|
|
60
|
+
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
|
|
61
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
62
|
+
var _2 = require(".");
|
|
63
|
+
var _logger = require("../logger");
|
|
64
|
+
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
65
|
+
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2["default"])(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
66
|
+
function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }
|
|
67
|
+
function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
|
|
68
|
+
function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
|
|
69
|
+
/**
|
|
70
|
+
* 多窗口 Hang Detection 管理器
|
|
71
|
+
*/
|
|
72
|
+
var MultiWindowHangDetectionManager = exports.MultiWindowHangDetectionManager = /*#__PURE__*/function () {
|
|
73
|
+
function MultiWindowHangDetectionManager(callbacks, config) {
|
|
74
|
+
var _config$timeout, _config$enableVerbose;
|
|
75
|
+
(0, _classCallCheck2["default"])(this, MultiWindowHangDetectionManager);
|
|
76
|
+
(0, _defineProperty2["default"])(this, "windowStates", new Map());
|
|
77
|
+
(0, _defineProperty2["default"])(this, "logger", (0, _logger.getLogger)());
|
|
78
|
+
this.callbacks = callbacks;
|
|
79
|
+
this.config = {
|
|
80
|
+
timeout: (_config$timeout = config === null || config === void 0 ? void 0 : config.timeout) !== null && _config$timeout !== void 0 ? _config$timeout : _2.DEFAULT_HANG_DETECTION_TIMEOUT,
|
|
81
|
+
enableVerboseLogging: (_config$enableVerbose = config === null || config === void 0 ? void 0 : config.enableVerboseLogging) !== null && _config$enableVerbose !== void 0 ? _config$enableVerbose : true
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
return (0, _createClass2["default"])(MultiWindowHangDetectionManager, [{
|
|
85
|
+
key: "handleWindowUnresponsive",
|
|
86
|
+
value: function handleWindowUnresponsive(windowId) {
|
|
87
|
+
var _this = this;
|
|
88
|
+
this.logger.warn("Window ".concat(windowId, " became unresponsive, starting hang detection timer"));
|
|
89
|
+
this.clearWindowTimer(windowId);
|
|
90
|
+
var timer = setTimeout(function () {
|
|
91
|
+
_this.logger.error("Window ".concat(windowId, " has been unresponsive for ").concat(_this.config.timeout, "ms, triggering timeout callback"));
|
|
92
|
+
_this.callbacks.onHangTimeout(windowId);
|
|
93
|
+
}, this.config.timeout);
|
|
94
|
+
this.windowStates.set(windowId, {
|
|
95
|
+
windowId: windowId,
|
|
96
|
+
timer: timer,
|
|
97
|
+
isUnresponsive: true,
|
|
98
|
+
startTime: Date.now()
|
|
99
|
+
});
|
|
100
|
+
if (this.callbacks.onStateChange) {
|
|
101
|
+
this.callbacks.onStateChange(windowId, true);
|
|
102
|
+
}
|
|
103
|
+
if (this.config.enableVerboseLogging) {
|
|
104
|
+
this.logCurrentState();
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
/**
|
|
109
|
+
* 处理窗口变为responsive
|
|
110
|
+
*/
|
|
111
|
+
}, {
|
|
112
|
+
key: "handleWindowResponsive",
|
|
113
|
+
value: function handleWindowResponsive(windowId) {
|
|
114
|
+
this.logger.info("Window ".concat(windowId, " became responsive again"));
|
|
115
|
+
var windowState = this.windowStates.get(windowId);
|
|
116
|
+
if (windowState) {
|
|
117
|
+
var duration = Date.now() - windowState.startTime;
|
|
118
|
+
this.logger.info("Window ".concat(windowId, " was unresponsive for ").concat(duration, "ms"));
|
|
119
|
+
this.clearWindowTimer(windowId);
|
|
120
|
+
if (this.callbacks.onStateChange) {
|
|
121
|
+
this.callbacks.onStateChange(windowId, false, duration);
|
|
122
|
+
}
|
|
123
|
+
this.windowStates["delete"](windowId);
|
|
124
|
+
}
|
|
125
|
+
if (this.config.enableVerboseLogging) {
|
|
126
|
+
this.logCurrentState();
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
}, {
|
|
130
|
+
key: "clearWindowTimer",
|
|
131
|
+
value: function clearWindowTimer(windowId) {
|
|
132
|
+
var windowState = this.windowStates.get(windowId);
|
|
133
|
+
if (windowState && windowState.timer) {
|
|
134
|
+
clearTimeout(windowState.timer);
|
|
135
|
+
windowState.timer = null;
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
}, {
|
|
139
|
+
key: "clearAllTimers",
|
|
140
|
+
value: function clearAllTimers() {
|
|
141
|
+
this.logger.info('Clearing all hang detection timers');
|
|
142
|
+
var _iterator = _createForOfIteratorHelper(this.windowStates),
|
|
143
|
+
_step;
|
|
144
|
+
try {
|
|
145
|
+
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
146
|
+
var _step$value = (0, _slicedToArray2["default"])(_step.value, 2),
|
|
147
|
+
_ = _step$value[0],
|
|
148
|
+
windowState = _step$value[1];
|
|
149
|
+
if (windowState.timer) {
|
|
150
|
+
clearTimeout(windowState.timer);
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
} catch (err) {
|
|
154
|
+
_iterator.e(err);
|
|
155
|
+
} finally {
|
|
156
|
+
_iterator.f();
|
|
157
|
+
}
|
|
158
|
+
this.windowStates.clear();
|
|
159
|
+
}
|
|
160
|
+
}, {
|
|
161
|
+
key: "getUnresponsiveWindowCount",
|
|
162
|
+
value: function getUnresponsiveWindowCount() {
|
|
163
|
+
return this.windowStates.size;
|
|
164
|
+
}
|
|
165
|
+
}, {
|
|
166
|
+
key: "getUnresponsiveWindowIds",
|
|
167
|
+
value: function getUnresponsiveWindowIds() {
|
|
168
|
+
return Array.from(this.windowStates.keys());
|
|
169
|
+
}
|
|
170
|
+
}, {
|
|
171
|
+
key: "getWindowHangState",
|
|
172
|
+
value: function getWindowHangState(windowId) {
|
|
173
|
+
return this.windowStates.get(windowId);
|
|
174
|
+
}
|
|
175
|
+
}, {
|
|
176
|
+
key: "isWindowUnresponsive",
|
|
177
|
+
value: function isWindowUnresponsive(windowId) {
|
|
178
|
+
return this.windowStates.has(windowId);
|
|
179
|
+
}
|
|
180
|
+
}, {
|
|
181
|
+
key: "getWindowUnresponsiveDuration",
|
|
182
|
+
value: function getWindowUnresponsiveDuration(windowId) {
|
|
183
|
+
var windowState = this.windowStates.get(windowId);
|
|
184
|
+
if (!windowState) {
|
|
185
|
+
return null;
|
|
186
|
+
}
|
|
187
|
+
return Date.now() - windowState.startTime;
|
|
188
|
+
}
|
|
189
|
+
}, {
|
|
190
|
+
key: "logCurrentState",
|
|
191
|
+
value: function logCurrentState() {
|
|
192
|
+
var unresponsiveCount = this.windowStates.size;
|
|
193
|
+
var windowIds = Array.from(this.windowStates.keys());
|
|
194
|
+
this.logger.info("Hang Detection State: ".concat(unresponsiveCount, " unresponsive windows [").concat(windowIds.join(', '), "]"));
|
|
195
|
+
}
|
|
196
|
+
}, {
|
|
197
|
+
key: "handleWindowClosed",
|
|
198
|
+
value: function handleWindowClosed(windowId) {
|
|
199
|
+
this.logger.info("Window ".concat(windowId, " closed, cleaning up hang detection state"));
|
|
200
|
+
var windowState = this.windowStates.get(windowId);
|
|
201
|
+
if (windowState) {
|
|
202
|
+
if (this.callbacks.onStateChange) {
|
|
203
|
+
var duration = Date.now() - windowState.startTime;
|
|
204
|
+
this.callbacks.onStateChange(windowId, false, duration);
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
this.clearWindowTimer(windowId);
|
|
208
|
+
this.windowStates["delete"](windowId);
|
|
209
|
+
if (this.config.enableVerboseLogging) {
|
|
210
|
+
this.logCurrentState();
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
}, {
|
|
214
|
+
key: "updateConfig",
|
|
215
|
+
value: function updateConfig(config) {
|
|
216
|
+
this.config = _objectSpread(_objectSpread({}, this.config), config);
|
|
217
|
+
this.logger.info("Hang detection config updated: ".concat(JSON.stringify(this.config)));
|
|
218
|
+
}
|
|
219
|
+
}, {
|
|
220
|
+
key: "getConfig",
|
|
221
|
+
value: function getConfig() {
|
|
222
|
+
return _objectSpread({}, this.config);
|
|
223
|
+
}
|
|
224
|
+
}, {
|
|
225
|
+
key: "dispose",
|
|
226
|
+
value: function dispose() {
|
|
227
|
+
this.logger.info('Disposing MultiWindowHangDetectionManager');
|
|
228
|
+
this.clearAllTimers();
|
|
229
|
+
}
|
|
230
|
+
}]);
|
|
231
|
+
}();
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export interface WindowHangState {
|
|
2
|
+
windowId: number;
|
|
3
|
+
timer: NodeJS.Timeout | null;
|
|
4
|
+
isUnresponsive: boolean;
|
|
5
|
+
startTime: number;
|
|
6
|
+
}
|
|
7
|
+
export interface HangDetectionConfig {
|
|
8
|
+
timeout?: number;
|
|
9
|
+
enableVerboseLogging?: boolean;
|
|
10
|
+
}
|
|
11
|
+
export interface HangDetectionCallbacks {
|
|
12
|
+
onHangTimeout: (windowId: number) => void;
|
|
13
|
+
onStateChange?: (windowId: number, isUnresponsive: boolean, duration?: number) => void;
|
|
14
|
+
}
|
|
@@ -201,7 +201,8 @@ _renderer.ipcRenderer.on(_type.IPCMessageCMD.SetParameters, function (_event, va
|
|
|
201
201
|
_renderer.ipcRenderer.on(_type.IPCMessageCMD.LaunchMeeting, function (_event, value) {
|
|
202
202
|
console.log('LaunchMeeting in sdk-helper', value);
|
|
203
203
|
if (cppSdkHelper.onLaunchMeeting) {
|
|
204
|
-
var data = value
|
|
204
|
+
var data = value.data,
|
|
205
|
+
lastInitParams = value.lastInitParams;
|
|
205
206
|
try {
|
|
206
207
|
if (typeof value == 'string') {
|
|
207
208
|
data = JSON.parse(value);
|
|
@@ -209,7 +210,10 @@ _renderer.ipcRenderer.on(_type.IPCMessageCMD.LaunchMeeting, function (_event, va
|
|
|
209
210
|
} catch (e) {
|
|
210
211
|
console.error("windows_release Failed to parse launch options:, ".concat(JSON.stringify(e), ", typeof value: ").concat((0, _typeof2["default"])(value), ", value: ").concat(value));
|
|
211
212
|
}
|
|
212
|
-
cppSdkHelper.onLaunchMeeting(
|
|
213
|
+
cppSdkHelper.onLaunchMeeting({
|
|
214
|
+
data: data,
|
|
215
|
+
lastInitParams: lastInitParams
|
|
216
|
+
});
|
|
213
217
|
}
|
|
214
218
|
});
|
|
215
219
|
_renderer.ipcRenderer.on(_type.IPCMessageCMD.RenewUserToken, function (_event, value) {
|
package/lib/electron/until.d.ts
CHANGED
|
@@ -2,8 +2,7 @@ declare enum ServiceErrorCode {
|
|
|
2
2
|
FcrUIScene = 800
|
|
3
3
|
}
|
|
4
4
|
declare enum UISceneErrorCode {
|
|
5
|
-
Creator = 10
|
|
6
|
-
ProcessManager = 11
|
|
5
|
+
Creator = 10
|
|
7
6
|
}
|
|
8
7
|
declare enum DetailErrorCode {
|
|
9
8
|
unknown = 1,
|
|
@@ -20,7 +19,6 @@ declare enum DetailErrorCode {
|
|
|
20
19
|
mainWindowHidden = 82,
|
|
21
20
|
closeWindowBeforeLaunchSuccess = 83,
|
|
22
21
|
meetingLaunchProcessing = 84,
|
|
23
|
-
mainWindowHiddenAfterLaunchSuccess = 85,
|
|
24
22
|
crashed = 86,
|
|
25
23
|
hangDetection = 87
|
|
26
24
|
}
|
|
@@ -28,7 +26,6 @@ export declare const generaErrorCode: (serviceCode: ServiceErrorCode, uiSceneCod
|
|
|
28
26
|
export declare const windowHideErrorCode: number;
|
|
29
27
|
export declare const closeWindowBeforeLaunchSuccessErrorCode: number;
|
|
30
28
|
export declare const meetingLaunchProcessingErrorCode: number;
|
|
31
|
-
export declare const mainWindowHiddenOnLaunchSuccessErrorCode: number;
|
|
32
29
|
export declare const crashedErrorCode: number;
|
|
33
30
|
export declare const hangDetectionErrorCode: number;
|
|
34
31
|
export {};
|