@things-factory/integration-base 8.0.88 → 8.0.90
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/dist-server/engine/connector/socket-server.js +12 -2
- package/dist-server/engine/connector/socket-server.js.map +1 -1
- package/dist-server/engine/task/echo-send-hex.d.ts +1 -0
- package/dist-server/engine/task/echo-send-hex.js +24 -0
- package/dist-server/engine/task/echo-send-hex.js.map +1 -0
- package/dist-server/engine/task/index.d.ts +1 -0
- package/dist-server/engine/task/index.js +1 -0
- package/dist-server/engine/task/index.js.map +1 -1
- package/dist-server/engine/task/socket-listener.js +27 -9
- package/dist-server/engine/task/socket-listener.js.map +1 -1
- package/dist-server/tsconfig.tsbuildinfo +1 -1
- package/package.json +2 -2
- package/server/engine/connector/socket-server.ts +16 -2
- package/server/engine/task/echo-send-hex.ts +32 -0
- package/server/engine/task/index.ts +1 -0
- package/server/engine/task/socket-listener.ts +28 -9
|
@@ -14,22 +14,32 @@ class SocketServer {
|
|
|
14
14
|
async connect(config) {
|
|
15
15
|
var em = new events_1.EventEmitter();
|
|
16
16
|
var [host = '0.0.0.0', port = 8124] = config.endpoint.split(':');
|
|
17
|
+
var clientIPs = new Set();
|
|
17
18
|
return new Promise((resolve, reject) => {
|
|
18
19
|
var server = net_1.default.createServer(tcp => {
|
|
20
|
+
const remoteIP = `${tcp.remoteAddress}:${tcp.remotePort}`;
|
|
21
|
+
clientIPs.add(remoteIP);
|
|
19
22
|
connection_manager_1.ConnectionManager.logger.info('Client connection: ');
|
|
20
23
|
connection_manager_1.ConnectionManager.logger.info(' local = %s:%s', tcp.localAddress, tcp.localPort);
|
|
21
24
|
connection_manager_1.ConnectionManager.logger.info(' remote = %s:%s', tcp.remoteAddress, tcp.remotePort);
|
|
25
|
+
console.log(`[socket-server] ${config.name} clients: ${clientIPs.size}\n${[...clientIPs].sort().map(ip => ` - ${ip}`).join('\n')}`);
|
|
22
26
|
tcp.on('data', (data) => {
|
|
23
27
|
em['__tcp__'] = tcp;
|
|
24
28
|
var message = data.toString();
|
|
25
29
|
message = message.replace('SB#', '');
|
|
26
30
|
message = message.replace(/(\r\n|\n|\r)/gm, '');
|
|
27
|
-
|
|
31
|
+
// IP 정보를 함께 전달한다
|
|
32
|
+
em.emit('socket-message-arrive', message, tcp.remoteAddress);
|
|
28
33
|
connection_manager_1.ConnectionManager.logger.info(`socket ${message}`);
|
|
29
34
|
tcp.write('ok');
|
|
30
35
|
});
|
|
31
|
-
tcp.on('
|
|
36
|
+
tcp.on('close', hadError => {
|
|
32
37
|
connection_manager_1.ConnectionManager.logger.info('Client disconnected');
|
|
38
|
+
if (hadError) {
|
|
39
|
+
connection_manager_1.ConnectionManager.logger.info('Client disconnected with error: ' + hadError);
|
|
40
|
+
}
|
|
41
|
+
clientIPs.delete(remoteIP);
|
|
42
|
+
console.log(`[socket-server] ${config.name} clients: ${clientIPs.size}\n${[...clientIPs].sort().map(ip => ` - ${ip}`).join('\n')}`);
|
|
33
43
|
});
|
|
34
44
|
tcp.on('error', ex => {
|
|
35
45
|
connection_manager_1.ConnectionManager.logger.info('Server socket error: ');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"socket-server.js","sourceRoot":"","sources":["../../../server/engine/connector/socket-server.ts"],"names":[],"mappings":";;;;AAAA,sDAAqB;AACrB,mCAAqC;AAGrC,8DAAyD;AAGzD,MAAa,YAAY;IACvB,cAAc;IAEd,KAAK,CAAC,KAAK,CAAC,iBAAoC;QAC9C,MAAM,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAA;QACtD,sCAAiB,CAAC,MAAM,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAA;IAC3D,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,MAAuB;QACnC,IAAI,EAAE,GAAG,IAAI,qBAAY,EAAE,CAAA;QAC3B,IAAI,CAAC,IAAI,GAAG,SAAS,EAAE,IAAI,GAAG,IAAI,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;QAChE,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACrC,IAAI,MAAM,GAAG,aAAG,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE;gBAClC,sCAAiB,CAAC,MAAM,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAA;gBACpD,sCAAiB,CAAC,MAAM,CAAC,IAAI,CAAC,kBAAkB,EAAE,GAAG,CAAC,YAAY,EAAE,GAAG,CAAC,SAAS,CAAC,CAAA;gBAClF,sCAAiB,CAAC,MAAM,CAAC,IAAI,CAAC,mBAAmB,EAAE,GAAG,CAAC,aAAa,EAAE,GAAG,CAAC,UAAU,CAAC,CAAA;gBACrF,GAAG,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAS,EAAE,EAAE;oBAC3B,EAAE,CAAC,SAAS,CAAC,GAAG,GAAG,CAAA;oBACnB,IAAI,OAAO,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAA;oBAC7B,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAA;oBACpC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,gBAAgB,EAAE,EAAE,CAAC,CAAA;oBAC/C,EAAE,CAAC,IAAI,CAAC,uBAAuB,EAAE,OAAO,CAAC,CAAA;
|
|
1
|
+
{"version":3,"file":"socket-server.js","sourceRoot":"","sources":["../../../server/engine/connector/socket-server.ts"],"names":[],"mappings":"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","sourcesContent":["import net from 'net'\nimport { EventEmitter } from 'events'\n\nimport { Connector } from '../types'\nimport { ConnectionManager } from '../connection-manager'\nimport { InputConnection } from '../../service/connection/connection-type'\n\nexport class SocketServer implements Connector {\n // socket: any\n\n async ready(connectionConfigs: InputConnection[]) {\n await Promise.all(connectionConfigs.map(this.connect))\n ConnectionManager.logger.info('socket servers are ready')\n }\n\n async connect(config: InputConnection): Promise<void> {\n var em = new EventEmitter()\n var [host = '0.0.0.0', port = 8124] = config.endpoint.split(':')\n var clientIPs = new Set<string>()\n return new Promise((resolve, reject) => {\n var server = net.createServer(tcp => {\n const remoteIP = `${tcp.remoteAddress}:${tcp.remotePort}`\n clientIPs.add(remoteIP)\n ConnectionManager.logger.info('Client connection: ')\n ConnectionManager.logger.info(' local = %s:%s', tcp.localAddress, tcp.localPort)\n ConnectionManager.logger.info(' remote = %s:%s', tcp.remoteAddress, tcp.remotePort)\n console.log(\n `[socket-server] ${config.name} clients: ${clientIPs.size}\\n${[...clientIPs].sort().map(ip => ` - ${ip}`).join('\\n')}`\n )\n tcp.on('data', (data: any) => {\n em['__tcp__'] = tcp\n var message = data.toString()\n message = message.replace('SB#', '')\n message = message.replace(/(\\r\\n|\\n|\\r)/gm, '')\n // IP 정보를 함께 전달한다\n em.emit('socket-message-arrive', message, tcp.remoteAddress)\n ConnectionManager.logger.info(`socket ${message}`)\n tcp.write('ok')\n })\n\n tcp.on('close', hadError => {\n ConnectionManager.logger.info('Client disconnected')\n if (hadError) {\n ConnectionManager.logger.info('Client disconnected with error: ' + hadError)\n }\n clientIPs.delete(remoteIP)\n console.log(\n `[socket-server] ${config.name} clients: ${clientIPs.size}\\n${[...clientIPs].sort().map(ip => ` - ${ip}`).join('\\n')}`\n )\n })\n\n tcp.on('error', ex => {\n ConnectionManager.logger.info('Server socket error: ')\n var logger = ConnectionManager.logger\n let message = ex.stack ? ex.stack : ex\n let msg = typeof message == 'object' ? JSON.stringify(message, null, 2) : message\n logger.error(msg, ex)\n reject(ex)\n })\n })\n\n server.listen(port, async () => {\n ConnectionManager.logger.info(`tcp echo server listening on ${host}:${port}`)\n\n /* default client connection */\n try {\n em['__server__'] = server\n ConnectionManager.addConnectionInstance(config, em)\n ConnectionManager.logger.info(`socket server connection(${config.name}:${config.endpoint}) is connected`)\n\n resolve()\n } catch (err) {\n ConnectionManager.logger.error(err)\n reject(err)\n }\n })\n })\n }\n\n async disconnect(connection: InputConnection) {\n let em = ConnectionManager.removeConnectionInstance(connection)\n var tcp = em['__tcp__']\n var server = em['__server__']\n\n tcp && (await tcp.destroy())\n server && (await server.close())\n\n ConnectionManager.logger.info(`socket server connection(${connection.name}) is disconnected`)\n }\n\n get parameterSpec() {\n return []\n }\n\n get taskPrefixes() {\n return ['socket']\n }\n}\n\nConnectionManager.registerConnector('socket-server', new SocketServer())\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const task_registry_1 = require("../task-registry");
|
|
4
|
+
const connection_manager_1 = require("../connection-manager");
|
|
5
|
+
async function EchoSendHex(step, { logger, domain }) {
|
|
6
|
+
var { connection: connectionName, params: { message } } = step;
|
|
7
|
+
var connection = connection_manager_1.ConnectionManager.getConnectionInstanceByName(domain, connectionName);
|
|
8
|
+
if (!connection) {
|
|
9
|
+
throw Error(`connection is not found : ${connectionName}`);
|
|
10
|
+
}
|
|
11
|
+
var data = await connection.write(Buffer.from(message, 'hex'));
|
|
12
|
+
return {
|
|
13
|
+
data
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
EchoSendHex.parameterSpec = [
|
|
17
|
+
{
|
|
18
|
+
type: 'string',
|
|
19
|
+
name: 'message',
|
|
20
|
+
label: 'message (hex)'
|
|
21
|
+
}
|
|
22
|
+
];
|
|
23
|
+
task_registry_1.TaskRegistry.registerTaskHandler('echo-send-hex', EchoSendHex);
|
|
24
|
+
//# sourceMappingURL=echo-send-hex.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"echo-send-hex.js","sourceRoot":"","sources":["../../../server/engine/task/echo-send-hex.ts"],"names":[],"mappings":";;AAAA,oDAA+C;AAC/C,8DAAyD;AAIzD,KAAK,UAAU,WAAW,CAAC,IAAe,EAAE,EAAE,MAAM,EAAE,MAAM,EAAW;IACrE,IAAI,EACF,UAAU,EAAE,cAAc,EAC1B,MAAM,EAAE,EAAE,OAAO,EAAE,EACpB,GAAG,IAAI,CAAA;IAER,IAAI,UAAU,GAAG,sCAAiB,CAAC,2BAA2B,CAAC,MAAM,EAAE,cAAc,CAAC,CAAA;IACtF,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,MAAM,KAAK,CAAC,6BAA6B,cAAc,EAAE,CAAC,CAAA;IAC5D,CAAC;IAED,IAAI,IAAI,GAAG,MAAM,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAA;IAE9D,OAAO;QACL,IAAI;KACL,CAAA;AACH,CAAC;AAED,WAAW,CAAC,aAAa,GAAG;IAC1B;QACE,IAAI,EAAE,QAAQ;QACd,IAAI,EAAE,SAAS;QACf,KAAK,EAAE,eAAe;KACvB;CACF,CAAA;AAED,4BAAY,CAAC,mBAAmB,CAAC,eAAe,EAAE,WAAW,CAAC,CAAA","sourcesContent":["import { TaskRegistry } from '../task-registry'\nimport { ConnectionManager } from '../connection-manager'\nimport { InputStep } from '../../service/step/step-type'\nimport { Context } from '../types'\n\nasync function EchoSendHex(step: InputStep, { logger, domain }: Context) {\n var {\n connection: connectionName,\n params: { message }\n } = step\n\n var connection = ConnectionManager.getConnectionInstanceByName(domain, connectionName)\n if (!connection) {\n throw Error(`connection is not found : ${connectionName}`)\n }\n\n var data = await connection.write(Buffer.from(message, 'hex'))\n\n return {\n data\n }\n}\n\nEchoSendHex.parameterSpec = [\n {\n type: 'string',\n name: 'message',\n label: 'message (hex)'\n }\n]\n\nTaskRegistry.registerTaskHandler('echo-send-hex', EchoSendHex)\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../server/engine/task/index.ts"],"names":[],"mappings":";;AAAA,uBAAoB;AACpB,0BAAuB;AACvB,mBAAgB;AAChB,iBAAc;AACd,qBAAkB;AAClB,sBAAmB;AACnB,uBAAoB;AACpB,2BAAwB;AACxB,4BAAyB;AACzB,iCAA8B;AAC9B,kCAA+B;AAC/B,0BAAuB;AACvB,2BAAwB;AACxB,8BAA2B;AAC3B,mCAAgC;AAChC,iCAA8B;AAC9B,yBAAsB;AACtB,kBAAe;AACf,iBAAc;AACd,yBAAsB;AACtB,+BAA4B;AAC5B,6BAA0B;AAC1B,mCAAgC;AAChC,wBAAqB;AACrB,8BAA2B;AAC3B,oBAAiB;AACjB,4BAAyB;AACzB,4BAAyB;AACzB,0BAAuB;AACvB,mBAAgB;AAChB,uBAAoB;AACpB,4BAAyB;AACzB,6BAA0B;AAC1B,oBAAiB;AACjB,0BAAuB;AACvB,yBAAsB;AACtB,2BAAwB;AACxB,4BAAyB;AACzB,wBAAqB;AACrB,6BAA0B;AAC1B,8BAA2B;AAC3B,qBAAkB;AAClB,wBAAqB;AACrB,yBAAsB;AACtB,8BAA2B","sourcesContent":["import './echo-send'\nimport './echo-receive'\nimport './sleep'\nimport './log'\nimport './publish'\nimport './http-get'\nimport './http-post'\nimport './graphql-query'\nimport './graphql-mutate'\nimport './local-graphql-query'\nimport './local-graphql-mutate'\nimport './sub-scenario'\nimport './stop-scenario'\nimport './book-up-scenario'\nimport './pick-pending-scenario'\nimport './reset-pending-queue'\nimport './empty-check'\nimport './goto'\nimport './end'\nimport './switch-goto'\nimport './switch-range-goto'\nimport './switch-scenario'\nimport './switch-range-scenario'\nimport './switch-set'\nimport './switch-range-set'\nimport './script'\nimport './database-query'\nimport './mqtt-subscribe'\nimport './mqtt-publish'\nimport './throw'\nimport './variables'\nimport './floating-point'\nimport './socket-listener'\nimport './random'\nimport './csv-readline'\nimport './data-mapper'\nimport './headless-post'\nimport './headless-scrap'\nimport './set-domain'\nimport './mssql-procedure'\nimport './oracle-procedure'\nimport './jsonata'\nimport './state-read'\nimport './state-write'\nimport './state-group-read'\n"]}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../server/engine/task/index.ts"],"names":[],"mappings":";;AAAA,uBAAoB;AACpB,2BAAwB;AACxB,0BAAuB;AACvB,mBAAgB;AAChB,iBAAc;AACd,qBAAkB;AAClB,sBAAmB;AACnB,uBAAoB;AACpB,2BAAwB;AACxB,4BAAyB;AACzB,iCAA8B;AAC9B,kCAA+B;AAC/B,0BAAuB;AACvB,2BAAwB;AACxB,8BAA2B;AAC3B,mCAAgC;AAChC,iCAA8B;AAC9B,yBAAsB;AACtB,kBAAe;AACf,iBAAc;AACd,yBAAsB;AACtB,+BAA4B;AAC5B,6BAA0B;AAC1B,mCAAgC;AAChC,wBAAqB;AACrB,8BAA2B;AAC3B,oBAAiB;AACjB,4BAAyB;AACzB,4BAAyB;AACzB,0BAAuB;AACvB,mBAAgB;AAChB,uBAAoB;AACpB,4BAAyB;AACzB,6BAA0B;AAC1B,oBAAiB;AACjB,0BAAuB;AACvB,yBAAsB;AACtB,2BAAwB;AACxB,4BAAyB;AACzB,wBAAqB;AACrB,6BAA0B;AAC1B,8BAA2B;AAC3B,qBAAkB;AAClB,wBAAqB;AACrB,yBAAsB;AACtB,8BAA2B","sourcesContent":["import './echo-send'\nimport './echo-send-hex'\nimport './echo-receive'\nimport './sleep'\nimport './log'\nimport './publish'\nimport './http-get'\nimport './http-post'\nimport './graphql-query'\nimport './graphql-mutate'\nimport './local-graphql-query'\nimport './local-graphql-mutate'\nimport './sub-scenario'\nimport './stop-scenario'\nimport './book-up-scenario'\nimport './pick-pending-scenario'\nimport './reset-pending-queue'\nimport './empty-check'\nimport './goto'\nimport './end'\nimport './switch-goto'\nimport './switch-range-goto'\nimport './switch-scenario'\nimport './switch-range-scenario'\nimport './switch-set'\nimport './switch-range-set'\nimport './script'\nimport './database-query'\nimport './mqtt-subscribe'\nimport './mqtt-publish'\nimport './throw'\nimport './variables'\nimport './floating-point'\nimport './socket-listener'\nimport './random'\nimport './csv-readline'\nimport './data-mapper'\nimport './headless-post'\nimport './headless-scrap'\nimport './set-domain'\nimport './mssql-procedure'\nimport './oracle-procedure'\nimport './jsonata'\nimport './state-read'\nimport './state-write'\nimport './state-group-read'\n"]}
|
|
@@ -3,19 +3,29 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
const utils_1 = require("@things-factory/utils");
|
|
4
4
|
const task_registry_1 = require("../task-registry");
|
|
5
5
|
const connection_manager_1 = require("../connection-manager");
|
|
6
|
-
|
|
6
|
+
const WITH_IP_FORMATS = ['string-with-ip', 'json-with-ip'];
|
|
7
|
+
function convertDataFormat(data, format, ip) {
|
|
8
|
+
let converted;
|
|
7
9
|
try {
|
|
8
|
-
|
|
9
|
-
|
|
10
|
+
const baseFormat = format.replace('-with-ip', '');
|
|
11
|
+
if (baseFormat == 'json') {
|
|
12
|
+
converted = JSON.parse(data);
|
|
10
13
|
}
|
|
11
|
-
else if (
|
|
12
|
-
|
|
14
|
+
else if (baseFormat == 'csv') {
|
|
15
|
+
converted = data.split(',');
|
|
16
|
+
}
|
|
17
|
+
else {
|
|
18
|
+
converted = data;
|
|
13
19
|
}
|
|
14
20
|
}
|
|
15
21
|
catch (e) {
|
|
16
|
-
|
|
22
|
+
converted = data.toString();
|
|
23
|
+
}
|
|
24
|
+
// IP 포함 포맷이면 { data, ip } 형태로 반환한다
|
|
25
|
+
if (WITH_IP_FORMATS.includes(format) && ip) {
|
|
26
|
+
return { data: converted, ip };
|
|
17
27
|
}
|
|
18
|
-
return
|
|
28
|
+
return converted;
|
|
19
29
|
}
|
|
20
30
|
async function SocketListener(step, context) {
|
|
21
31
|
//get connection data
|
|
@@ -45,9 +55,9 @@ async function SocketListener(step, context) {
|
|
|
45
55
|
message
|
|
46
56
|
};
|
|
47
57
|
};
|
|
48
|
-
await connection.addListener('socket-message-arrive', async (message) => {
|
|
58
|
+
await connection.addListener('socket-message-arrive', async (message, ip) => {
|
|
49
59
|
logger.info(message.toString());
|
|
50
|
-
MESSAGES.push(convertDataFormat(message.toString(), dataFormat));
|
|
60
|
+
MESSAGES.push(convertDataFormat(message.toString(), dataFormat, ip));
|
|
51
61
|
});
|
|
52
62
|
}
|
|
53
63
|
catch (e) {
|
|
@@ -77,6 +87,14 @@ SocketListener.parameterSpec = [
|
|
|
77
87
|
{
|
|
78
88
|
display: 'String',
|
|
79
89
|
value: 'string'
|
|
90
|
+
},
|
|
91
|
+
{
|
|
92
|
+
display: 'String with IP',
|
|
93
|
+
value: 'string-with-ip'
|
|
94
|
+
},
|
|
95
|
+
{
|
|
96
|
+
display: 'JSON with IP',
|
|
97
|
+
value: 'json-with-ip'
|
|
80
98
|
}
|
|
81
99
|
]
|
|
82
100
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"socket-listener.js","sourceRoot":"","sources":["../../../server/engine/task/socket-listener.ts"],"names":[],"mappings":";;AAAA,iDAA6C;AAC7C,oDAA+C;AAC/C,8DAAyD;AAIzD,SAAS,iBAAiB,CAAC,
|
|
1
|
+
{"version":3,"file":"socket-listener.js","sourceRoot":"","sources":["../../../server/engine/task/socket-listener.ts"],"names":[],"mappings":"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","sourcesContent":["import { sleep } from '@things-factory/utils'\nimport { TaskRegistry } from '../task-registry'\nimport { ConnectionManager } from '../connection-manager'\nimport { InputStep } from '../../service/step/step-type'\nimport { Context } from '../types'\n\nconst WITH_IP_FORMATS = ['string-with-ip', 'json-with-ip']\n\nfunction convertDataFormat(data: string, format: string, ip?: string) {\n let converted: any\n try {\n const baseFormat = format.replace('-with-ip', '')\n if (baseFormat == 'json') {\n converted = JSON.parse(data)\n } else if (baseFormat == 'csv') {\n converted = data.split(',')\n } else {\n converted = data\n }\n } catch (e) {\n converted = data.toString()\n }\n\n // IP 포함 포맷이면 { data, ip } 형태로 반환한다\n if (WITH_IP_FORMATS.includes(format) && ip) {\n return { data: converted, ip }\n }\n\n return converted\n}\n\nasync function SocketListener(step: InputStep, context: Context) {\n //get connection data\n const {\n connection: connectionName,\n params: { dataFormat = 'JSON' },\n name\n } = step\n\n const { domain, logger, closures, __socket_listener } = context\n logger.info('\\r\\n')\n if (!__socket_listener) {\n context.__socket_listener = {}\n }\n\n // get socket information from connection\n var connection = ConnectionManager.getConnectionInstanceByName(domain, connectionName)\n if (!connection) {\n throw new Error(`connector '${connectionName}' is not established.`)\n }\n\n /*\n * 1. listner list에서 listner를 찾는다. 없으면, 생성한다.\n */\n if (!context.__socket_listener[name]) {\n try {\n var MESSAGES = []\n context.__socket_listener[name] = async () => {\n while (MESSAGES.length == 0) {\n await sleep(100)\n }\n var message = MESSAGES.shift()\n return {\n message\n }\n }\n\n await connection.addListener('socket-message-arrive', async (message: string, ip: string) => {\n logger.info(message.toString())\n MESSAGES.push(convertDataFormat(message.toString(), dataFormat, ip))\n })\n } catch (e) {\n logger.error(e)\n }\n }\n\n var { message } = await context.__socket_listener[name]()\n\n return {\n data: message\n }\n}\n\nSocketListener.parameterSpec = [\n {\n type: 'select',\n label: 'data-format',\n name: 'dataFormat',\n property: {\n options: [\n {\n display: 'CSV',\n value: 'csv'\n },\n {\n display: 'JSON',\n value: 'json'\n },\n {\n display: 'String',\n value: 'string'\n },\n {\n display: 'String with IP',\n value: 'string-with-ip'\n },\n {\n display: 'JSON with IP',\n value: 'json-with-ip'\n }\n ]\n }\n }\n]\nTaskRegistry.registerTaskHandler('socket-listener', SocketListener)\n"]}
|