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