pg-server
Version:
Postgres DB server emulator, proxy or honeypot
48 lines • 1.7 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.bindSocket = exports.createAdvancedServer = void 0;
const net_1 = require("net");
const commands_1 = require("./protocol/commands");
const command_parser_1 = require("./protocol/command-parser");
const response_writer_1 = require("./protocol/response-writer");
const utils_1 = require("./utils");
/**
*
* @param settings
*/
function createAdvancedServer(ctor) {
return (0, net_1.createServer)(function (socket) {
var _a;
const session = new ctor();
(_a = session.onConnect) === null || _a === void 0 ? void 0 : _a.call(session, socket);
bindSocket(socket, session.onCommand.bind(session));
});
}
exports.createAdvancedServer = createAdvancedServer;
function bindSocket(socket, handler) {
if (utils_1.isDebug) {
function logArgs(on) {
return (...args) => console.log('💻 ' + on, ...args);
}
socket.on('close', logArgs('close'));
socket.on('drain', logArgs('drain'));
socket.on('end', logArgs('end'));
socket.on('error', logArgs('error'));
socket.on('lookup', logArgs('lookup'));
}
const writer = new response_writer_1.ResponseWriter(socket);
const ser = new command_parser_1.CommandParser(c => {
if (utils_1.isDebug) {
console.log('👉 CMD:', (0, commands_1.commandToStr)(c.command.type), c.command);
}
handler(c, writer);
});
socket.on('data', data => {
ser.parse(data);
});
// disable Nagle's algorithm
socket.setNoDelay(true);
return { writer };
}
exports.bindSocket = bindSocket;
//# sourceMappingURL=server.js.map