@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.
Files changed (169) hide show
  1. package/dist/commonjs/AFK/AFKController.js +109 -109
  2. package/dist/commonjs/Config/Config.js +559 -559
  3. package/dist/commonjs/Config/SettingBase.js +98 -98
  4. package/dist/commonjs/Config/SettingFlag.js +49 -49
  5. package/dist/commonjs/Config/SettingNumber.js +83 -83
  6. package/dist/commonjs/Config/SettingOption.js +84 -84
  7. package/dist/commonjs/Config/SettingText.js +42 -42
  8. package/dist/commonjs/DataChannel/DataChannelController.js +106 -106
  9. package/dist/commonjs/DataChannel/DataChannelLatencyTestController.js +94 -94
  10. package/dist/commonjs/DataChannel/DataChannelLatencyTestResults.js +18 -18
  11. package/dist/commonjs/DataChannel/DataChannelSender.js +43 -43
  12. package/dist/commonjs/DataChannel/InitialSettings.js +41 -41
  13. package/dist/commonjs/DataChannel/LatencyTestResults.js +60 -60
  14. package/dist/commonjs/FreezeFrame/FreezeFrame.js +93 -93
  15. package/dist/commonjs/FreezeFrame/FreezeFrameController.js +95 -95
  16. package/dist/commonjs/Inputs/GamepadController.js +188 -188
  17. package/dist/commonjs/Inputs/GamepadTypes.js +21 -21
  18. package/dist/commonjs/Inputs/IInputController.js +2 -2
  19. package/dist/commonjs/Inputs/InputClassesFactory.js +96 -96
  20. package/dist/commonjs/Inputs/KeyCodes.js +112 -112
  21. package/dist/commonjs/Inputs/KeyboardController.js +137 -137
  22. package/dist/commonjs/Inputs/MouseButtons.js +28 -28
  23. package/dist/commonjs/Inputs/MouseController.js +97 -97
  24. package/dist/commonjs/Inputs/MouseControllerHovering.js +93 -93
  25. package/dist/commonjs/Inputs/MouseControllerLocked.js +153 -153
  26. package/dist/commonjs/Inputs/SpecialKeyCodes.js +19 -19
  27. package/dist/commonjs/Inputs/TouchController.js +123 -123
  28. package/dist/commonjs/Inputs/TouchControllerFake.js +91 -91
  29. package/dist/commonjs/Inputs/XRGamepadController.js +124 -124
  30. package/dist/commonjs/PeerConnectionController/AggregatedStats.js +252 -252
  31. package/dist/commonjs/PeerConnectionController/CandidatePairStats.js +10 -10
  32. package/dist/commonjs/PeerConnectionController/CandidateStat.js +10 -10
  33. package/dist/commonjs/PeerConnectionController/CodecStats.js +10 -10
  34. package/dist/commonjs/PeerConnectionController/DataChannelStats.js +10 -10
  35. package/dist/commonjs/PeerConnectionController/InboundRTPStats.js +22 -22
  36. package/dist/commonjs/PeerConnectionController/InboundTrackStats.js +10 -10
  37. package/dist/commonjs/PeerConnectionController/OutBoundRTPStats.js +16 -16
  38. package/dist/commonjs/PeerConnectionController/PeerConnectionController.js +584 -584
  39. package/dist/commonjs/PeerConnectionController/SessionStats.js +10 -10
  40. package/dist/commonjs/PeerConnectionController/StreamStats.js +10 -10
  41. package/dist/commonjs/PixelStreaming/PixelStreaming.js +607 -607
  42. package/dist/commonjs/UI/OnScreenKeyboard.js +82 -82
  43. package/dist/commonjs/UeInstanceMessage/ResponseController.js +38 -38
  44. package/dist/commonjs/UeInstanceMessage/SendMessageController.js +120 -120
  45. package/dist/commonjs/UeInstanceMessage/StreamMessageController.js +210 -210
  46. package/dist/commonjs/UeInstanceMessage/ToStreamerMessagesController.js +49 -49
  47. package/dist/commonjs/Util/EventEmitter.js +386 -386
  48. package/dist/commonjs/Util/FileUtil.js +108 -108
  49. package/dist/commonjs/Util/IURLSearchParams.js +25 -25
  50. package/dist/commonjs/Util/InputCoordTranslator.js +49 -49
  51. package/dist/commonjs/Util/RTCUtils.js +40 -40
  52. package/dist/commonjs/VideoPlayer/StreamController.js +67 -67
  53. package/dist/commonjs/VideoPlayer/VideoPlayer.js +177 -177
  54. package/dist/commonjs/WebRtcPlayer/WebRtcPlayerController.js +1221 -1221
  55. package/dist/commonjs/WebXR/WebXRController.js +335 -335
  56. package/dist/commonjs/pixelstreamingfrontend.js +70 -70
  57. package/dist/esm/AFK/AFKController.js +105 -105
  58. package/dist/esm/Config/Config.js +551 -551
  59. package/dist/esm/Config/SettingBase.js +94 -94
  60. package/dist/esm/Config/SettingFlag.js +45 -45
  61. package/dist/esm/Config/SettingNumber.js +79 -79
  62. package/dist/esm/Config/SettingOption.js +80 -80
  63. package/dist/esm/Config/SettingText.js +38 -38
  64. package/dist/esm/DataChannel/DataChannelController.js +102 -102
  65. package/dist/esm/DataChannel/DataChannelLatencyTestController.js +90 -90
  66. package/dist/esm/DataChannel/DataChannelLatencyTestResults.js +14 -14
  67. package/dist/esm/DataChannel/DataChannelSender.js +39 -39
  68. package/dist/esm/DataChannel/InitialSettings.js +34 -34
  69. package/dist/esm/DataChannel/LatencyTestResults.js +56 -56
  70. package/dist/esm/FreezeFrame/FreezeFrame.js +89 -89
  71. package/dist/esm/FreezeFrame/FreezeFrameController.js +91 -91
  72. package/dist/esm/Inputs/GamepadController.js +184 -184
  73. package/dist/esm/Inputs/GamepadTypes.js +17 -17
  74. package/dist/esm/Inputs/IInputController.js +1 -1
  75. package/dist/esm/Inputs/InputClassesFactory.js +91 -91
  76. package/dist/esm/Inputs/KeyCodes.js +109 -109
  77. package/dist/esm/Inputs/KeyboardController.js +133 -133
  78. package/dist/esm/Inputs/MouseButtons.js +23 -23
  79. package/dist/esm/Inputs/MouseController.js +93 -93
  80. package/dist/esm/Inputs/MouseControllerHovering.js +89 -89
  81. package/dist/esm/Inputs/MouseControllerLocked.js +149 -149
  82. package/dist/esm/Inputs/SpecialKeyCodes.js +15 -15
  83. package/dist/esm/Inputs/TouchController.js +119 -119
  84. package/dist/esm/Inputs/TouchControllerFake.js +87 -87
  85. package/dist/esm/Inputs/XRGamepadController.js +120 -120
  86. package/dist/esm/PeerConnectionController/AggregatedStats.js +248 -248
  87. package/dist/esm/PeerConnectionController/CandidatePairStats.js +6 -6
  88. package/dist/esm/PeerConnectionController/CandidateStat.js +6 -6
  89. package/dist/esm/PeerConnectionController/CodecStats.js +6 -6
  90. package/dist/esm/PeerConnectionController/DataChannelStats.js +6 -6
  91. package/dist/esm/PeerConnectionController/InboundRTPStats.js +16 -16
  92. package/dist/esm/PeerConnectionController/InboundTrackStats.js +6 -6
  93. package/dist/esm/PeerConnectionController/OutBoundRTPStats.js +11 -11
  94. package/dist/esm/PeerConnectionController/PeerConnectionController.js +580 -580
  95. package/dist/esm/PeerConnectionController/SessionStats.js +6 -6
  96. package/dist/esm/PeerConnectionController/StreamStats.js +6 -6
  97. package/dist/esm/PixelStreaming/PixelStreaming.js +603 -603
  98. package/dist/esm/UI/OnScreenKeyboard.js +78 -78
  99. package/dist/esm/UeInstanceMessage/ResponseController.js +34 -34
  100. package/dist/esm/UeInstanceMessage/SendMessageController.js +116 -116
  101. package/dist/esm/UeInstanceMessage/StreamMessageController.js +205 -205
  102. package/dist/esm/UeInstanceMessage/ToStreamerMessagesController.js +45 -45
  103. package/dist/esm/Util/EventEmitter.js +345 -345
  104. package/dist/esm/Util/FileUtil.js +103 -103
  105. package/dist/esm/Util/IURLSearchParams.js +21 -21
  106. package/dist/esm/Util/InputCoordTranslator.js +45 -45
  107. package/dist/esm/Util/RTCUtils.js +36 -36
  108. package/dist/esm/VideoPlayer/StreamController.js +63 -63
  109. package/dist/esm/VideoPlayer/VideoPlayer.js +173 -173
  110. package/dist/esm/WebRtcPlayer/WebRtcPlayerController.js +1217 -1217
  111. package/dist/esm/WebXR/WebXRController.js +331 -331
  112. package/dist/esm/pixelstreamingfrontend.js +24 -24
  113. package/dist/types/AFK/AFKController.d.ts +38 -38
  114. package/dist/types/Config/Config.d.ts +220 -220
  115. package/dist/types/Config/SettingBase.d.ts +43 -43
  116. package/dist/types/Config/SettingFlag.d.ts +24 -24
  117. package/dist/types/Config/SettingNumber.d.ts +41 -41
  118. package/dist/types/Config/SettingOption.d.ts +41 -41
  119. package/dist/types/Config/SettingText.d.ts +21 -21
  120. package/dist/types/DataChannel/DataChannelController.d.ts +59 -59
  121. package/dist/types/DataChannel/DataChannelLatencyTestController.d.ts +25 -25
  122. package/dist/types/DataChannel/DataChannelLatencyTestResults.d.ts +46 -46
  123. package/dist/types/DataChannel/DataChannelSender.d.ts +21 -21
  124. package/dist/types/DataChannel/InitialSettings.d.ts +44 -44
  125. package/dist/types/DataChannel/LatencyTestResults.d.ts +31 -31
  126. package/dist/types/FreezeFrame/FreezeFrame.d.ts +36 -36
  127. package/dist/types/FreezeFrame/FreezeFrameController.d.ts +37 -37
  128. package/dist/types/Inputs/GamepadController.d.ts +61 -61
  129. package/dist/types/Inputs/GamepadTypes.d.ts +15 -15
  130. package/dist/types/Inputs/IInputController.d.ts +16 -16
  131. package/dist/types/Inputs/InputClassesFactory.d.ts +53 -53
  132. package/dist/types/Inputs/KeyCodes.d.ts +5 -5
  133. package/dist/types/Inputs/KeyboardController.d.ts +34 -34
  134. package/dist/types/Inputs/MouseButtons.d.ts +22 -22
  135. package/dist/types/Inputs/MouseController.d.ts +40 -40
  136. package/dist/types/Inputs/MouseControllerHovering.d.ts +26 -26
  137. package/dist/types/Inputs/MouseControllerLocked.d.ts +31 -31
  138. package/dist/types/Inputs/SpecialKeyCodes.d.ts +14 -14
  139. package/dist/types/Inputs/TouchController.d.ts +28 -28
  140. package/dist/types/Inputs/TouchControllerFake.d.ts +29 -29
  141. package/dist/types/Inputs/XRGamepadController.d.ts +15 -15
  142. package/dist/types/PeerConnectionController/AggregatedStats.d.ts +82 -82
  143. package/dist/types/PeerConnectionController/CandidatePairStats.d.ts +22 -22
  144. package/dist/types/PeerConnectionController/CandidateStat.d.ts +13 -13
  145. package/dist/types/PeerConnectionController/CodecStats.d.ts +14 -14
  146. package/dist/types/PeerConnectionController/DataChannelStats.d.ts +15 -15
  147. package/dist/types/PeerConnectionController/InboundRTPStats.d.ts +141 -141
  148. package/dist/types/PeerConnectionController/InboundTrackStats.d.ts +32 -32
  149. package/dist/types/PeerConnectionController/OutBoundRTPStats.d.ts +23 -23
  150. package/dist/types/PeerConnectionController/PeerConnectionController.d.ts +143 -143
  151. package/dist/types/PeerConnectionController/SessionStats.d.ts +8 -8
  152. package/dist/types/PeerConnectionController/StreamStats.d.ts +9 -9
  153. package/dist/types/PixelStreaming/PixelStreaming.d.ts +271 -271
  154. package/dist/types/UI/OnScreenKeyboard.d.ts +30 -30
  155. package/dist/types/UeInstanceMessage/ResponseController.d.ts +19 -19
  156. package/dist/types/UeInstanceMessage/SendMessageController.d.ts +18 -18
  157. package/dist/types/UeInstanceMessage/StreamMessageController.d.ts +29 -29
  158. package/dist/types/UeInstanceMessage/ToStreamerMessagesController.d.ts +32 -32
  159. package/dist/types/Util/EventEmitter.d.ts +429 -429
  160. package/dist/types/Util/FileUtil.d.ts +32 -32
  161. package/dist/types/Util/IURLSearchParams.d.ts +9 -9
  162. package/dist/types/Util/InputCoordTranslator.d.ts +29 -29
  163. package/dist/types/Util/RTCUtils.d.ts +8 -8
  164. package/dist/types/VideoPlayer/StreamController.d.ts +22 -22
  165. package/dist/types/VideoPlayer/VideoPlayer.d.ts +78 -78
  166. package/dist/types/WebRtcPlayer/WebRtcPlayerController.d.ts +379 -379
  167. package/dist/types/WebXR/WebXRController.d.ts +42 -42
  168. package/dist/types/pixelstreamingfrontend.d.ts +23 -23
  169. 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