thor-io.vnext 2.0.6 → 3.1.0-beta.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 (178) hide show
  1. package/.gitattributes +17 -17
  2. package/{index.d.ts → build/index.d.ts} +11 -8
  3. package/build/index.js +47 -0
  4. package/build/src/Connection/ClientInfo.d.ts +27 -0
  5. package/{src → build/src}/Connection/ClientInfo.js +7 -0
  6. package/build/src/Connection/Connection.d.ts +117 -0
  7. package/build/src/Connection/Connection.js +202 -0
  8. package/build/src/Connection/IClientInfo.d.ts +20 -0
  9. package/build/src/Controller/ControllerBase.d.ts +134 -0
  10. package/build/src/Controller/ControllerBase.js +543 -0
  11. package/build/src/Controller/Subscription.d.ts +27 -0
  12. package/build/src/Controller/Subscription.js +22 -0
  13. package/build/src/Controllers/BrokerController/Broker.js +145 -0
  14. package/build/src/Controllers/BrokerController/BrokerController.d.ts +61 -0
  15. package/build/src/Controllers/BrokerController/BrokerController.js +115 -0
  16. package/{src/Controllers/BrokerController/Broker.js → build/src/Controllers/BrokerController/BrokerrController.js} +74 -85
  17. package/build/src/Controllers/BrokerController/Models/PeerConnection.d.ts +7 -0
  18. package/build/src/Controllers/BrokerController/Models/PeerConnection.js +14 -0
  19. package/build/src/Controllers/BrokerController/Models/Signal.js +11 -0
  20. package/build/src/Decorators/CanInvoke.d.ts +10 -0
  21. package/build/src/Decorators/CanInvoke.js +22 -0
  22. package/build/src/Decorators/CanSet.d.ts +10 -0
  23. package/build/src/Decorators/CanSet.js +20 -0
  24. package/build/src/Decorators/ControllerProperties.d.ts +10 -0
  25. package/build/src/Decorators/ControllerProperties.js +20 -0
  26. package/build/src/Interfaces/IInterceptor.js +2 -0
  27. package/build/src/Interfaces/ITransport.d.ts +94 -0
  28. package/build/src/Interfaces/ITransportMessage.d.ts +41 -0
  29. package/build/src/Messages/BufferMessage.d.ts +38 -0
  30. package/{src → build/src}/Messages/BufferMessage.js +32 -2
  31. package/build/src/Messages/ErrorMessage.d.ts +29 -0
  32. package/build/src/Messages/ErrorMessage.js +22 -0
  33. package/build/src/Messages/PipeMessage.d.ts +46 -0
  34. package/build/src/Messages/PipeMessage.js +41 -0
  35. package/build/src/Messages/TextMessage.d.ts +88 -0
  36. package/build/src/Messages/TextMessage.js +94 -0
  37. package/build/src/Messages/WebSocketMessage.d.ts +34 -0
  38. package/build/src/Messages/WebSocketMessage.js +41 -0
  39. package/build/src/Plugin.js +32 -0
  40. package/build/src/Server/Plugin.d.ts +37 -0
  41. package/build/src/Server/Plugin.js +32 -0
  42. package/build/src/Server/ThorIOServer.d.ts +68 -0
  43. package/build/src/Server/ThorIOServer.js +131 -0
  44. package/build/src/Subscription.js +22 -0
  45. package/build/src/ThorIO.js +142 -0
  46. package/build/src/ThorIOServer.d.ts +64 -0
  47. package/build/src/ThorIOServer.js +131 -0
  48. package/build/src/Transports/BufferMessageTransport.d.ts +78 -0
  49. package/build/src/Transports/BufferMessageTransport.js +85 -0
  50. package/build/src/Transports/PipeMessageTransport.d.ts +79 -0
  51. package/build/src/Transports/PipeMessageTransport.js +90 -0
  52. package/build/src/Transports/WebSocketMessageTransport.d.ts +87 -0
  53. package/build/src/Transports/WebSocketMessageTransport.js +93 -0
  54. package/build/src/Utils/BufferUtils.d.ts +32 -0
  55. package/build/src/Utils/BufferUtils.js +57 -0
  56. package/build/src/Utils/StringUtils.d.ts +15 -0
  57. package/build/src/Utils/StringUtils.js +31 -0
  58. package/build/src/test.js +5 -0
  59. package/docs/.nojekyll +1 -0
  60. package/docs/assets/hierarchy.js +1 -0
  61. package/docs/assets/highlight.css +43 -0
  62. package/docs/assets/icons.js +18 -0
  63. package/docs/assets/icons.svg +1 -0
  64. package/docs/assets/main.js +60 -0
  65. package/docs/assets/navigation.js +1 -0
  66. package/docs/assets/search.js +1 -0
  67. package/docs/assets/style.css +1610 -0
  68. package/docs/classes/BrokerController.html +164 -0
  69. package/docs/classes/BufferMessage.html +11 -0
  70. package/docs/classes/BufferMessageTransport.html +31 -0
  71. package/docs/classes/BufferUtils.html +16 -0
  72. package/docs/classes/ClientInfo.html +11 -0
  73. package/docs/classes/Connection.html +42 -0
  74. package/docs/classes/ControllerBase.html +144 -0
  75. package/docs/classes/ErrorMessage.html +13 -0
  76. package/docs/classes/PeerConnection.html +4 -0
  77. package/docs/classes/PipeMessage.html +17 -0
  78. package/docs/classes/PipeMessageTransport.html +33 -0
  79. package/docs/classes/Plugin.html +13 -0
  80. package/docs/classes/Signal.html +5 -0
  81. package/docs/classes/StringUtils.html +9 -0
  82. package/docs/classes/Subscription.html +11 -0
  83. package/docs/classes/TextMessage.html +37 -0
  84. package/docs/classes/ThorIOServer.html +25 -0
  85. package/docs/classes/WebSocketMessage.html +18 -0
  86. package/docs/classes/WebSocketMessageTransport.html +35 -0
  87. package/docs/functions/CanInvoke.html +5 -0
  88. package/docs/functions/CanSet.html +5 -0
  89. package/docs/functions/ControllerProperties.html +5 -0
  90. package/docs/hierarchy.html +1 -0
  91. package/docs/index.html +24 -0
  92. package/docs/interfaces/ITransport.html +46 -0
  93. package/docs/interfaces/ITransportMessage.html +21 -0
  94. package/docs/modules.html +1 -0
  95. package/index.ts +32 -35
  96. package/licence +21 -21
  97. package/package.json +48 -49
  98. package/readme.md +32 -71
  99. package/src/Connection/ClientInfo.ts +34 -37
  100. package/src/Connection/Connection.ts +229 -278
  101. package/src/Connection/IClientInfo.ts +22 -0
  102. package/src/Controller/ControllerBase.ts +561 -458
  103. package/src/{Subscription.ts → Controller/Subscription.ts} +32 -34
  104. package/src/Controllers/BrokerController/BrokerController.ts +121 -0
  105. package/src/Controllers/BrokerController/Models/PeerConnection.ts +12 -34
  106. package/src/Controllers/BrokerController/Models/Signal.ts +11 -43
  107. package/src/Decorators/CanInvoke.ts +21 -13
  108. package/src/Decorators/CanSet.ts +19 -12
  109. package/src/Decorators/ControllerProperties.ts +19 -16
  110. package/src/Interfaces/ITransport.ts +107 -23
  111. package/src/Interfaces/ITransportMessage.ts +45 -41
  112. package/src/Messages/BufferMessage.ts +70 -69
  113. package/src/Messages/ErrorMessage.ts +34 -6
  114. package/src/Messages/PipeMessage.ts +56 -62
  115. package/src/Messages/TextMessage.ts +139 -93
  116. package/src/Messages/WebSocketMessage.ts +39 -41
  117. package/src/Server/Plugin.ts +56 -0
  118. package/src/Server/ThorIOServer.ts +121 -0
  119. package/src/ThorIOServer.ts +117 -0
  120. package/src/Transports/BufferMessageTransport.ts +109 -100
  121. package/src/Transports/PipeMessageTransport.ts +112 -104
  122. package/src/Transports/WebSocketMessageTransport.ts +122 -110
  123. package/src/Utils/BufferUtils.ts +55 -61
  124. package/src/Utils/StringUtils.ts +28 -17
  125. package/tsconfig.json +109 -18
  126. package/typedoc.json +6 -0
  127. package/index.js +0 -40
  128. package/src/Connection/ClientInfo.d.ts +0 -6
  129. package/src/Connection/Connection.d.ts +0 -24
  130. package/src/Connection/Connection.js +0 -129
  131. package/src/Controller/ControllerBase.d.ts +0 -43
  132. package/src/Controller/ControllerBase.js +0 -331
  133. package/src/Controllers/BrokerController/Broker.d.ts +0 -21
  134. package/src/Controllers/BrokerController/Broker.ts +0 -153
  135. package/src/Controllers/BrokerController/Models/PeerConnection.d.ts +0 -5
  136. package/src/Controllers/BrokerController/Models/PeerConnection.js +0 -9
  137. package/src/Controllers/BrokerController/Models/Signal.js +0 -10
  138. package/src/Decorators/CanInvoke.d.ts +0 -2
  139. package/src/Decorators/CanInvoke.js +0 -9
  140. package/src/Decorators/CanSet.d.ts +0 -1
  141. package/src/Decorators/CanSet.js +0 -8
  142. package/src/Decorators/ControllerProperties.d.ts +0 -1
  143. package/src/Decorators/ControllerProperties.js +0 -10
  144. package/src/Interfaces/IInterceptor.d.ts +0 -2
  145. package/src/Interfaces/IInterceptor.ts +0 -2
  146. package/src/Interfaces/ITransport.d.ts +0 -18
  147. package/src/Interfaces/ITransportMessage.d.ts +0 -8
  148. package/src/Messages/BufferMessage.d.ts +0 -10
  149. package/src/Messages/ErrorMessage.d.ts +0 -4
  150. package/src/Messages/ErrorMessage.js +0 -8
  151. package/src/Messages/PipeMessage.d.ts +0 -12
  152. package/src/Messages/PipeMessage.js +0 -20
  153. package/src/Messages/TextMessage.d.ts +0 -15
  154. package/src/Messages/TextMessage.js +0 -50
  155. package/src/Messages/WebSocketMessage.d.ts +0 -10
  156. package/src/Messages/WebSocketMessage.js +0 -15
  157. package/src/Plugin.d.ts +0 -6
  158. package/src/Plugin.js +0 -11
  159. package/src/Plugin.ts +0 -37
  160. package/src/Subscription.d.ts +0 -5
  161. package/src/Subscription.js +0 -9
  162. package/src/ThorIO.d.ts +0 -19
  163. package/src/ThorIO.js +0 -67
  164. package/src/ThorIO.ts +0 -153
  165. package/src/Transports/BufferMessageTransport.d.ts +0 -21
  166. package/src/Transports/BufferMessageTransport.js +0 -31
  167. package/src/Transports/PipeMessageTransport.d.ts +0 -20
  168. package/src/Transports/PipeMessageTransport.js +0 -33
  169. package/src/Transports/WebSocketMessageTransport.d.ts +0 -20
  170. package/src/Transports/WebSocketMessageTransport.js +0 -31
  171. package/src/Utils/BufferUtils.d.ts +0 -5
  172. package/src/Utils/BufferUtils.js +0 -29
  173. package/src/Utils/StringUtils.d.ts +0 -4
  174. package/src/Utils/StringUtils.js +0 -13
  175. /package/{src/Interfaces/IInterceptor.js → build/src/Connection/IClientInfo.js} +0 -0
  176. /package/{src → build/src}/Controllers/BrokerController/Models/Signal.d.ts +0 -0
  177. /package/{src → build/src}/Interfaces/ITransport.js +0 -0
  178. /package/{src → build/src}/Interfaces/ITransportMessage.js +0 -0
@@ -1,69 +1,70 @@
1
- import { TextMessage } from './TextMessage';
2
- import { ITransportMessage } from '../Interfaces/ITransportMessage';
3
- /**
4
- *
5
- *
6
- * @export
7
- * @class BufferMessage
8
- * @implements {ITransportMessage}
9
- */
10
- export class BufferMessage implements ITransportMessage {
11
- /**
12
- * Creates an instance of BufferMessage.
13
- *
14
- * @param {Buffer} data
15
- * @param {boolean} binary
16
- *
17
- * @memberOf BufferMessage
18
- */
19
- constructor(public data: Buffer, public binary: boolean) {
20
- }
21
- /**
22
- *
23
- *
24
- * @returns {TextMessage}
25
- *
26
- * @memberOf BufferMessage
27
- */
28
- toMessage(): TextMessage {
29
- const headerLen = 3;
30
- const tLen = this.data.readUInt8(0);
31
- const cLen = this.data.readUInt8(1);
32
- const dLen = this.data.readUInt8(2);
33
- let offset = headerLen;
34
- const topic = this.data.toString("utf-8", offset, tLen + offset);
35
- offset += tLen;
36
- const controller = this.data.toString("utf-8", offset, offset + cLen);
37
- offset += cLen;
38
- const data = this.data.toString("utf-8", offset, offset + dLen);
39
- let message = new TextMessage(topic, data, controller);
40
- return message;
41
- }
42
- /**
43
- *
44
- *
45
- * @returns {Buffer}
46
- *
47
- * @memberOf BufferMessage
48
- */
49
- toBuffer(): Buffer {
50
- let message = JSON.parse(this.data.toString()) as TextMessage;
51
- const header = 3;
52
- let offset = 0;
53
- const tLen = message.T.length;
54
- const dLen = message.D.length;
55
- const cLen = message.C.length;
56
- let bufferSize = header + tLen + dLen + cLen;
57
- let buffer = new Buffer(bufferSize);
58
- buffer.writeUInt8(tLen, 0);
59
- buffer.writeUInt8(cLen, 1);
60
- buffer.writeInt8(dLen, 2);
61
- offset = header;
62
- buffer.write(message.T, offset);
63
- offset += tLen;
64
- buffer.write(message.C, offset);
65
- offset += cLen;
66
- buffer.write(message.D, offset);
67
- return buffer;
68
- }
69
- }
1
+ import { ITransportMessage } from '../Interfaces/ITransportMessage';
2
+ import { TextMessage } from './TextMessage';
3
+
4
+ /**
5
+ *
6
+ *
7
+ * @export
8
+ * @class BufferMessage
9
+ * @implements {ITransportMessage}
10
+ */
11
+ export class BufferMessage implements ITransportMessage {
12
+ /**
13
+ * Creates an instance of BufferMessage.
14
+ *
15
+ * @param {Buffer} data
16
+ * @param {boolean} isBinary
17
+ *
18
+ * @memberOf BufferMessage
19
+ */
20
+ constructor(public data: Buffer, public isBinary: boolean) {
21
+ }
22
+ /**
23
+ *
24
+ *
25
+ * @returns {TextMessage}
26
+ *
27
+ * @memberOf BufferMessage
28
+ */
29
+ toMessage(): TextMessage {
30
+ const headerLen = 3;
31
+ const tLen = this.data.readUInt8(0);
32
+ const cLen = this.data.readUInt8(1);
33
+ const dLen = this.data.readUInt8(2);
34
+ let offset = headerLen;
35
+ const topic = this.data.toString("utf-8", offset, tLen + offset);
36
+ offset += tLen;
37
+ const controller = this.data.toString("utf-8", offset, offset + cLen);
38
+ offset += cLen;
39
+ const data = this.data.toString("utf-8", offset, offset + dLen);
40
+ let message = new TextMessage(topic, data, controller);
41
+ return message;
42
+ }
43
+ /**
44
+ *
45
+ *
46
+ * @returns {Buffer}
47
+ *
48
+ * @memberOf BufferMessage
49
+ */
50
+ toBuffer(): Buffer {
51
+ let message = JSON.parse(this.data.toString()) as TextMessage;
52
+ const header = 3;
53
+ let offset = 0;
54
+ const tLen = message.T.length;
55
+ const dLen = message.D.length;
56
+ const cLen = message.C.length;
57
+ let bufferSize = header + tLen + dLen + cLen;
58
+ let buffer = new Buffer(bufferSize);
59
+ buffer.writeUInt8(tLen, 0);
60
+ buffer.writeUInt8(cLen, 1);
61
+ buffer.writeInt8(dLen, 2);
62
+ offset = header;
63
+ buffer.write(message.T, offset);
64
+ offset += tLen;
65
+ buffer.write(message.C, offset);
66
+ offset += cLen;
67
+ buffer.write(message.D, offset);
68
+ return buffer;
69
+ }
70
+ }
@@ -1,6 +1,34 @@
1
- export class ErrorMessage {
2
- message: string;
3
- constructor(message: string) {
4
- this.message = message;
5
- }
6
- }
1
+ /**
2
+ * Represents an error message with a timestamp.
3
+ *
4
+ * @export
5
+ * @class ErrorMessage
6
+ */
7
+ export class ErrorMessage {
8
+ /**
9
+ * The error message content.
10
+ *
11
+ * @type {string}
12
+ * @memberof ErrorMessage
13
+ */
14
+ public message: string;
15
+
16
+ /**
17
+ * The timestamp when the error message was created.
18
+ *
19
+ * @type {Date}
20
+ * @memberof ErrorMessage
21
+ */
22
+ public timestamp: Date;
23
+
24
+ /**
25
+ * Creates an instance of the ErrorMessage class.
26
+ *
27
+ * @param {string} message The error message content.
28
+ * @memberof ErrorMessage
29
+ */
30
+ constructor(message: string) {
31
+ this.message = message;
32
+ this.timestamp = new Date();
33
+ }
34
+ }
@@ -1,62 +1,56 @@
1
- import { TextMessage } from './TextMessage';
2
- import { ITransportMessage } from '../Interfaces/ITransportMessage';
3
- /**
4
- *
5
- *
6
- * @export
7
- * @class PipeMessage
8
- * @implements {ITransportMessage}
9
- */
10
- export class PipeMessage implements ITransportMessage {
11
- /**
12
- *
13
- *
14
- * @private
15
- * @type {TextMessage}
16
- * @memberOf PipeMessage
17
- */
18
- private message: TextMessage;
19
- /**
20
- *
21
- *
22
- * @private
23
- * @type {Array<string>}
24
- * @memberOf PipeMessage
25
- */
26
- private arr: Array<string>;
27
- /**
28
- * Creates an instance of PipeMessage.
29
- *
30
- * @param {*} data
31
- * @param {boolean} binary
32
- *
33
- * @memberOf PipeMessage
34
- */
35
- constructor(public data: any, public binary: boolean) {
36
- this.message = JSON.parse(this.data) as TextMessage;
37
- this.arr = new Array<string>();
38
- this.arr.push(this.message.C);
39
- this.arr.push(this.message.T);
40
- this.arr.push(this.message.D);
41
- }
42
- /**
43
- *
44
- *
45
- * @returns
46
- *
47
- * @memberOf PipeMessage
48
- */
49
- toBuffer() {
50
- return new Buffer(this.arr.join("|"));
51
- }
52
- /**
53
- *
54
- *
55
- * @returns {TextMessage}
56
- *
57
- * @memberOf PipeMessage
58
- */
59
- public toMessage(): TextMessage {
60
- return this.message;
61
- }
62
- }
1
+ import { ITransportMessage } from '../Interfaces/ITransportMessage';
2
+ import { TextMessage } from './TextMessage';
3
+
4
+ /**
5
+ * Represents a message transported via pipes, encapsulating a `TextMessage`.
6
+ *
7
+ * @export
8
+ * @class PipeMessage
9
+ * @implements {ITransportMessage}
10
+ */
11
+ export class PipeMessage implements ITransportMessage {
12
+ /**
13
+ * The encapsulated `TextMessage` instance.
14
+ *
15
+ * @private
16
+ * @type {TextMessage}
17
+ */
18
+ private message: TextMessage;
19
+
20
+ /**
21
+ * Array representation of the message components for serialization.
22
+ *
23
+ * @private
24
+ * @type {Array<string>}
25
+ */
26
+ private arr: Array<string>;
27
+
28
+ /**
29
+ * Creates an instance of `PipeMessage`.
30
+ *
31
+ * @param {*} data - The raw data representing the message.
32
+ * @param {boolean} isBinary - Indicates if the data is in binary format.
33
+ */
34
+ constructor(public data: any, public isBinary: boolean) {
35
+ this.message = JSON.parse(data) as TextMessage;
36
+ this.arr = [this.message.C, this.message.T, this.message.D];
37
+ }
38
+
39
+ /**
40
+ * Serializes the `PipeMessage` to a `Buffer`.
41
+ *
42
+ * @returns {Buffer} A buffer containing the serialized message data.
43
+ */
44
+ toBuffer(): Buffer {
45
+ return Buffer.from(this.arr.join("|"), 'utf-8');
46
+ }
47
+
48
+ /**
49
+ * Converts the `PipeMessage` back to a `TextMessage` instance.
50
+ *
51
+ * @returns {TextMessage} The encapsulated `TextMessage`.
52
+ */
53
+ public toMessage(): TextMessage {
54
+ return this.message;
55
+ }
56
+ }
@@ -1,93 +1,139 @@
1
- import { BufferUtils } from '../Utils/BufferUtils';
2
- import { Utils } from 'thor-io.client-vnext';
3
- /**
4
- *
5
- *
6
- * @export
7
- * @class Message
8
- */
9
- export class TextMessage {
10
- B: Buffer;
11
- T: string;
12
- D: any;
13
- C: string;
14
- isBinary: Boolean;
15
- I:string;
16
- F: boolean
17
- get JSON(): any {
18
- return {
19
- T: this.T,
20
- D: JSON.stringify(this.D),
21
- C: this.C,
22
- I: this.I,
23
- F: this.F
24
- };
25
- }
26
- ;
27
- /**
28
- * Creates an instance of Message.
29
- *
30
- * @param {string} topic
31
- * @param {string} data
32
- * @param {string} controller
33
- * @param {Buffer} [arrayBuffer]
34
- *
35
- * @memberOf Message
36
- */
37
- constructor(topic: string, data: any, controller: string, arrayBuffer?: Buffer,uuid?:string,isFinal?:boolean) {
38
- this.D = data;
39
- this.T = topic;
40
- this.C = controller;
41
- this.B = arrayBuffer;
42
- this.I = uuid || Utils.newGuid();
43
- this.F = true;
44
- if (arrayBuffer)
45
- this.isBinary = true;
46
- }
47
- /**
48
- *
49
- *
50
- * @returns
51
- *
52
- * @memberOf Message
53
- */
54
- toString() {
55
- return JSON.stringify(this.JSON);
56
- }
57
- /**
58
- *
59
- *
60
- * @static
61
- * @param {Buffer} buffer
62
- * @returns {TextMessage}
63
- *
64
- * @memberOf Message
65
- */
66
- static fromArrayBuffer(buffer: Buffer): TextMessage {
67
- let headerLen = 8;
68
- let header = buffer.slice(0, 8);
69
- let payloadLength = BufferUtils.arrayToLong(header);
70
- let message = buffer.slice(headerLen, payloadLength + headerLen);
71
- let blobOffset = headerLen + payloadLength;
72
- let blob = buffer.slice(blobOffset, buffer.byteLength);
73
- let data = JSON.parse(message.toString()) as TextMessage
74
- return new TextMessage(data.T, data.D, data.C, blob,data.I,data.F);
75
- }
76
- /**
77
- *
78
- *
79
- * @returns {Buffer}
80
- *
81
- * @memberOf Message
82
- */
83
- toArrayBuffer(): Buffer {
84
- let messagePayload = this.toString();
85
- let payloadLength = messagePayload.length;
86
- let header = new Buffer(BufferUtils.longToArray(payloadLength));
87
- let message = new Buffer(payloadLength);
88
- message.write(messagePayload, 0, payloadLength, "utf-8");
89
- var blob = new Buffer(this.B);
90
- var buffer = Buffer.concat([header, message, blob]);
91
- return buffer;
92
- }
93
- }
1
+ import { BufferUtils } from '../Utils/BufferUtils';
2
+ import { StringUtils } from '../Utils/StringUtils';
3
+
4
+ /**
5
+ * Represents a text message with optional binary data.
6
+ *
7
+ * @export
8
+ * @class TextMessage
9
+ */
10
+ export class TextMessage {
11
+ /**
12
+ * Binary data associated with the message (if any).
13
+ *
14
+ * @type {Buffer | undefined}
15
+ */
16
+ B: Buffer | undefined;
17
+
18
+ /**
19
+ * Topic of the message.
20
+ *
21
+ * @type {string}
22
+ */
23
+ T: string;
24
+
25
+ /**
26
+ * Data payload of the message.
27
+ *
28
+ * @type {any}
29
+ */
30
+ D: any;
31
+
32
+ /**
33
+ * Controller of the message.
34
+ *
35
+ * @type {string}
36
+ */
37
+ C: string;
38
+
39
+ /**
40
+ * Indicates whether the message contains binary data.
41
+ *
42
+ * @type {boolean}
43
+ */
44
+ isBinary: boolean = false;
45
+
46
+ /**
47
+ * Unique identifier for the message.
48
+ *
49
+ * @type {string}
50
+ */
51
+ I: string;
52
+
53
+ /**
54
+ * Indicates if this is the final message in a sequence.
55
+ *
56
+ * @type {boolean}
57
+ */
58
+ F: boolean;
59
+
60
+ /**
61
+ * Gets the JSON representation of the message.
62
+ *
63
+ * @readonly
64
+ * @type {any}
65
+ */
66
+ get JSON(): any {
67
+ return {
68
+ T: this.T,
69
+ D: JSON.stringify(this.D),
70
+ C: this.C,
71
+ I: this.I,
72
+ F: this.F,
73
+ };
74
+ }
75
+
76
+ /**
77
+ * Creates an instance of `TextMessage`.
78
+ *
79
+ * @param {string} topic - Topic of the message.
80
+ * @param {any} data - Data payload of the message.
81
+ * @param {string} controller - Controller of the message.
82
+ * @param {Buffer} [arrayBuffer] - Optional binary data.
83
+ * @param {string} [uuid] - Optional unique identifier.
84
+ * @param {boolean} [isFinal] - Indicates if this is the final message in a sequence.
85
+ */
86
+ constructor(topic: string, data: any, controller: string, arrayBuffer?: Buffer, uuid?: string, isFinal?: boolean) {
87
+ this.D = data;
88
+ this.T = topic;
89
+ this.C = controller;
90
+ this.B = arrayBuffer;
91
+ this.I = uuid || StringUtils.newGuid();
92
+ this.F = isFinal ?? true; // Default to true if not provided
93
+
94
+ if (arrayBuffer) {
95
+ this.isBinary = true;
96
+ }
97
+ }
98
+
99
+ /**
100
+ * Returns a string representation of the message.
101
+ *
102
+ * @returns {string} The JSON string representation of the message.
103
+ */
104
+ toString(): string {
105
+ return JSON.stringify(this.JSON);
106
+ }
107
+
108
+ /**
109
+ * Creates a `TextMessage` instance from a `Buffer`.
110
+ *
111
+ * @static
112
+ * @param {Buffer} buffer - The buffer containing the message data.
113
+ * @returns {TextMessage} The parsed `TextMessage` instance.
114
+ */
115
+ static fromArrayBuffer(buffer: Buffer): TextMessage {
116
+ const headerLen = 8;
117
+ const header = buffer.slice(0, headerLen);
118
+ const payloadLength = BufferUtils.arrayToLong(header);
119
+ const message = buffer.slice(headerLen, payloadLength + headerLen);
120
+ const blobOffset = headerLen + payloadLength;
121
+ const blob = buffer.slice(blobOffset, buffer.byteLength);
122
+ const data = JSON.parse(message.toString()) as TextMessage;
123
+ return new TextMessage(data.T, data.D, data.C, blob, data.I, data.F);
124
+ }
125
+
126
+ /**
127
+ * Converts the `TextMessage` to a `Buffer`.
128
+ *
129
+ * @returns {Buffer} The buffer representation of the message.
130
+ */
131
+ toArrayBuffer(): Buffer {
132
+ const messagePayload = this.toString();
133
+ const payloadLength = messagePayload.length;
134
+ const header = Buffer.from(BufferUtils.longToArray(payloadLength));
135
+ const message = Buffer.from(messagePayload, 'utf-8');
136
+ const blob = this.B ? Buffer.from(this.B) : Buffer.alloc(0);
137
+ return Buffer.concat([header, message, blob]);
138
+ }
139
+ }
@@ -1,41 +1,39 @@
1
- import { TextMessage } from './TextMessage';
2
- import { ITransportMessage } from '../Interfaces/ITransportMessage';
3
- /**
4
- *
5
- *
6
- * @export
7
- * @class WebSocketMessage
8
- * @implements {ITransportMessage}
9
- */
10
- export class WebSocketMessage implements ITransportMessage {
11
- /**
12
- * Creates an instance of WebSocketMessage.
13
- *
14
- * @param {string} data
15
- * @param {any} binary
16
- *
17
- * @memberOf WebSocketMessage
18
- */
19
- constructor(public data: string, public binary) {
20
- }
21
- /**
22
- *
23
- *
24
- * @returns {Buffer}
25
- *
26
- * @memberOf WebSocketMessage
27
- */
28
- toBuffer(): Buffer {
29
- throw "not yet implemented";
30
- }
31
- /**
32
- *
33
- *
34
- * @returns {TextMessage}
35
- *
36
- * @memberOf WebSocketMessage
37
- */
38
- toMessage(): TextMessage {
39
- return JSON.parse(this.data) as TextMessage;
40
- }
41
- }
1
+ import { ITransportMessage } from '../Interfaces/ITransportMessage';
2
+ import { TextMessage } from './TextMessage';
3
+
4
+ /**
5
+ * Represents a WebSocket message, encapsulating data and its type (binary or text).
6
+ *
7
+ * @export
8
+ * @class WebSocketMessage
9
+ * @implements {ITransportMessage}
10
+ */
11
+ export class WebSocketMessage implements ITransportMessage {
12
+ /**
13
+ * Creates an instance of `WebSocketMessage`.
14
+ *
15
+ * @param {string} data - The raw message data as a string.
16
+ * @param {boolean} isBinary - Indicates whether the message is binary.
17
+ */
18
+ constructor(public data: string, public isBinary: boolean) {}
19
+
20
+ /**
21
+ * Converts the message to a `Buffer` object.
22
+ * **Note:** This method is not yet implemented.
23
+ *
24
+ * @throws {Error} Throws an error indicating that the method is not implemented.
25
+ * @returns {Buffer}
26
+ */
27
+ toBuffer(): Buffer {
28
+ throw new Error("toBuffer is not yet implemented");
29
+ }
30
+
31
+ /**
32
+ * Parses the raw string data and converts it into a `TextMessage` instance.
33
+ *
34
+ * @returns {TextMessage} The parsed `TextMessage` object.
35
+ */
36
+ toMessage(): TextMessage {
37
+ return JSON.parse(this.data) as TextMessage;
38
+ }
39
+ }
@@ -0,0 +1,56 @@
1
+ import { StringUtils } from '../Utils/StringUtils';
2
+
3
+ /**
4
+ * Describes the structure of a plugin descriptor.
5
+ */
6
+ export interface PluginDescriptor {
7
+ name: string;
8
+ methods: string[];
9
+ properties: string[];
10
+ }
11
+
12
+ /**
13
+ * Represents a plugin with a specific type.
14
+ * @template T The type of the plugin instance.
15
+ */
16
+ export class Plugin<T extends Object> {
17
+ /**
18
+ * The alias of the plugin.
19
+ */
20
+ public alias: string;
21
+
22
+ /**
23
+ * The instance of the plugin.
24
+ * @private
25
+ */
26
+ private instance: T;
27
+
28
+ /**
29
+ * The unique identifier of the plugin.
30
+ */
31
+ id: string;
32
+
33
+ /**
34
+ * Creates an instance of Plugin.
35
+ * @param {T} object The plugin instance.
36
+ */
37
+ constructor(object: T) {
38
+ this.id = StringUtils.newGuid();
39
+ this.alias = Reflect.getMetadata("alias", object);
40
+ this.instance = object;
41
+ const metaData = Reflect.getMetadataKeys(object);
42
+ metaData.forEach(metaDataKey => {
43
+ console.info(`Controller settings ${metaDataKey} = `, Reflect.getOwnMetadata(metaDataKey, object));
44
+ });
45
+ console.info(`Created the plugin with an id of ${this.id}`);
46
+ }
47
+
48
+ /**
49
+ * Gets the instance of the plugin.
50
+ * @returns {T} The plugin instance.
51
+ */
52
+ getInstance(): T {
53
+ return this.instance;
54
+ }
55
+ }
56
+