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.
- package/.gitattributes +17 -17
- package/{index.d.ts → build/index.d.ts} +11 -8
- package/build/index.js +47 -0
- package/build/src/Connection/ClientInfo.d.ts +27 -0
- package/{src → build/src}/Connection/ClientInfo.js +7 -0
- package/build/src/Connection/Connection.d.ts +117 -0
- package/build/src/Connection/Connection.js +202 -0
- package/build/src/Connection/IClientInfo.d.ts +20 -0
- package/build/src/Controller/ControllerBase.d.ts +134 -0
- package/build/src/Controller/ControllerBase.js +543 -0
- package/build/src/Controller/Subscription.d.ts +27 -0
- package/build/src/Controller/Subscription.js +22 -0
- package/build/src/Controllers/BrokerController/Broker.js +145 -0
- package/build/src/Controllers/BrokerController/BrokerController.d.ts +61 -0
- package/build/src/Controllers/BrokerController/BrokerController.js +115 -0
- package/{src/Controllers/BrokerController/Broker.js → build/src/Controllers/BrokerController/BrokerrController.js} +74 -85
- package/build/src/Controllers/BrokerController/Models/PeerConnection.d.ts +7 -0
- package/build/src/Controllers/BrokerController/Models/PeerConnection.js +14 -0
- package/build/src/Controllers/BrokerController/Models/Signal.js +11 -0
- package/build/src/Decorators/CanInvoke.d.ts +10 -0
- package/build/src/Decorators/CanInvoke.js +22 -0
- package/build/src/Decorators/CanSet.d.ts +10 -0
- package/build/src/Decorators/CanSet.js +20 -0
- package/build/src/Decorators/ControllerProperties.d.ts +10 -0
- package/build/src/Decorators/ControllerProperties.js +20 -0
- package/build/src/Interfaces/IInterceptor.js +2 -0
- package/build/src/Interfaces/ITransport.d.ts +94 -0
- package/build/src/Interfaces/ITransportMessage.d.ts +41 -0
- package/build/src/Messages/BufferMessage.d.ts +38 -0
- package/{src → build/src}/Messages/BufferMessage.js +32 -2
- package/build/src/Messages/ErrorMessage.d.ts +29 -0
- package/build/src/Messages/ErrorMessage.js +22 -0
- package/build/src/Messages/PipeMessage.d.ts +46 -0
- package/build/src/Messages/PipeMessage.js +41 -0
- package/build/src/Messages/TextMessage.d.ts +88 -0
- package/build/src/Messages/TextMessage.js +94 -0
- package/build/src/Messages/WebSocketMessage.d.ts +34 -0
- package/build/src/Messages/WebSocketMessage.js +41 -0
- package/build/src/Plugin.js +32 -0
- package/build/src/Server/Plugin.d.ts +37 -0
- package/build/src/Server/Plugin.js +32 -0
- package/build/src/Server/ThorIOServer.d.ts +68 -0
- package/build/src/Server/ThorIOServer.js +131 -0
- package/build/src/Subscription.js +22 -0
- package/build/src/ThorIO.js +142 -0
- package/build/src/ThorIOServer.d.ts +64 -0
- package/build/src/ThorIOServer.js +131 -0
- package/build/src/Transports/BufferMessageTransport.d.ts +78 -0
- package/build/src/Transports/BufferMessageTransport.js +85 -0
- package/build/src/Transports/PipeMessageTransport.d.ts +79 -0
- package/build/src/Transports/PipeMessageTransport.js +90 -0
- package/build/src/Transports/WebSocketMessageTransport.d.ts +87 -0
- package/build/src/Transports/WebSocketMessageTransport.js +93 -0
- package/build/src/Utils/BufferUtils.d.ts +32 -0
- package/build/src/Utils/BufferUtils.js +57 -0
- package/build/src/Utils/StringUtils.d.ts +15 -0
- package/build/src/Utils/StringUtils.js +31 -0
- package/build/src/test.js +5 -0
- package/docs/.nojekyll +1 -0
- package/docs/assets/hierarchy.js +1 -0
- package/docs/assets/highlight.css +43 -0
- package/docs/assets/icons.js +18 -0
- package/docs/assets/icons.svg +1 -0
- package/docs/assets/main.js +60 -0
- package/docs/assets/navigation.js +1 -0
- package/docs/assets/search.js +1 -0
- package/docs/assets/style.css +1610 -0
- package/docs/classes/BrokerController.html +164 -0
- package/docs/classes/BufferMessage.html +11 -0
- package/docs/classes/BufferMessageTransport.html +31 -0
- package/docs/classes/BufferUtils.html +16 -0
- package/docs/classes/ClientInfo.html +11 -0
- package/docs/classes/Connection.html +42 -0
- package/docs/classes/ControllerBase.html +144 -0
- package/docs/classes/ErrorMessage.html +13 -0
- package/docs/classes/PeerConnection.html +4 -0
- package/docs/classes/PipeMessage.html +17 -0
- package/docs/classes/PipeMessageTransport.html +33 -0
- package/docs/classes/Plugin.html +13 -0
- package/docs/classes/Signal.html +5 -0
- package/docs/classes/StringUtils.html +9 -0
- package/docs/classes/Subscription.html +11 -0
- package/docs/classes/TextMessage.html +37 -0
- package/docs/classes/ThorIOServer.html +25 -0
- package/docs/classes/WebSocketMessage.html +18 -0
- package/docs/classes/WebSocketMessageTransport.html +35 -0
- package/docs/functions/CanInvoke.html +5 -0
- package/docs/functions/CanSet.html +5 -0
- package/docs/functions/ControllerProperties.html +5 -0
- package/docs/hierarchy.html +1 -0
- package/docs/index.html +24 -0
- package/docs/interfaces/ITransport.html +46 -0
- package/docs/interfaces/ITransportMessage.html +21 -0
- package/docs/modules.html +1 -0
- package/index.ts +32 -35
- package/licence +21 -21
- package/package.json +48 -49
- package/readme.md +32 -71
- package/src/Connection/ClientInfo.ts +34 -37
- package/src/Connection/Connection.ts +229 -278
- package/src/Connection/IClientInfo.ts +22 -0
- package/src/Controller/ControllerBase.ts +561 -458
- package/src/{Subscription.ts → Controller/Subscription.ts} +32 -34
- package/src/Controllers/BrokerController/BrokerController.ts +121 -0
- package/src/Controllers/BrokerController/Models/PeerConnection.ts +12 -34
- package/src/Controllers/BrokerController/Models/Signal.ts +11 -43
- package/src/Decorators/CanInvoke.ts +21 -13
- package/src/Decorators/CanSet.ts +19 -12
- package/src/Decorators/ControllerProperties.ts +19 -16
- package/src/Interfaces/ITransport.ts +107 -23
- package/src/Interfaces/ITransportMessage.ts +45 -41
- package/src/Messages/BufferMessage.ts +70 -69
- package/src/Messages/ErrorMessage.ts +34 -6
- package/src/Messages/PipeMessage.ts +56 -62
- package/src/Messages/TextMessage.ts +139 -93
- package/src/Messages/WebSocketMessage.ts +39 -41
- package/src/Server/Plugin.ts +56 -0
- package/src/Server/ThorIOServer.ts +121 -0
- package/src/ThorIOServer.ts +117 -0
- package/src/Transports/BufferMessageTransport.ts +109 -100
- package/src/Transports/PipeMessageTransport.ts +112 -104
- package/src/Transports/WebSocketMessageTransport.ts +122 -110
- package/src/Utils/BufferUtils.ts +55 -61
- package/src/Utils/StringUtils.ts +28 -17
- package/tsconfig.json +109 -18
- package/typedoc.json +6 -0
- package/index.js +0 -40
- package/src/Connection/ClientInfo.d.ts +0 -6
- package/src/Connection/Connection.d.ts +0 -24
- package/src/Connection/Connection.js +0 -129
- package/src/Controller/ControllerBase.d.ts +0 -43
- package/src/Controller/ControllerBase.js +0 -331
- package/src/Controllers/BrokerController/Broker.d.ts +0 -21
- package/src/Controllers/BrokerController/Broker.ts +0 -153
- package/src/Controllers/BrokerController/Models/PeerConnection.d.ts +0 -5
- package/src/Controllers/BrokerController/Models/PeerConnection.js +0 -9
- package/src/Controllers/BrokerController/Models/Signal.js +0 -10
- package/src/Decorators/CanInvoke.d.ts +0 -2
- package/src/Decorators/CanInvoke.js +0 -9
- package/src/Decorators/CanSet.d.ts +0 -1
- package/src/Decorators/CanSet.js +0 -8
- package/src/Decorators/ControllerProperties.d.ts +0 -1
- package/src/Decorators/ControllerProperties.js +0 -10
- package/src/Interfaces/IInterceptor.d.ts +0 -2
- package/src/Interfaces/IInterceptor.ts +0 -2
- package/src/Interfaces/ITransport.d.ts +0 -18
- package/src/Interfaces/ITransportMessage.d.ts +0 -8
- package/src/Messages/BufferMessage.d.ts +0 -10
- package/src/Messages/ErrorMessage.d.ts +0 -4
- package/src/Messages/ErrorMessage.js +0 -8
- package/src/Messages/PipeMessage.d.ts +0 -12
- package/src/Messages/PipeMessage.js +0 -20
- package/src/Messages/TextMessage.d.ts +0 -15
- package/src/Messages/TextMessage.js +0 -50
- package/src/Messages/WebSocketMessage.d.ts +0 -10
- package/src/Messages/WebSocketMessage.js +0 -15
- package/src/Plugin.d.ts +0 -6
- package/src/Plugin.js +0 -11
- package/src/Plugin.ts +0 -37
- package/src/Subscription.d.ts +0 -5
- package/src/Subscription.js +0 -9
- package/src/ThorIO.d.ts +0 -19
- package/src/ThorIO.js +0 -67
- package/src/ThorIO.ts +0 -153
- package/src/Transports/BufferMessageTransport.d.ts +0 -21
- package/src/Transports/BufferMessageTransport.js +0 -31
- package/src/Transports/PipeMessageTransport.d.ts +0 -20
- package/src/Transports/PipeMessageTransport.js +0 -33
- package/src/Transports/WebSocketMessageTransport.d.ts +0 -20
- package/src/Transports/WebSocketMessageTransport.js +0 -31
- package/src/Utils/BufferUtils.d.ts +0 -5
- package/src/Utils/BufferUtils.js +0 -29
- package/src/Utils/StringUtils.d.ts +0 -4
- package/src/Utils/StringUtils.js +0 -13
- /package/{src/Interfaces/IInterceptor.js → build/src/Connection/IClientInfo.js} +0 -0
- /package/{src → build/src}/Controllers/BrokerController/Models/Signal.d.ts +0 -0
- /package/{src → build/src}/Interfaces/ITransport.js +0 -0
- /package/{src → build/src}/Interfaces/ITransportMessage.js +0 -0
|
@@ -1,69 +1,70 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
* @
|
|
8
|
-
* @
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
* @param {
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
*
|
|
24
|
-
*
|
|
25
|
-
*
|
|
26
|
-
*
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
const
|
|
31
|
-
const
|
|
32
|
-
const
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
offset
|
|
36
|
-
|
|
37
|
-
offset
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
*
|
|
45
|
-
*
|
|
46
|
-
*
|
|
47
|
-
*
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
const
|
|
55
|
-
const
|
|
56
|
-
|
|
57
|
-
let
|
|
58
|
-
buffer
|
|
59
|
-
buffer.writeUInt8(
|
|
60
|
-
buffer.
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
offset
|
|
64
|
-
|
|
65
|
-
offset
|
|
66
|
-
|
|
67
|
-
|
|
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
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
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 {
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
* @
|
|
8
|
-
* @
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
* @
|
|
16
|
-
* @
|
|
17
|
-
*/
|
|
18
|
-
private message: TextMessage;
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
*
|
|
22
|
-
*
|
|
23
|
-
* @
|
|
24
|
-
* @
|
|
25
|
-
*/
|
|
26
|
-
private arr: Array<string>;
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
*
|
|
30
|
-
*
|
|
31
|
-
* @param {
|
|
32
|
-
*
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
this.
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
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 {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
* @
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
*
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
*
|
|
34
|
-
*
|
|
35
|
-
* @
|
|
36
|
-
*/
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
*
|
|
49
|
-
*
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
*
|
|
62
|
-
*
|
|
63
|
-
*
|
|
64
|
-
* @
|
|
65
|
-
*/
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
/**
|
|
77
|
-
*
|
|
78
|
-
*
|
|
79
|
-
* @
|
|
80
|
-
*
|
|
81
|
-
* @
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
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 {
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
* @
|
|
8
|
-
* @
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
* @param {
|
|
16
|
-
*
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
*
|
|
23
|
-
*
|
|
24
|
-
* @
|
|
25
|
-
*
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
/**
|
|
32
|
-
*
|
|
33
|
-
*
|
|
34
|
-
* @returns {TextMessage}
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
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
|
+
|