-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathserver.js
51 lines (40 loc) · 1.58 KB
/
server.js
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
const net = require( "net" );
const fs = require( "fs" );
require( "dotenv" ).config();
const envConfig = process.env || {};
const port = envConfig.PORT || 7070;
const host = envConfig.HOST || "127.0.0.1";
const server = net.createServer();
const autoReply = JSON.parse( envConfig.AUTOREPLY || "{}" );
let autoReplyLoaded = {};
server.listen( port, host, () => {
console.log( "TCP Echo Server is running on port " + port + ".");
});
server.on( "connection", function( sock ) {
console.log( "CONNECTED: " + sock.remoteAddress + ":" + sock.remotePort );
sock.on( "data", function( data ) {
let dataStr = data.toString();
console.log( "RECEIVING: " + sock.remoteAddress + ":" + sock.remotePort);
console.log( "START:\n" + dataStr + "\n\nEND" );
// Reply a precooked answer if available
for ( const [ request, responsePath ] of Object.entries( autoReply ) ) {
if ( dataStr.startsWith( request ) ) {
let response = autoReplyLoaded[ request ] || loadAutoReply( request, responsePath );
console.log( "AUTO-REPLIED: " + request );
sock.end( response );
break;
}
}
// Echo to the server, if nothing was sent
if ( sock.readyState === "open" || sock.readyState === "writeOnly" ) {
console.log( "ECHO-REPLIED" );
sock.end("\nECHO START\n" + dataStr + "\n\nECHO END\n");
}
});
});
// Load the response from FS
function loadAutoReply( key, responsePath ) {
let response = fs.readFileSync( responsePath );
autoReplyLoaded[ key ] = response;
return response;
}