-
Notifications
You must be signed in to change notification settings - Fork 0
/
client.ts
72 lines (67 loc) · 2.13 KB
/
client.ts
1
2
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
import * as net from "net";
import { Logger } from "./logger";
const Parser = require("redis-parser");
const logger: Logger = new Logger(module.id);
let previousListener: any = null;
export const sendCommand = (client: net.Socket, commands: string[]): Promise<string | string[] | null> => {
let commandString = `*${commands.length}\r\n`;
for (const element of commands) {
commandString += `$${element.length}\r\n${element}\r\n`;
}
if (previousListener) {
client.removeListener(
"data",
previousListener
);
}
return new Promise((resolve) => {
let response: string | null = null;
previousListener = (data: any) => {
logger.debug(`client REPLY: ${data.toString().
replace(
/\r/g,
"\\r"
).
replace(
/\n/g,
"\\n"
)}`);
const parser = new Parser({
"returnBuffers": false,
"returnError": (err: any) => {
response = err.toString();
resolve(response);
},
"returnReply": (reply: any) => {
response = reply;
// TODO: client.destroy();
resolve(response);
},
"stringNumbers": false
});
parser.reset();
parser.execute(data);
};
client.on(
"data",
previousListener
);
client.on(
"close",
(hadError: boolean) => {
logger.debug(`client.close() ERROR: ${hadError}`);
}
);
if (client.remoteAddress === undefined && client.remotePort === undefined) {
client.connect(
Number(process.env.REDIS_PORT || 6379),
process.env.REDIS_HOST || "localhost",
() => {
client.write(commandString);
}
);
} else {
client.write(commandString);
}
});
};