@yang__yj/pixelstreaming-core 1.0.0 → 1.0.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 (237) hide show
  1. package/.cspell.json +48 -0
  2. package/.eslintignore +8 -0
  3. package/.eslintrc.js +8 -0
  4. package/.prettierignore +0 -0
  5. package/.prettierrc.json +6 -0
  6. package/coverage/clover.xml +3480 -0
  7. package/coverage/coverage-final.json +62 -0
  8. package/coverage/lcov-report/base.css +224 -0
  9. package/coverage/lcov-report/block-navigation.js +87 -0
  10. package/coverage/lcov-report/favicon.png +0 -0
  11. package/coverage/lcov-report/index.html +356 -0
  12. package/coverage/lcov-report/prettify.css +1 -0
  13. package/coverage/lcov-report/prettify.js +2 -0
  14. package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  15. package/coverage/lcov-report/sorter.js +196 -0
  16. package/coverage/lcov-report/src/AFK/AFKController.ts.html +559 -0
  17. package/coverage/lcov-report/src/AFK/index.html +116 -0
  18. package/coverage/lcov-report/src/Config/Config.ts.html +2764 -0
  19. package/coverage/lcov-report/src/Config/SettingBase.ts.html +280 -0
  20. package/coverage/lcov-report/src/Config/SettingFlag.ts.html +382 -0
  21. package/coverage/lcov-report/src/Config/SettingNumber.ts.html +418 -0
  22. package/coverage/lcov-report/src/Config/SettingOption.ts.html +424 -0
  23. package/coverage/lcov-report/src/Config/SettingText.ts.html +331 -0
  24. package/coverage/lcov-report/src/Config/index.html +191 -0
  25. package/coverage/lcov-report/src/DataChannel/DataChannelController.ts.html +499 -0
  26. package/coverage/lcov-report/src/DataChannel/DataChannelSender.ts.html +262 -0
  27. package/coverage/lcov-report/src/DataChannel/InitialSettings.ts.html +268 -0
  28. package/coverage/lcov-report/src/DataChannel/LatencyTestResults.ts.html +313 -0
  29. package/coverage/lcov-report/src/DataChannel/index.html +161 -0
  30. package/coverage/lcov-report/src/FreezeFrame/FreezeFrame.ts.html +427 -0
  31. package/coverage/lcov-report/src/FreezeFrame/FreezeFrameController.ts.html +427 -0
  32. package/coverage/lcov-report/src/FreezeFrame/index.html +131 -0
  33. package/coverage/lcov-report/src/Inputs/FakeTouchController.ts.html +682 -0
  34. package/coverage/lcov-report/src/Inputs/GamepadController.ts.html +985 -0
  35. package/coverage/lcov-report/src/Inputs/HoveringMouseEvents.ts.html +688 -0
  36. package/coverage/lcov-report/src/Inputs/InputClassesFactory.ts.html +505 -0
  37. package/coverage/lcov-report/src/Inputs/KeyboardController.ts.html +1048 -0
  38. package/coverage/lcov-report/src/Inputs/LockedMouseEvents.ts.html +946 -0
  39. package/coverage/lcov-report/src/Inputs/MouseButtons.ts.html +160 -0
  40. package/coverage/lcov-report/src/Inputs/MouseController.ts.html +1171 -0
  41. package/coverage/lcov-report/src/Inputs/SpecialKeyCodes.ts.html +133 -0
  42. package/coverage/lcov-report/src/Inputs/TouchController.ts.html +712 -0
  43. package/coverage/lcov-report/src/Inputs/XRGamepadController.ts.html +463 -0
  44. package/coverage/lcov-report/src/Inputs/index.html +266 -0
  45. package/coverage/lcov-report/src/Logger/Logger.ts.html +325 -0
  46. package/coverage/lcov-report/src/Logger/index.html +116 -0
  47. package/coverage/lcov-report/src/PeerConnectionController/AggregatedStats.ts.html +1018 -0
  48. package/coverage/lcov-report/src/PeerConnectionController/CandidatePairStats.ts.html +136 -0
  49. package/coverage/lcov-report/src/PeerConnectionController/CandidateStat.ts.html +124 -0
  50. package/coverage/lcov-report/src/PeerConnectionController/DataChannelStats.ts.html +136 -0
  51. package/coverage/lcov-report/src/PeerConnectionController/InboundRTPStats.ts.html +547 -0
  52. package/coverage/lcov-report/src/PeerConnectionController/OutBoundRTPStats.ts.html +163 -0
  53. package/coverage/lcov-report/src/PeerConnectionController/PeerConnectionController.ts.html +1795 -0
  54. package/coverage/lcov-report/src/PeerConnectionController/SessionStats.ts.html +115 -0
  55. package/coverage/lcov-report/src/PeerConnectionController/StreamStats.ts.html +118 -0
  56. package/coverage/lcov-report/src/PeerConnectionController/index.html +236 -0
  57. package/coverage/lcov-report/src/PixelStreaming/PixelStreaming.ts.html +2269 -0
  58. package/coverage/lcov-report/src/PixelStreaming/index.html +116 -0
  59. package/coverage/lcov-report/src/UI/OnScreenKeyboard.ts.html +376 -0
  60. package/coverage/lcov-report/src/UI/index.html +116 -0
  61. package/coverage/lcov-report/src/UeInstanceMessage/ResponseController.ts.html +226 -0
  62. package/coverage/lcov-report/src/UeInstanceMessage/SendDescriptorController.ts.html +346 -0
  63. package/coverage/lcov-report/src/UeInstanceMessage/SendMessageController.ts.html +364 -0
  64. package/coverage/lcov-report/src/UeInstanceMessage/StreamMessageController.ts.html +862 -0
  65. package/coverage/lcov-report/src/UeInstanceMessage/ToStreamerMessagesController.ts.html +271 -0
  66. package/coverage/lcov-report/src/UeInstanceMessage/TwoWayMap.ts.html +241 -0
  67. package/coverage/lcov-report/src/UeInstanceMessage/index.html +191 -0
  68. package/coverage/lcov-report/src/Util/CoordinateConverter.ts.html +952 -0
  69. package/coverage/lcov-report/src/Util/EventEmitter.ts.html +1705 -0
  70. package/coverage/lcov-report/src/Util/EventListenerTracker.ts.html +172 -0
  71. package/coverage/lcov-report/src/Util/FileUtil.ts.html +505 -0
  72. package/coverage/lcov-report/src/Util/WebGLUtils.ts.html +232 -0
  73. package/coverage/lcov-report/src/Util/WebXRUtils.ts.html +160 -0
  74. package/coverage/lcov-report/src/Util/index.html +191 -0
  75. package/coverage/lcov-report/src/VideoPlayer/StreamController.ts.html +349 -0
  76. package/coverage/lcov-report/src/VideoPlayer/VideoPlayer.ts.html +799 -0
  77. package/coverage/lcov-report/src/VideoPlayer/index.html +131 -0
  78. package/coverage/lcov-report/src/WebRtcPlayer/WebRtcPlayerController.ts.html +6199 -0
  79. package/coverage/lcov-report/src/WebRtcPlayer/index.html +116 -0
  80. package/coverage/lcov-report/src/WebSockets/MessageReceive.ts.html +352 -0
  81. package/coverage/lcov-report/src/WebSockets/MessageSend.ts.html +604 -0
  82. package/coverage/lcov-report/src/WebSockets/SignallingProtocol.ts.html +622 -0
  83. package/coverage/lcov-report/src/WebSockets/WebSocketController.ts.html +844 -0
  84. package/coverage/lcov-report/src/WebSockets/index.html +161 -0
  85. package/coverage/lcov-report/src/WebXR/WebXRController.ts.html +1042 -0
  86. package/coverage/lcov-report/src/WebXR/index.html +116 -0
  87. package/coverage/lcov-report/src/__test__/index.html +161 -0
  88. package/coverage/lcov-report/src/__test__/mockMediaStream.ts.html +457 -0
  89. package/coverage/lcov-report/src/__test__/mockRTCPeerConnection.ts.html +1126 -0
  90. package/coverage/lcov-report/src/__test__/mockRTCRtpReceiver.ts.html +151 -0
  91. package/coverage/lcov-report/src/__test__/mockWebSocket.ts.html +475 -0
  92. package/coverage/lcov-report/src/index.html +116 -0
  93. package/coverage/lcov-report/src/pixelstreamingfrontend.ts.html +232 -0
  94. package/coverage/lcov.info +6458 -0
  95. package/jest.config.js +18 -0
  96. package/package.json +46 -18
  97. package/readme.md +15 -0
  98. package/src/AFK/AFKController.test.ts +162 -0
  99. package/src/AFK/AFKController.ts +158 -0
  100. package/src/Config/Config.test.ts +222 -0
  101. package/src/Config/Config.ts +909 -0
  102. package/src/Config/SettingBase.ts +65 -0
  103. package/src/Config/SettingFlag.ts +99 -0
  104. package/src/Config/SettingNumber.ts +111 -0
  105. package/src/Config/SettingOption.ts +124 -0
  106. package/src/Config/SettingText.ts +82 -0
  107. package/src/DataChannel/DataChannelController.ts +138 -0
  108. package/src/DataChannel/DataChannelLatencyTestController.ts +129 -0
  109. package/src/DataChannel/DataChannelLatencyTestResults.ts +67 -0
  110. package/src/DataChannel/DataChannelSender.ts +59 -0
  111. package/src/DataChannel/InitialSettings.ts +61 -0
  112. package/src/DataChannel/LatencyTestResults.ts +76 -0
  113. package/src/FreezeFrame/FreezeFrame.ts +114 -0
  114. package/src/FreezeFrame/FreezeFrameController.ts +114 -0
  115. package/src/Inputs/FakeTouchController.ts +199 -0
  116. package/src/Inputs/GamepadController.ts +300 -0
  117. package/src/Inputs/GamepadTypes.ts +10 -0
  118. package/src/Inputs/HoveringMouseEvents.ts +192 -0
  119. package/src/Inputs/IMouseEvents.ts +64 -0
  120. package/src/Inputs/ITouchController.ts +29 -0
  121. package/src/Inputs/InputClassesFactory.ts +140 -0
  122. package/src/Inputs/KeyboardController.ts +318 -0
  123. package/src/Inputs/LockedMouseEvents.ts +287 -0
  124. package/src/Inputs/MouseButtons.ts +25 -0
  125. package/src/Inputs/MouseController.ts +362 -0
  126. package/src/Inputs/SpecialKeyCodes.ts +16 -0
  127. package/src/Inputs/TouchController.ts +253 -0
  128. package/src/Inputs/XRGamepadController.ts +126 -0
  129. package/src/Logger/Logger.ts +80 -0
  130. package/src/PeerConnectionController/AggregatedStats.ts +311 -0
  131. package/src/PeerConnectionController/CandidatePairStats.ts +17 -0
  132. package/src/PeerConnectionController/CandidateStat.ts +13 -0
  133. package/src/PeerConnectionController/CodecStats.ts +19 -0
  134. package/src/PeerConnectionController/DataChannelStats.ts +17 -0
  135. package/src/PeerConnectionController/InboundRTPStats.ts +154 -0
  136. package/src/PeerConnectionController/InboundTrackStats.ts +34 -0
  137. package/src/PeerConnectionController/OutBoundRTPStats.ts +26 -0
  138. package/src/PeerConnectionController/PeerConnectionController.ts +563 -0
  139. package/src/PeerConnectionController/SessionStats.ts +10 -0
  140. package/src/PeerConnectionController/StreamStats.ts +11 -0
  141. package/src/PixelStreaming/PixelStreaming.test.ts +624 -0
  142. package/src/PixelStreaming/PixelStreaming.ts +847 -0
  143. package/src/UI/OnScreenKeyboard.ts +97 -0
  144. package/src/UeInstanceMessage/ResponseController.ts +47 -0
  145. package/src/UeInstanceMessage/SendMessageController.ts +154 -0
  146. package/src/UeInstanceMessage/StreamMessageController.ts +233 -0
  147. package/src/UeInstanceMessage/ToStreamerMessagesController.ts +62 -0
  148. package/src/Util/CoordinateConverter.ts +289 -0
  149. package/src/Util/EventEmitter.ts +595 -0
  150. package/src/Util/EventListenerTracker.ts +29 -0
  151. package/src/Util/FileUtil.ts +140 -0
  152. package/src/Util/RTCUtils.ts +41 -0
  153. package/src/Util/WebGLUtils.ts +49 -0
  154. package/src/Util/WebXRUtils.ts +25 -0
  155. package/src/VideoPlayer/StreamController.ts +89 -0
  156. package/src/VideoPlayer/VideoPlayer.ts +246 -0
  157. package/src/WebRtcPlayer/WebRtcPlayerController.ts +2144 -0
  158. package/src/WebSockets/MessageReceive.ts +89 -0
  159. package/src/WebSockets/MessageSend.ts +185 -0
  160. package/src/WebSockets/SignallingProtocol.ts +180 -0
  161. package/src/WebSockets/WebSocketController.ts +267 -0
  162. package/src/WebXR/WebXRController.ts +319 -0
  163. package/src/__test__/mockMediaStream.ts +124 -0
  164. package/src/__test__/mockRTCPeerConnection.ts +347 -0
  165. package/src/__test__/mockRTCRtpReceiver.ts +22 -0
  166. package/src/__test__/mockWebSocket.ts +130 -0
  167. package/src/pixelstreamingfrontend.ts +50 -0
  168. package/tsconfig.jest.json +8 -0
  169. package/tsconfig.json +24 -0
  170. package/webpack.common.js +35 -0
  171. package/webpack.dev.js +35 -0
  172. package/webpack.prod.js +36 -0
  173. package/yang__yj-pixelstreaming-core-1.0.1.tgz +0 -0
  174. /package/{library/dist → dist}/lib-pixelstreamingfrontend.esm.js +0 -0
  175. /package/{library/dist → dist}/lib-pixelstreamingfrontend.js +0 -0
  176. /package/{library/types → types}/AFK/AFKController.d.ts +0 -0
  177. /package/{library/types → types}/Config/Config.d.ts +0 -0
  178. /package/{library/types → types}/Config/SettingBase.d.ts +0 -0
  179. /package/{library/types → types}/Config/SettingFlag.d.ts +0 -0
  180. /package/{library/types → types}/Config/SettingNumber.d.ts +0 -0
  181. /package/{library/types → types}/Config/SettingOption.d.ts +0 -0
  182. /package/{library/types → types}/Config/SettingText.d.ts +0 -0
  183. /package/{library/types → types}/DataChannel/DataChannelController.d.ts +0 -0
  184. /package/{library/types → types}/DataChannel/DataChannelSender.d.ts +0 -0
  185. /package/{library/types → types}/DataChannel/InitialSettings.d.ts +0 -0
  186. /package/{library/types → types}/DataChannel/LatencyTestResults.d.ts +0 -0
  187. /package/{library/types → types}/FreezeFrame/FreezeFrame.d.ts +0 -0
  188. /package/{library/types → types}/FreezeFrame/FreezeFrameController.d.ts +0 -0
  189. /package/{library/types → types}/Inputs/FakeTouchController.d.ts +0 -0
  190. /package/{library/types → types}/Inputs/GamepadController.d.ts +0 -0
  191. /package/{library/types → types}/Inputs/GamepadTypes.d.ts +0 -0
  192. /package/{library/types → types}/Inputs/HoveringMouseEvents.d.ts +0 -0
  193. /package/{library/types → types}/Inputs/IMouseEvents.d.ts +0 -0
  194. /package/{library/types → types}/Inputs/ITouchController.d.ts +0 -0
  195. /package/{library/types → types}/Inputs/InputClassesFactory.d.ts +0 -0
  196. /package/{library/types → types}/Inputs/KeyboardController.d.ts +0 -0
  197. /package/{library/types → types}/Inputs/LockedMouseEvents.d.ts +0 -0
  198. /package/{library/types → types}/Inputs/MouseButtons.d.ts +0 -0
  199. /package/{library/types → types}/Inputs/MouseController.d.ts +0 -0
  200. /package/{library/types → types}/Inputs/SpecialKeyCodes.d.ts +0 -0
  201. /package/{library/types → types}/Inputs/TouchController.d.ts +0 -0
  202. /package/{library/types → types}/Inputs/XRGamepadController.d.ts +0 -0
  203. /package/{library/types → types}/Logger/Logger.d.ts +0 -0
  204. /package/{library/types → types}/PeerConnectionController/AggregatedStats.d.ts +0 -0
  205. /package/{library/types → types}/PeerConnectionController/CandidatePairStats.d.ts +0 -0
  206. /package/{library/types → types}/PeerConnectionController/CandidateStat.d.ts +0 -0
  207. /package/{library/types → types}/PeerConnectionController/CodecStats.d.ts +0 -0
  208. /package/{library/types → types}/PeerConnectionController/DataChannelStats.d.ts +0 -0
  209. /package/{library/types → types}/PeerConnectionController/InboundRTPStats.d.ts +0 -0
  210. /package/{library/types → types}/PeerConnectionController/InboundTrackStats.d.ts +0 -0
  211. /package/{library/types → types}/PeerConnectionController/OutBoundRTPStats.d.ts +0 -0
  212. /package/{library/types → types}/PeerConnectionController/PeerConnectionController.d.ts +0 -0
  213. /package/{library/types → types}/PeerConnectionController/SessionStats.d.ts +0 -0
  214. /package/{library/types → types}/PeerConnectionController/StreamStats.d.ts +0 -0
  215. /package/{library/types → types}/PixelStreaming/PixelStreaming.d.ts +0 -0
  216. /package/{library/types → types}/UI/OnScreenKeyboard.d.ts +0 -0
  217. /package/{library/types → types}/UeInstanceMessage/ResponseController.d.ts +0 -0
  218. /package/{library/types → types}/UeInstanceMessage/SendDescriptorController.d.ts +0 -0
  219. /package/{library/types → types}/UeInstanceMessage/SendMessageController.d.ts +0 -0
  220. /package/{library/types → types}/UeInstanceMessage/StreamMessageController.d.ts +0 -0
  221. /package/{library/types → types}/UeInstanceMessage/ToStreamerMessagesController.d.ts +0 -0
  222. /package/{library/types → types}/UeInstanceMessage/TwoWayMap.d.ts +0 -0
  223. /package/{library/types → types}/Util/CoordinateConverter.d.ts +0 -0
  224. /package/{library/types → types}/Util/EventEmitter.d.ts +0 -0
  225. /package/{library/types → types}/Util/EventListenerTracker.d.ts +0 -0
  226. /package/{library/types → types}/Util/FileUtil.d.ts +0 -0
  227. /package/{library/types → types}/Util/WebGLUtils.d.ts +0 -0
  228. /package/{library/types → types}/Util/WebXRUtils.d.ts +0 -0
  229. /package/{library/types → types}/VideoPlayer/StreamController.d.ts +0 -0
  230. /package/{library/types → types}/VideoPlayer/VideoPlayer.d.ts +0 -0
  231. /package/{library/types → types}/WebRtcPlayer/WebRtcPlayerController.d.ts +0 -0
  232. /package/{library/types → types}/WebSockets/MessageReceive.d.ts +0 -0
  233. /package/{library/types → types}/WebSockets/MessageSend.d.ts +0 -0
  234. /package/{library/types → types}/WebSockets/SignallingProtocol.d.ts +0 -0
  235. /package/{library/types → types}/WebSockets/WebSocketController.d.ts +0 -0
  236. /package/{library/types → types}/WebXR/WebXRController.d.ts +0 -0
  237. /package/{library/types → types}/pixelstreamingfrontend.d.ts +0 -0
@@ -0,0 +1,89 @@
1
+ // Copyright Epic Games, Inc. All Rights Reserved.
2
+
3
+ /**
4
+ * 将接收到的消息类型
5
+ */
6
+ export enum MessageRecvTypes {
7
+ CONFIG = 'config',
8
+ STREAMER_LIST = 'streamerList',
9
+ PLAYER_COUNT = 'playerCount',
10
+ OFFER = 'offer',
11
+ ANSWER = 'answer',
12
+ ICE_CANDIDATE = 'iceCandidate',
13
+ PEER_DATA_CHANNELS = 'peerDataChannels',
14
+ PING = 'ping',
15
+ WARNING = 'warning'
16
+ }
17
+
18
+ /**
19
+ * 具体的接收消息包装器
20
+ */
21
+ export class MessageRecv {
22
+ type: string;
23
+ id: string;
24
+ }
25
+
26
+ /**
27
+ * 身份验证所需的消息包装器
28
+ */
29
+ export class MessageAuthRequired extends MessageRecv { }
30
+
31
+ /**
32
+ * 配置消息包装器
33
+ */
34
+ export class MessageConfig extends MessageRecv {
35
+ peerConnectionOptions: RTCConfiguration;
36
+ }
37
+
38
+ /**
39
+ * Streamer列表消息包装器
40
+ */
41
+ export class MessageStreamerList extends MessageRecv {
42
+ ids: string[];
43
+ }
44
+
45
+ /**
46
+ * 玩家计数消息包装器
47
+ */
48
+ export class MessagePlayerCount extends MessageRecv {
49
+ count: number;
50
+ }
51
+
52
+ /**
53
+ * Web RTC提供应答消息包装器
54
+ */
55
+ export class MessageAnswer extends MessageRecv {
56
+ sdp: string;
57
+ }
58
+
59
+ /**
60
+ * WebRTC sdp提供了消息包装器。
61
+ */
62
+ export class MessageOffer extends MessageRecv {
63
+ sdp: string;
64
+ sfu?: boolean;
65
+ defaultToHover?: string;
66
+ }
67
+
68
+ /**
69
+ * Ice候选消息包装器
70
+ */
71
+ export class MessageIceCandidate extends MessageRecv {
72
+ candidate: RTCIceCandidateInit;
73
+ }
74
+
75
+ /**
76
+ * 对等数据通道消息包装器
77
+ */
78
+ export class MessagePeerDataChannels extends MessageRecv {
79
+ recvStreamId: number;
80
+ sendStreamId: number;
81
+ type: string;
82
+ }
83
+
84
+ export class MessageOnScreenKeyboard {
85
+ command: string;
86
+ showOnScreenKeyboard: boolean;
87
+ x: number;
88
+ y: number;
89
+ }
@@ -0,0 +1,185 @@
1
+ // Copyright Epic Games, Inc. All Rights Reserved.
2
+
3
+ import { Logger } from '../Logger/Logger';
4
+
5
+ /**
6
+ * 从发信服务器推送的发送类型
7
+ */
8
+ export enum MessageSendTypes {
9
+ LIST_STREAMERS = 'listStreamers',
10
+ SUBSCRIBE = 'subscribe',
11
+ UNSUBSCRIBE = 'unsubscribe',
12
+ ICE_CANDIDATE = 'iceCandidate',
13
+ OFFER = 'offer',
14
+ ANSWER = 'answer',
15
+ DATACHANNELREQUEST = 'dataChannelRequest',
16
+ SFURECVDATACHANNELREADY = 'peerDataChannelsReady',
17
+ PONG = 'pong'
18
+ }
19
+
20
+ /**
21
+ * 要发送到发信服务器的消息的包装器
22
+ */
23
+ export class MessageSend implements Send {
24
+ type: string;
25
+ peerConnectionOptions: object;
26
+
27
+ /**
28
+ * 将包装器转换为JSON字符串
29
+ * @returns——要发送的消息的JSON字符串
30
+ */
31
+ payload() {
32
+ Logger.Log(
33
+ Logger.GetStackTrace(),
34
+ 'Sending => \n' + JSON.stringify(this, undefined, 4),
35
+ 6
36
+ );
37
+ return JSON.stringify(this);
38
+ }
39
+ }
40
+
41
+ export interface Send {
42
+ /**
43
+ *将包装器转换为JSON字符串
44
+ * @returns——要发送的消息的JSON字符串
45
+ */
46
+ payload: () => string;
47
+ }
48
+
49
+ export class MessageListStreamers extends MessageSend {
50
+ // streamerName: string;
51
+ constructor() {
52
+ super();
53
+ this.type = MessageSendTypes.LIST_STREAMERS;
54
+ // this.streamerName = 'ProjTestBP52';
55
+ }
56
+ }
57
+
58
+ export class requestStreamerObject extends MessageSend {
59
+ streamerName: string;
60
+
61
+ constructor(streamerid: string) {
62
+ super();
63
+ this.type = MessageSendTypes.LIST_STREAMERS;
64
+ this.streamerName = streamerid;
65
+ }
66
+ }
67
+
68
+ export class MessageSubscribe extends MessageSend {
69
+ streamerId: string;
70
+
71
+ constructor(streamerid: string) {
72
+ super();
73
+ this.type = MessageSendTypes.SUBSCRIBE;
74
+ this.streamerId = streamerid;
75
+ }
76
+ }
77
+
78
+ export class MessageUnsubscribe extends MessageSend {
79
+ constructor() {
80
+ super();
81
+ this.type = MessageSendTypes.UNSUBSCRIBE;
82
+ }
83
+ }
84
+
85
+ /**
86
+ * 实例请求消息包装器
87
+ */
88
+ export class MessagePong extends MessageSend {
89
+ time: number;
90
+
91
+ constructor(time: number) {
92
+ super();
93
+ this.type = MessageSendTypes.PONG;
94
+ this.time = time;
95
+ }
96
+ }
97
+
98
+ /**
99
+ * Web RTC提供消息包装器
100
+ */
101
+ export class MessageWebRTCOffer extends MessageSend {
102
+ sdp: string;
103
+
104
+ /**
105
+ * @param offer - Generated Web RTC Offer
106
+ */
107
+ constructor(offer?: RTCSessionDescriptionInit) {
108
+ super();
109
+ this.type = MessageSendTypes.OFFER;
110
+
111
+ if (offer) {
112
+ this.type = offer.type as MessageSendTypes;
113
+ this.sdp = offer.sdp;
114
+ }
115
+ }
116
+ }
117
+
118
+ /**
119
+ * Web RTC应答消息包装器
120
+ */
121
+ export class MessageWebRTCAnswer extends MessageSend {
122
+ sdp: string;
123
+
124
+ /**
125
+ * @param answer - Generated Web RTC Offer
126
+ */
127
+ constructor(answer?: RTCSessionDescriptionInit) {
128
+ super();
129
+ this.type = MessageSendTypes.ANSWER;
130
+
131
+ if (answer) {
132
+ this.type = answer.type as MessageSendTypes;
133
+ this.sdp = answer.sdp;
134
+ }
135
+ }
136
+ }
137
+
138
+ /**
139
+ * Web RTC Data channel request message wrapper
140
+ */
141
+ export class MessageWebRTCDatachannelRequest extends MessageSend {
142
+ constructor() {
143
+ super();
144
+ this.type = MessageSendTypes.DATACHANNELREQUEST;
145
+ }
146
+ }
147
+
148
+ /**
149
+ * Web RTC SFU Data channel ready message wrapper
150
+ */
151
+ export class MessageSFURecvDataChannelReady extends MessageSend {
152
+ constructor() {
153
+ super();
154
+ this.type = MessageSendTypes.SFURECVDATACHANNELREADY;
155
+ }
156
+ }
157
+
158
+ /**
159
+ * RTC Ice Candidate Wrapper
160
+ */
161
+ export class MessageIceCandidate implements Send {
162
+ candidate: RTCIceCandidate;
163
+ type: MessageSendTypes;
164
+
165
+ /**
166
+ * @param candidate - RTC Ice Candidate
167
+ */
168
+ constructor(candidate: RTCIceCandidate) {
169
+ this.type = MessageSendTypes.ICE_CANDIDATE;
170
+ this.candidate = candidate;
171
+ }
172
+
173
+ /**
174
+ * Turns the wrapper into a JSON String
175
+ * @returns - JSON String of the Message to send
176
+ */
177
+ payload() {
178
+ Logger.Log(
179
+ Logger.GetStackTrace(),
180
+ 'Sending => \n' + JSON.stringify(this, undefined, 4),
181
+ 6
182
+ );
183
+ return JSON.stringify(this);
184
+ }
185
+ }
@@ -0,0 +1,180 @@
1
+ // Copyright Epic Games, Inc. All Rights Reserved.
2
+
3
+ import { Logger } from '../Logger/Logger';
4
+ import { WebSocketController } from './WebSocketController';
5
+ import {
6
+ MessageRecvTypes,
7
+ MessageConfig,
8
+ MessageStreamerList,
9
+ MessagePlayerCount,
10
+ MessageAnswer,
11
+ MessageOffer,
12
+ MessageIceCandidate,
13
+ MessagePeerDataChannels
14
+ } from './MessageReceive';
15
+ import { MessagePong } from './MessageSend';
16
+
17
+ /**
18
+ * 信令协议,用于处理来自信令服务器的消息。
19
+ */
20
+ export class SignallingProtocol {
21
+ private FromUEMessageHandlers: Map<string, (payload: string) => void>;
22
+
23
+ constructor() {
24
+ this.FromUEMessageHandlers = new Map<
25
+ string,
26
+ (payload: string) => void
27
+ >();
28
+ }
29
+
30
+ addMessageHandler(
31
+ messageId: string,
32
+ messageHandler: (payload: string) => void
33
+ ) {
34
+ this.FromUEMessageHandlers.set(messageId, messageHandler);
35
+ }
36
+
37
+ handleMessage(messageId: string, messageData: string) {
38
+ if (this.FromUEMessageHandlers.has(messageId)) {
39
+ this.FromUEMessageHandlers.get(messageId)(messageData);
40
+ } else {
41
+ Logger.Error(
42
+ Logger.GetStackTrace(),
43
+ `Message type of ${messageId} does not have a message handler registered on the frontend - ignoring message.`
44
+ );
45
+ }
46
+ }
47
+
48
+ /**
49
+ * 设置任何默认的信号消息处理,这些可以被覆盖或使用`addMessageHandler`添加额外的处理程序。
50
+ * @param websocketController 设置这些处理程序的控制器。
51
+ */
52
+ static setupDefaultHandlers(websocketController: WebSocketController) {
53
+ // PING
54
+ websocketController.signallingProtocol.addMessageHandler(
55
+ MessageRecvTypes.PING,
56
+ (pingPayload: string) => {
57
+ // send our pong payload back to the signalling server
58
+ const pongPayload = new MessagePong(
59
+ new Date().getTime()
60
+ ).payload();
61
+ Logger.Log(
62
+ Logger.GetStackTrace(),
63
+ MessageRecvTypes.PING + ': ' + pingPayload,
64
+ 6
65
+ );
66
+ websocketController.webSocket.send(pongPayload);
67
+ }
68
+ );
69
+
70
+ // CONFIG
71
+ websocketController.signallingProtocol.addMessageHandler(
72
+ MessageRecvTypes.CONFIG,
73
+ (configPayload: string) => {
74
+ Logger.Log(Logger.GetStackTrace(), MessageRecvTypes.CONFIG, 6);
75
+ const config: MessageConfig = JSON.parse(configPayload);
76
+ websocketController.onConfig(config);
77
+ }
78
+ );
79
+
80
+ // STREAMER_LIST
81
+ websocketController.signallingProtocol.addMessageHandler(
82
+ MessageRecvTypes.STREAMER_LIST,
83
+ (listPayload: string) => {
84
+ Logger.Log(
85
+ Logger.GetStackTrace(),
86
+ MessageRecvTypes.STREAMER_LIST,
87
+ 6
88
+ );
89
+ const streamerList: MessageStreamerList =
90
+ JSON.parse(listPayload);
91
+ websocketController.onStreamerList(streamerList);
92
+ }
93
+ );
94
+
95
+ // PLAYER_COUNT
96
+ websocketController.signallingProtocol.addMessageHandler(
97
+ MessageRecvTypes.PLAYER_COUNT,
98
+ (playerCountPayload: string) => {
99
+ Logger.Log(
100
+ Logger.GetStackTrace(),
101
+ MessageRecvTypes.PLAYER_COUNT,
102
+ 6
103
+ );
104
+ const playerCount: MessagePlayerCount =
105
+ JSON.parse(playerCountPayload);
106
+ Logger.Log(
107
+ Logger.GetStackTrace(),
108
+ 'Player Count: ' + playerCount.count,
109
+ 6
110
+ );
111
+ websocketController.onPlayerCount(playerCount)
112
+ }
113
+ );
114
+
115
+ // ANSWER
116
+ websocketController.signallingProtocol.addMessageHandler(
117
+ MessageRecvTypes.ANSWER,
118
+ (answerPayload: string) => {
119
+ // send our pong payload back to the signalling server
120
+ Logger.Log(Logger.GetStackTrace(), MessageRecvTypes.ANSWER, 6);
121
+ const answer: MessageAnswer = JSON.parse(answerPayload);
122
+ websocketController.onWebRtcAnswer(answer);
123
+ }
124
+ );
125
+
126
+ // OFFER
127
+ websocketController.signallingProtocol.addMessageHandler(
128
+ MessageRecvTypes.OFFER,
129
+ (offerPayload: string) => {
130
+ // send our pong payload back to the signalling server
131
+ Logger.Log(Logger.GetStackTrace(), MessageRecvTypes.OFFER, 6);
132
+ const offer: MessageOffer = JSON.parse(offerPayload);
133
+ websocketController.onWebRtcOffer(offer);
134
+ }
135
+ );
136
+
137
+ // ICE CANDIDATE
138
+ websocketController.signallingProtocol.addMessageHandler(
139
+ MessageRecvTypes.ICE_CANDIDATE,
140
+ (iceCandidatePayload: string) => {
141
+ // send our pong payload back to the signalling server
142
+ Logger.Log(
143
+ Logger.GetStackTrace(),
144
+ MessageRecvTypes.ICE_CANDIDATE,
145
+ 6
146
+ );
147
+ const iceCandidate: MessageIceCandidate =
148
+ JSON.parse(iceCandidatePayload);
149
+ websocketController.onIceCandidate(iceCandidate.candidate);
150
+ }
151
+ );
152
+
153
+ // WARNING
154
+ websocketController.signallingProtocol.addMessageHandler(
155
+ MessageRecvTypes.WARNING,
156
+ (warningPayload: string) => {
157
+ Logger.Warning(
158
+ Logger.GetStackTrace(),
159
+ `Warning received: ${warningPayload}`
160
+ );
161
+ }
162
+ );
163
+
164
+ // PEER DATA CHANNELS
165
+ websocketController.signallingProtocol.addMessageHandler(
166
+ MessageRecvTypes.PEER_DATA_CHANNELS,
167
+ (peerDataChannelsPayload: string) => {
168
+ Logger.Log(
169
+ Logger.GetStackTrace(),
170
+ MessageRecvTypes.PEER_DATA_CHANNELS,
171
+ 6
172
+ );
173
+ const peerDataChannels: MessagePeerDataChannels = JSON.parse(
174
+ peerDataChannelsPayload
175
+ );
176
+ websocketController.onWebRtcPeerDataChannels(peerDataChannels);
177
+ }
178
+ );
179
+ }
180
+ }