@epicgames-ps/lib-pixelstreamingfrontend-ue5.5 0.3.0 → 0.3.1
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/dist/commonjs/AFK/AFKController.js +109 -109
- package/dist/commonjs/Config/Config.js +559 -559
- package/dist/commonjs/Config/SettingBase.js +98 -98
- package/dist/commonjs/Config/SettingFlag.js +49 -49
- package/dist/commonjs/Config/SettingNumber.js +83 -83
- package/dist/commonjs/Config/SettingOption.js +84 -84
- package/dist/commonjs/Config/SettingText.js +42 -42
- package/dist/commonjs/DataChannel/DataChannelController.js +106 -106
- package/dist/commonjs/DataChannel/DataChannelLatencyTestController.js +94 -94
- package/dist/commonjs/DataChannel/DataChannelLatencyTestResults.js +18 -18
- package/dist/commonjs/DataChannel/DataChannelSender.js +43 -43
- package/dist/commonjs/DataChannel/InitialSettings.js +41 -41
- package/dist/commonjs/DataChannel/LatencyTestResults.js +60 -60
- package/dist/commonjs/FreezeFrame/FreezeFrame.js +93 -93
- package/dist/commonjs/FreezeFrame/FreezeFrameController.js +95 -95
- package/dist/commonjs/Inputs/GamepadController.js +188 -188
- package/dist/commonjs/Inputs/GamepadTypes.js +21 -21
- package/dist/commonjs/Inputs/IInputController.js +2 -2
- package/dist/commonjs/Inputs/InputClassesFactory.js +96 -96
- package/dist/commonjs/Inputs/KeyCodes.js +112 -112
- package/dist/commonjs/Inputs/KeyboardController.js +137 -137
- package/dist/commonjs/Inputs/MouseButtons.js +28 -28
- package/dist/commonjs/Inputs/MouseController.js +97 -97
- package/dist/commonjs/Inputs/MouseControllerHovering.js +93 -93
- package/dist/commonjs/Inputs/MouseControllerLocked.js +153 -153
- package/dist/commonjs/Inputs/SpecialKeyCodes.js +19 -19
- package/dist/commonjs/Inputs/TouchController.js +123 -123
- package/dist/commonjs/Inputs/TouchControllerFake.js +91 -91
- package/dist/commonjs/Inputs/XRGamepadController.js +124 -124
- package/dist/commonjs/PeerConnectionController/AggregatedStats.js +252 -252
- package/dist/commonjs/PeerConnectionController/CandidatePairStats.js +10 -10
- package/dist/commonjs/PeerConnectionController/CandidateStat.js +10 -10
- package/dist/commonjs/PeerConnectionController/CodecStats.js +10 -10
- package/dist/commonjs/PeerConnectionController/DataChannelStats.js +10 -10
- package/dist/commonjs/PeerConnectionController/InboundRTPStats.js +22 -22
- package/dist/commonjs/PeerConnectionController/InboundTrackStats.js +10 -10
- package/dist/commonjs/PeerConnectionController/OutBoundRTPStats.js +16 -16
- package/dist/commonjs/PeerConnectionController/PeerConnectionController.js +584 -584
- package/dist/commonjs/PeerConnectionController/SessionStats.js +10 -10
- package/dist/commonjs/PeerConnectionController/StreamStats.js +10 -10
- package/dist/commonjs/PixelStreaming/PixelStreaming.js +607 -607
- package/dist/commonjs/UI/OnScreenKeyboard.js +82 -82
- package/dist/commonjs/UeInstanceMessage/ResponseController.js +38 -38
- package/dist/commonjs/UeInstanceMessage/SendMessageController.js +120 -120
- package/dist/commonjs/UeInstanceMessage/StreamMessageController.js +210 -210
- package/dist/commonjs/UeInstanceMessage/ToStreamerMessagesController.js +49 -49
- package/dist/commonjs/Util/EventEmitter.js +386 -386
- package/dist/commonjs/Util/FileUtil.js +108 -108
- package/dist/commonjs/Util/IURLSearchParams.js +25 -25
- package/dist/commonjs/Util/InputCoordTranslator.js +49 -49
- package/dist/commonjs/Util/RTCUtils.js +40 -40
- package/dist/commonjs/VideoPlayer/StreamController.js +67 -67
- package/dist/commonjs/VideoPlayer/VideoPlayer.js +177 -177
- package/dist/commonjs/WebRtcPlayer/WebRtcPlayerController.js +1221 -1221
- package/dist/commonjs/WebXR/WebXRController.js +335 -335
- package/dist/commonjs/pixelstreamingfrontend.js +70 -70
- package/dist/esm/AFK/AFKController.js +105 -105
- package/dist/esm/Config/Config.js +551 -551
- package/dist/esm/Config/SettingBase.js +94 -94
- package/dist/esm/Config/SettingFlag.js +45 -45
- package/dist/esm/Config/SettingNumber.js +79 -79
- package/dist/esm/Config/SettingOption.js +80 -80
- package/dist/esm/Config/SettingText.js +38 -38
- package/dist/esm/DataChannel/DataChannelController.js +102 -102
- package/dist/esm/DataChannel/DataChannelLatencyTestController.js +90 -90
- package/dist/esm/DataChannel/DataChannelLatencyTestResults.js +14 -14
- package/dist/esm/DataChannel/DataChannelSender.js +39 -39
- package/dist/esm/DataChannel/InitialSettings.js +34 -34
- package/dist/esm/DataChannel/LatencyTestResults.js +56 -56
- package/dist/esm/FreezeFrame/FreezeFrame.js +89 -89
- package/dist/esm/FreezeFrame/FreezeFrameController.js +91 -91
- package/dist/esm/Inputs/GamepadController.js +184 -184
- package/dist/esm/Inputs/GamepadTypes.js +17 -17
- package/dist/esm/Inputs/IInputController.js +1 -1
- package/dist/esm/Inputs/InputClassesFactory.js +91 -91
- package/dist/esm/Inputs/KeyCodes.js +109 -109
- package/dist/esm/Inputs/KeyboardController.js +133 -133
- package/dist/esm/Inputs/MouseButtons.js +23 -23
- package/dist/esm/Inputs/MouseController.js +93 -93
- package/dist/esm/Inputs/MouseControllerHovering.js +89 -89
- package/dist/esm/Inputs/MouseControllerLocked.js +149 -149
- package/dist/esm/Inputs/SpecialKeyCodes.js +15 -15
- package/dist/esm/Inputs/TouchController.js +119 -119
- package/dist/esm/Inputs/TouchControllerFake.js +87 -87
- package/dist/esm/Inputs/XRGamepadController.js +120 -120
- package/dist/esm/PeerConnectionController/AggregatedStats.js +248 -248
- package/dist/esm/PeerConnectionController/CandidatePairStats.js +6 -6
- package/dist/esm/PeerConnectionController/CandidateStat.js +6 -6
- package/dist/esm/PeerConnectionController/CodecStats.js +6 -6
- package/dist/esm/PeerConnectionController/DataChannelStats.js +6 -6
- package/dist/esm/PeerConnectionController/InboundRTPStats.js +16 -16
- package/dist/esm/PeerConnectionController/InboundTrackStats.js +6 -6
- package/dist/esm/PeerConnectionController/OutBoundRTPStats.js +11 -11
- package/dist/esm/PeerConnectionController/PeerConnectionController.js +580 -580
- package/dist/esm/PeerConnectionController/SessionStats.js +6 -6
- package/dist/esm/PeerConnectionController/StreamStats.js +6 -6
- package/dist/esm/PixelStreaming/PixelStreaming.js +603 -603
- package/dist/esm/UI/OnScreenKeyboard.js +78 -78
- package/dist/esm/UeInstanceMessage/ResponseController.js +34 -34
- package/dist/esm/UeInstanceMessage/SendMessageController.js +116 -116
- package/dist/esm/UeInstanceMessage/StreamMessageController.js +205 -205
- package/dist/esm/UeInstanceMessage/ToStreamerMessagesController.js +45 -45
- package/dist/esm/Util/EventEmitter.js +345 -345
- package/dist/esm/Util/FileUtil.js +103 -103
- package/dist/esm/Util/IURLSearchParams.js +21 -21
- package/dist/esm/Util/InputCoordTranslator.js +45 -45
- package/dist/esm/Util/RTCUtils.js +36 -36
- package/dist/esm/VideoPlayer/StreamController.js +63 -63
- package/dist/esm/VideoPlayer/VideoPlayer.js +173 -173
- package/dist/esm/WebRtcPlayer/WebRtcPlayerController.js +1217 -1217
- package/dist/esm/WebXR/WebXRController.js +331 -331
- package/dist/esm/pixelstreamingfrontend.js +24 -24
- package/dist/types/AFK/AFKController.d.ts +38 -38
- package/dist/types/Config/Config.d.ts +220 -220
- package/dist/types/Config/SettingBase.d.ts +43 -43
- package/dist/types/Config/SettingFlag.d.ts +24 -24
- package/dist/types/Config/SettingNumber.d.ts +41 -41
- package/dist/types/Config/SettingOption.d.ts +41 -41
- package/dist/types/Config/SettingText.d.ts +21 -21
- package/dist/types/DataChannel/DataChannelController.d.ts +59 -59
- package/dist/types/DataChannel/DataChannelLatencyTestController.d.ts +25 -25
- package/dist/types/DataChannel/DataChannelLatencyTestResults.d.ts +46 -46
- package/dist/types/DataChannel/DataChannelSender.d.ts +21 -21
- package/dist/types/DataChannel/InitialSettings.d.ts +44 -44
- package/dist/types/DataChannel/LatencyTestResults.d.ts +31 -31
- package/dist/types/FreezeFrame/FreezeFrame.d.ts +36 -36
- package/dist/types/FreezeFrame/FreezeFrameController.d.ts +37 -37
- package/dist/types/Inputs/GamepadController.d.ts +61 -61
- package/dist/types/Inputs/GamepadTypes.d.ts +15 -15
- package/dist/types/Inputs/IInputController.d.ts +16 -16
- package/dist/types/Inputs/InputClassesFactory.d.ts +53 -53
- package/dist/types/Inputs/KeyCodes.d.ts +5 -5
- package/dist/types/Inputs/KeyboardController.d.ts +34 -34
- package/dist/types/Inputs/MouseButtons.d.ts +22 -22
- package/dist/types/Inputs/MouseController.d.ts +40 -40
- package/dist/types/Inputs/MouseControllerHovering.d.ts +26 -26
- package/dist/types/Inputs/MouseControllerLocked.d.ts +31 -31
- package/dist/types/Inputs/SpecialKeyCodes.d.ts +14 -14
- package/dist/types/Inputs/TouchController.d.ts +28 -28
- package/dist/types/Inputs/TouchControllerFake.d.ts +29 -29
- package/dist/types/Inputs/XRGamepadController.d.ts +15 -15
- package/dist/types/PeerConnectionController/AggregatedStats.d.ts +82 -82
- package/dist/types/PeerConnectionController/CandidatePairStats.d.ts +22 -22
- package/dist/types/PeerConnectionController/CandidateStat.d.ts +13 -13
- package/dist/types/PeerConnectionController/CodecStats.d.ts +14 -14
- package/dist/types/PeerConnectionController/DataChannelStats.d.ts +15 -15
- package/dist/types/PeerConnectionController/InboundRTPStats.d.ts +141 -141
- package/dist/types/PeerConnectionController/InboundTrackStats.d.ts +32 -32
- package/dist/types/PeerConnectionController/OutBoundRTPStats.d.ts +23 -23
- package/dist/types/PeerConnectionController/PeerConnectionController.d.ts +143 -143
- package/dist/types/PeerConnectionController/SessionStats.d.ts +8 -8
- package/dist/types/PeerConnectionController/StreamStats.d.ts +9 -9
- package/dist/types/PixelStreaming/PixelStreaming.d.ts +271 -271
- package/dist/types/UI/OnScreenKeyboard.d.ts +30 -30
- package/dist/types/UeInstanceMessage/ResponseController.d.ts +19 -19
- package/dist/types/UeInstanceMessage/SendMessageController.d.ts +18 -18
- package/dist/types/UeInstanceMessage/StreamMessageController.d.ts +29 -29
- package/dist/types/UeInstanceMessage/ToStreamerMessagesController.d.ts +32 -32
- package/dist/types/Util/EventEmitter.d.ts +429 -429
- package/dist/types/Util/FileUtil.d.ts +32 -32
- package/dist/types/Util/IURLSearchParams.d.ts +9 -9
- package/dist/types/Util/InputCoordTranslator.d.ts +29 -29
- package/dist/types/Util/RTCUtils.d.ts +8 -8
- package/dist/types/VideoPlayer/StreamController.d.ts +22 -22
- package/dist/types/VideoPlayer/VideoPlayer.d.ts +78 -78
- package/dist/types/WebRtcPlayer/WebRtcPlayerController.d.ts +379 -379
- package/dist/types/WebXR/WebXRController.d.ts +42 -42
- package/dist/types/pixelstreamingfrontend.d.ts +23 -23
- package/package.json +45 -45
|
@@ -1,79 +1,79 @@
|
|
|
1
|
-
// Copyright Epic Games, Inc. All Rights Reserved.
|
|
2
|
-
/**
|
|
3
|
-
* Class for handling on screen keyboard usage
|
|
4
|
-
*/
|
|
5
|
-
export class OnScreenKeyboard {
|
|
6
|
-
/**
|
|
7
|
-
*
|
|
8
|
-
* @param videoElementParent The div element the video player is injected into
|
|
9
|
-
*/
|
|
10
|
-
constructor(videoElementParent) {
|
|
11
|
-
this.editTextButton = null;
|
|
12
|
-
this.hiddenInput = null;
|
|
13
|
-
if ('ontouchstart' in document.documentElement) {
|
|
14
|
-
this.createOnScreenKeyboardHelpers(videoElementParent);
|
|
15
|
-
}
|
|
16
|
-
}
|
|
17
|
-
/**
|
|
18
|
-
* An override for unquantizeAndDenormalizeUnsigned
|
|
19
|
-
* @param x the x axis point
|
|
20
|
-
* @param y the y axis point
|
|
21
|
-
* @returns unquantizeAndDenormalizeUnsigned object
|
|
22
|
-
*/
|
|
23
|
-
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
24
|
-
unquantizeAndDenormalizeUnsigned(x, y) {
|
|
25
|
-
return null;
|
|
26
|
-
}
|
|
27
|
-
/**
|
|
28
|
-
* Creates on screen keyboard helpers
|
|
29
|
-
* @param videoElementParent The div element the video player i injected into
|
|
30
|
-
*/
|
|
31
|
-
createOnScreenKeyboardHelpers(videoElementParent) {
|
|
32
|
-
if (!this.hiddenInput) {
|
|
33
|
-
this.hiddenInput = document.createElement('input');
|
|
34
|
-
this.hiddenInput.id = 'hiddenInput';
|
|
35
|
-
this.hiddenInput.maxLength = 0;
|
|
36
|
-
// Set inline style so that users not using the UI library
|
|
37
|
-
// will still have this element display correctly
|
|
38
|
-
this.hiddenInput.style.position = 'absolute';
|
|
39
|
-
this.hiddenInput.style.left = '-10%';
|
|
40
|
-
this.hiddenInput.style.width = '0px';
|
|
41
|
-
this.hiddenInput.style.opacity = '0';
|
|
42
|
-
videoElementParent.appendChild(this.hiddenInput);
|
|
43
|
-
}
|
|
44
|
-
if (!this.editTextButton) {
|
|
45
|
-
this.editTextButton = document.createElement('button');
|
|
46
|
-
this.editTextButton.id = 'editTextButton';
|
|
47
|
-
this.editTextButton.innerHTML = 'edit text';
|
|
48
|
-
videoElementParent.appendChild(this.editTextButton);
|
|
49
|
-
// Hide the 'edit text' button.
|
|
50
|
-
this.editTextButton.style.display = 'none';
|
|
51
|
-
this.editTextButton.addEventListener('touchend', (event) => {
|
|
52
|
-
// Show the on-screen keyboard.
|
|
53
|
-
this.hiddenInput.focus();
|
|
54
|
-
event.preventDefault();
|
|
55
|
-
});
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
/**
|
|
59
|
-
* Shows the on screen keyboard
|
|
60
|
-
* @param command the command received via the data channel containing keyboard positions
|
|
61
|
-
*/
|
|
62
|
-
showOnScreenKeyboard(command) {
|
|
63
|
-
if (command.showOnScreenKeyboard) {
|
|
64
|
-
// Show the 'edit text' button.
|
|
65
|
-
this.editTextButton.style.display = 'default';
|
|
66
|
-
// Place the 'edit text' button near the UE input widget.
|
|
67
|
-
const pos = this.unquantizeAndDenormalizeUnsigned(command.x, command.y);
|
|
68
|
-
this.editTextButton.style.top = pos.y.toString() + 'px';
|
|
69
|
-
this.editTextButton.style.left = (pos.x - 40).toString() + 'px';
|
|
70
|
-
}
|
|
71
|
-
else {
|
|
72
|
-
// Hide the 'edit text' button.
|
|
73
|
-
this.editTextButton.style.display = 'none';
|
|
74
|
-
// Hide the on-screen keyboard.
|
|
75
|
-
this.hiddenInput.blur();
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
}
|
|
1
|
+
// Copyright Epic Games, Inc. All Rights Reserved.
|
|
2
|
+
/**
|
|
3
|
+
* Class for handling on screen keyboard usage
|
|
4
|
+
*/
|
|
5
|
+
export class OnScreenKeyboard {
|
|
6
|
+
/**
|
|
7
|
+
*
|
|
8
|
+
* @param videoElementParent The div element the video player is injected into
|
|
9
|
+
*/
|
|
10
|
+
constructor(videoElementParent) {
|
|
11
|
+
this.editTextButton = null;
|
|
12
|
+
this.hiddenInput = null;
|
|
13
|
+
if ('ontouchstart' in document.documentElement) {
|
|
14
|
+
this.createOnScreenKeyboardHelpers(videoElementParent);
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* An override for unquantizeAndDenormalizeUnsigned
|
|
19
|
+
* @param x the x axis point
|
|
20
|
+
* @param y the y axis point
|
|
21
|
+
* @returns unquantizeAndDenormalizeUnsigned object
|
|
22
|
+
*/
|
|
23
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
24
|
+
unquantizeAndDenormalizeUnsigned(x, y) {
|
|
25
|
+
return null;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Creates on screen keyboard helpers
|
|
29
|
+
* @param videoElementParent The div element the video player i injected into
|
|
30
|
+
*/
|
|
31
|
+
createOnScreenKeyboardHelpers(videoElementParent) {
|
|
32
|
+
if (!this.hiddenInput) {
|
|
33
|
+
this.hiddenInput = document.createElement('input');
|
|
34
|
+
this.hiddenInput.id = 'hiddenInput';
|
|
35
|
+
this.hiddenInput.maxLength = 0;
|
|
36
|
+
// Set inline style so that users not using the UI library
|
|
37
|
+
// will still have this element display correctly
|
|
38
|
+
this.hiddenInput.style.position = 'absolute';
|
|
39
|
+
this.hiddenInput.style.left = '-10%';
|
|
40
|
+
this.hiddenInput.style.width = '0px';
|
|
41
|
+
this.hiddenInput.style.opacity = '0';
|
|
42
|
+
videoElementParent.appendChild(this.hiddenInput);
|
|
43
|
+
}
|
|
44
|
+
if (!this.editTextButton) {
|
|
45
|
+
this.editTextButton = document.createElement('button');
|
|
46
|
+
this.editTextButton.id = 'editTextButton';
|
|
47
|
+
this.editTextButton.innerHTML = 'edit text';
|
|
48
|
+
videoElementParent.appendChild(this.editTextButton);
|
|
49
|
+
// Hide the 'edit text' button.
|
|
50
|
+
this.editTextButton.style.display = 'none';
|
|
51
|
+
this.editTextButton.addEventListener('touchend', (event) => {
|
|
52
|
+
// Show the on-screen keyboard.
|
|
53
|
+
this.hiddenInput.focus();
|
|
54
|
+
event.preventDefault();
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Shows the on screen keyboard
|
|
60
|
+
* @param command the command received via the data channel containing keyboard positions
|
|
61
|
+
*/
|
|
62
|
+
showOnScreenKeyboard(command) {
|
|
63
|
+
if (command.showOnScreenKeyboard) {
|
|
64
|
+
// Show the 'edit text' button.
|
|
65
|
+
this.editTextButton.style.display = 'default';
|
|
66
|
+
// Place the 'edit text' button near the UE input widget.
|
|
67
|
+
const pos = this.unquantizeAndDenormalizeUnsigned(command.x, command.y);
|
|
68
|
+
this.editTextButton.style.top = pos.y.toString() + 'px';
|
|
69
|
+
this.editTextButton.style.left = (pos.x - 40).toString() + 'px';
|
|
70
|
+
}
|
|
71
|
+
else {
|
|
72
|
+
// Hide the 'edit text' button.
|
|
73
|
+
this.editTextButton.style.display = 'none';
|
|
74
|
+
// Hide the on-screen keyboard.
|
|
75
|
+
this.hiddenInput.blur();
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
79
|
//# sourceMappingURL=OnScreenKeyboard.js.map
|
|
@@ -1,35 +1,35 @@
|
|
|
1
|
-
// Copyright Epic Games, Inc. All Rights Reserved.
|
|
2
|
-
import { Logger } from '@epicgames-ps/lib-pixelstreamingcommon-ue5.5';
|
|
3
|
-
export class ResponseController {
|
|
4
|
-
constructor() {
|
|
5
|
-
this.responseEventListeners = new Map();
|
|
6
|
-
}
|
|
7
|
-
/**
|
|
8
|
-
* Add a response event listener to the response map
|
|
9
|
-
* @param name - The name of the response
|
|
10
|
-
* @param listener - The method to be activated when the response is selected
|
|
11
|
-
*/
|
|
12
|
-
addResponseEventListener(name, listener) {
|
|
13
|
-
this.responseEventListeners.set(name, listener);
|
|
14
|
-
}
|
|
15
|
-
/**
|
|
16
|
-
* Remove a response event listener to the response map
|
|
17
|
-
* @param name - The name of the response
|
|
18
|
-
*/
|
|
19
|
-
removeResponseEventListener(name) {
|
|
20
|
-
this.responseEventListeners.delete(name);
|
|
21
|
-
}
|
|
22
|
-
/**
|
|
23
|
-
* Handle a response when receiving one form the streamer
|
|
24
|
-
* @param message - Data received from the data channel with the command in question
|
|
25
|
-
*/
|
|
26
|
-
onResponse(message) {
|
|
27
|
-
Logger.Info('DataChannelReceiveMessageType.Response');
|
|
28
|
-
const responses = new TextDecoder('utf-16').decode(message.slice(1));
|
|
29
|
-
Logger.Info(responses);
|
|
30
|
-
this.responseEventListeners.forEach((listener) => {
|
|
31
|
-
listener(responses);
|
|
32
|
-
});
|
|
33
|
-
}
|
|
34
|
-
}
|
|
1
|
+
// Copyright Epic Games, Inc. All Rights Reserved.
|
|
2
|
+
import { Logger } from '@epicgames-ps/lib-pixelstreamingcommon-ue5.5';
|
|
3
|
+
export class ResponseController {
|
|
4
|
+
constructor() {
|
|
5
|
+
this.responseEventListeners = new Map();
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Add a response event listener to the response map
|
|
9
|
+
* @param name - The name of the response
|
|
10
|
+
* @param listener - The method to be activated when the response is selected
|
|
11
|
+
*/
|
|
12
|
+
addResponseEventListener(name, listener) {
|
|
13
|
+
this.responseEventListeners.set(name, listener);
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Remove a response event listener to the response map
|
|
17
|
+
* @param name - The name of the response
|
|
18
|
+
*/
|
|
19
|
+
removeResponseEventListener(name) {
|
|
20
|
+
this.responseEventListeners.delete(name);
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Handle a response when receiving one form the streamer
|
|
24
|
+
* @param message - Data received from the data channel with the command in question
|
|
25
|
+
*/
|
|
26
|
+
onResponse(message) {
|
|
27
|
+
Logger.Info('DataChannelReceiveMessageType.Response');
|
|
28
|
+
const responses = new TextDecoder('utf-16').decode(message.slice(1));
|
|
29
|
+
Logger.Info(responses);
|
|
30
|
+
this.responseEventListeners.forEach((listener) => {
|
|
31
|
+
listener(responses);
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
35
|
//# sourceMappingURL=ResponseController.js.map
|
|
@@ -1,117 +1,117 @@
|
|
|
1
|
-
// Copyright Epic Games, Inc. All Rights Reserved.
|
|
2
|
-
import { Logger } from '@epicgames-ps/lib-pixelstreamingcommon-ue5.5';
|
|
3
|
-
export class SendMessageController {
|
|
4
|
-
/**
|
|
5
|
-
* @param dataChannelSender - Data channel instance
|
|
6
|
-
* @param toStreamerMessagesMapProvider - Stream Messages instance
|
|
7
|
-
*/
|
|
8
|
-
constructor(dataChannelSender, toStreamerMessagesMapProvider) {
|
|
9
|
-
this.dataChannelSender = dataChannelSender;
|
|
10
|
-
this.toStreamerMessagesMapProvider = toStreamerMessagesMapProvider;
|
|
11
|
-
}
|
|
12
|
-
/**
|
|
13
|
-
* Send a message to the streamer through the data channel
|
|
14
|
-
* @param messageType - the type of message we are sending
|
|
15
|
-
* @param messageData - the message data we are sending over the data channel
|
|
16
|
-
* @returns - nil
|
|
17
|
-
*/
|
|
18
|
-
sendMessageToStreamer(messageType, messageData) {
|
|
19
|
-
if (messageData === undefined) {
|
|
20
|
-
messageData = [];
|
|
21
|
-
}
|
|
22
|
-
const toStreamerMessages = this.toStreamerMessagesMapProvider.toStreamerMessages;
|
|
23
|
-
const messageFormat = toStreamerMessages.get(messageType);
|
|
24
|
-
if (messageFormat === undefined) {
|
|
25
|
-
Logger.Error(`Attempted to send a message to the streamer with message type: ${messageType}, but the frontend hasn't been configured to send such a message. Check you've added the message type in your cpp`);
|
|
26
|
-
return;
|
|
27
|
-
}
|
|
28
|
-
if (messageFormat.structure && messageData && messageFormat.structure.length !== messageData.length) {
|
|
29
|
-
Logger.Error(`Provided message data doesn't match expected layout. Expected [ ${messageFormat.structure
|
|
30
|
-
.map((element) => {
|
|
31
|
-
switch (element) {
|
|
32
|
-
case 'uint8':
|
|
33
|
-
case 'uint16':
|
|
34
|
-
case 'int16':
|
|
35
|
-
case 'float':
|
|
36
|
-
case 'double':
|
|
37
|
-
return 'number';
|
|
38
|
-
case 'string':
|
|
39
|
-
return 'string';
|
|
40
|
-
}
|
|
41
|
-
})
|
|
42
|
-
.toString()} ] but received [ ${messageData.map((element) => typeof element).toString()} ]`);
|
|
43
|
-
return;
|
|
44
|
-
}
|
|
45
|
-
let byteLength = 0;
|
|
46
|
-
const textEncoder = new TextEncoder();
|
|
47
|
-
// One loop to calculate the length in bytes of all of the provided data
|
|
48
|
-
messageData.forEach((element, idx) => {
|
|
49
|
-
const type = messageFormat.structure[idx];
|
|
50
|
-
switch (type) {
|
|
51
|
-
case 'uint8':
|
|
52
|
-
byteLength += 1;
|
|
53
|
-
break;
|
|
54
|
-
case 'uint16':
|
|
55
|
-
byteLength += 2;
|
|
56
|
-
break;
|
|
57
|
-
case 'int16':
|
|
58
|
-
byteLength += 2;
|
|
59
|
-
break;
|
|
60
|
-
case 'float':
|
|
61
|
-
byteLength += 4;
|
|
62
|
-
break;
|
|
63
|
-
case 'double':
|
|
64
|
-
byteLength += 8;
|
|
65
|
-
break;
|
|
66
|
-
case 'string':
|
|
67
|
-
// 2 bytes for string length
|
|
68
|
-
byteLength += 2;
|
|
69
|
-
// 2 bytes per characters
|
|
70
|
-
byteLength += 2 * textEncoder.encode(element).length;
|
|
71
|
-
break;
|
|
72
|
-
}
|
|
73
|
-
});
|
|
74
|
-
const data = new DataView(new ArrayBuffer(byteLength + 1));
|
|
75
|
-
data.setUint8(0, messageFormat.id);
|
|
76
|
-
let byteOffset = 1;
|
|
77
|
-
messageData.forEach((element, idx) => {
|
|
78
|
-
const type = messageFormat.structure[idx];
|
|
79
|
-
switch (type) {
|
|
80
|
-
case 'uint8':
|
|
81
|
-
data.setUint8(byteOffset, element);
|
|
82
|
-
byteOffset += 1;
|
|
83
|
-
break;
|
|
84
|
-
case 'uint16':
|
|
85
|
-
data.setUint16(byteOffset, element, true);
|
|
86
|
-
byteOffset += 2;
|
|
87
|
-
break;
|
|
88
|
-
case 'int16':
|
|
89
|
-
data.setInt16(byteOffset, element, true);
|
|
90
|
-
byteOffset += 2;
|
|
91
|
-
break;
|
|
92
|
-
case 'float':
|
|
93
|
-
data.setFloat32(byteOffset, element, true);
|
|
94
|
-
byteOffset += 4;
|
|
95
|
-
break;
|
|
96
|
-
case 'double':
|
|
97
|
-
data.setFloat64(byteOffset, element, true);
|
|
98
|
-
byteOffset += 8;
|
|
99
|
-
break;
|
|
100
|
-
case 'string':
|
|
101
|
-
data.setUint16(byteOffset, element.length, true);
|
|
102
|
-
byteOffset += 2;
|
|
103
|
-
for (let i = 0; i < element.length; i++) {
|
|
104
|
-
data.setUint16(byteOffset, element.charCodeAt(i), true);
|
|
105
|
-
byteOffset += 2;
|
|
106
|
-
}
|
|
107
|
-
break;
|
|
108
|
-
}
|
|
109
|
-
});
|
|
110
|
-
if (!this.dataChannelSender.canSend()) {
|
|
111
|
-
Logger.Info(`Data channel cannot send yet, skipping sending message: ${messageType} - ${new Uint8Array(data.buffer)}`);
|
|
112
|
-
return;
|
|
113
|
-
}
|
|
114
|
-
this.dataChannelSender.sendData(data.buffer);
|
|
115
|
-
}
|
|
116
|
-
}
|
|
1
|
+
// Copyright Epic Games, Inc. All Rights Reserved.
|
|
2
|
+
import { Logger } from '@epicgames-ps/lib-pixelstreamingcommon-ue5.5';
|
|
3
|
+
export class SendMessageController {
|
|
4
|
+
/**
|
|
5
|
+
* @param dataChannelSender - Data channel instance
|
|
6
|
+
* @param toStreamerMessagesMapProvider - Stream Messages instance
|
|
7
|
+
*/
|
|
8
|
+
constructor(dataChannelSender, toStreamerMessagesMapProvider) {
|
|
9
|
+
this.dataChannelSender = dataChannelSender;
|
|
10
|
+
this.toStreamerMessagesMapProvider = toStreamerMessagesMapProvider;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Send a message to the streamer through the data channel
|
|
14
|
+
* @param messageType - the type of message we are sending
|
|
15
|
+
* @param messageData - the message data we are sending over the data channel
|
|
16
|
+
* @returns - nil
|
|
17
|
+
*/
|
|
18
|
+
sendMessageToStreamer(messageType, messageData) {
|
|
19
|
+
if (messageData === undefined) {
|
|
20
|
+
messageData = [];
|
|
21
|
+
}
|
|
22
|
+
const toStreamerMessages = this.toStreamerMessagesMapProvider.toStreamerMessages;
|
|
23
|
+
const messageFormat = toStreamerMessages.get(messageType);
|
|
24
|
+
if (messageFormat === undefined) {
|
|
25
|
+
Logger.Error(`Attempted to send a message to the streamer with message type: ${messageType}, but the frontend hasn't been configured to send such a message. Check you've added the message type in your cpp`);
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
if (messageFormat.structure && messageData && messageFormat.structure.length !== messageData.length) {
|
|
29
|
+
Logger.Error(`Provided message data doesn't match expected layout. Expected [ ${messageFormat.structure
|
|
30
|
+
.map((element) => {
|
|
31
|
+
switch (element) {
|
|
32
|
+
case 'uint8':
|
|
33
|
+
case 'uint16':
|
|
34
|
+
case 'int16':
|
|
35
|
+
case 'float':
|
|
36
|
+
case 'double':
|
|
37
|
+
return 'number';
|
|
38
|
+
case 'string':
|
|
39
|
+
return 'string';
|
|
40
|
+
}
|
|
41
|
+
})
|
|
42
|
+
.toString()} ] but received [ ${messageData.map((element) => typeof element).toString()} ]`);
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
let byteLength = 0;
|
|
46
|
+
const textEncoder = new TextEncoder();
|
|
47
|
+
// One loop to calculate the length in bytes of all of the provided data
|
|
48
|
+
messageData.forEach((element, idx) => {
|
|
49
|
+
const type = messageFormat.structure[idx];
|
|
50
|
+
switch (type) {
|
|
51
|
+
case 'uint8':
|
|
52
|
+
byteLength += 1;
|
|
53
|
+
break;
|
|
54
|
+
case 'uint16':
|
|
55
|
+
byteLength += 2;
|
|
56
|
+
break;
|
|
57
|
+
case 'int16':
|
|
58
|
+
byteLength += 2;
|
|
59
|
+
break;
|
|
60
|
+
case 'float':
|
|
61
|
+
byteLength += 4;
|
|
62
|
+
break;
|
|
63
|
+
case 'double':
|
|
64
|
+
byteLength += 8;
|
|
65
|
+
break;
|
|
66
|
+
case 'string':
|
|
67
|
+
// 2 bytes for string length
|
|
68
|
+
byteLength += 2;
|
|
69
|
+
// 2 bytes per characters
|
|
70
|
+
byteLength += 2 * textEncoder.encode(element).length;
|
|
71
|
+
break;
|
|
72
|
+
}
|
|
73
|
+
});
|
|
74
|
+
const data = new DataView(new ArrayBuffer(byteLength + 1));
|
|
75
|
+
data.setUint8(0, messageFormat.id);
|
|
76
|
+
let byteOffset = 1;
|
|
77
|
+
messageData.forEach((element, idx) => {
|
|
78
|
+
const type = messageFormat.structure[idx];
|
|
79
|
+
switch (type) {
|
|
80
|
+
case 'uint8':
|
|
81
|
+
data.setUint8(byteOffset, element);
|
|
82
|
+
byteOffset += 1;
|
|
83
|
+
break;
|
|
84
|
+
case 'uint16':
|
|
85
|
+
data.setUint16(byteOffset, element, true);
|
|
86
|
+
byteOffset += 2;
|
|
87
|
+
break;
|
|
88
|
+
case 'int16':
|
|
89
|
+
data.setInt16(byteOffset, element, true);
|
|
90
|
+
byteOffset += 2;
|
|
91
|
+
break;
|
|
92
|
+
case 'float':
|
|
93
|
+
data.setFloat32(byteOffset, element, true);
|
|
94
|
+
byteOffset += 4;
|
|
95
|
+
break;
|
|
96
|
+
case 'double':
|
|
97
|
+
data.setFloat64(byteOffset, element, true);
|
|
98
|
+
byteOffset += 8;
|
|
99
|
+
break;
|
|
100
|
+
case 'string':
|
|
101
|
+
data.setUint16(byteOffset, element.length, true);
|
|
102
|
+
byteOffset += 2;
|
|
103
|
+
for (let i = 0; i < element.length; i++) {
|
|
104
|
+
data.setUint16(byteOffset, element.charCodeAt(i), true);
|
|
105
|
+
byteOffset += 2;
|
|
106
|
+
}
|
|
107
|
+
break;
|
|
108
|
+
}
|
|
109
|
+
});
|
|
110
|
+
if (!this.dataChannelSender.canSend()) {
|
|
111
|
+
Logger.Info(`Data channel cannot send yet, skipping sending message: ${messageType} - ${new Uint8Array(data.buffer)}`);
|
|
112
|
+
return;
|
|
113
|
+
}
|
|
114
|
+
this.dataChannelSender.sendData(data.buffer);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
117
|
//# sourceMappingURL=SendMessageController.js.map
|