node-eventstore-client/tools/fake-server.js

72 lines
2.5 KiB
JavaScript
Raw Normal View History

const net = require('net');
const util = require('util');
const createBufferSegment = require('../src/common/bufferSegment');
const TcpPackage = require('../src/systemData/tcpPackage');
const TcpCommand = require('../src/systemData/tcpCommand');
const TcpFlags = require('../src/systemData/tcpFlags');
const ClientMessages = require('../src/messages/clientMessage');
const server = net.createServer(function(socket) {
console.log('Connection from', socket.remoteAddress, socket.remotePort);
var recvBuf = new Buffer(0);
socket.on('data', function(buf) {
recvBuf = Buffer.concat([recvBuf, buf]);
2018-07-11 23:10:53 +00:00
let pkgData;
while(pkgData = tryReadPackage(recvBuf)) {
if (pkgData) {
handlePackage(pkgData, socket);
var oldBuf = recvBuf;
recvBuf = new Buffer(recvBuf.length - pkgData.size - 4);
oldBuf.copy(recvBuf, 0, 4 + pkgData.size);
}
}
});
socket.on('end', function() {
console.log('Connection closed');
})
});
server.listen(1113);
function tryReadPackage(buf) {
if (buf.length < 4) return;
const size = buf.readInt32LE(0);
if (buf.length < (4 + size)) return;
const pkg = {
size: size,
data: new Buffer(size)
};
buf.copy(pkg.data, 0, 4, 4 + size);
return pkg;
}
function handlePackage(pkg, socket) {
const bs = createBufferSegment(pkg.data);
const tcpPkg = TcpPackage.fromBufferSegment(bs);
console.log('Received TcpPackage (cmd=%s, correlationId=%s, size=%d)', TcpCommand.getName(tcpPkg.command), tcpPkg.correlationId, tcpPkg.data.count);
switch(tcpPkg.command) {
case TcpCommand.IdentifyClient: {
const dto = new ClientMessages.ClientIdentified({});
const buf = dto.constructor.encode(dto).finish();
const sendPkg = new TcpPackage(TcpCommand.ClientIdentified, TcpFlags.None, tcpPkg.correlationId, null, null, createBufferSegment(buf));
const sendBuf = sendPkg.asBuffer();
const sizeBuf = new Buffer(4);
sizeBuf.writeInt32LE(sendBuf.length, 0);
socket.write(sizeBuf);
socket.write(sendBuf);
break;
}
case TcpCommand.HeartbeatRequestCommand: {
const sendPkg = new TcpPackage(TcpCommand.HeartbeatResponseCommand, TcpFlags.None, tcpPkg.correlationId, null, null);
const sendBuf = sendPkg.asBuffer();
const sizeBuf = new Buffer(4);
sizeBuf.writeInt32LE(sendBuf.length, 0);
socket.write(sizeBuf);
socket.write(sendBuf);
break;
}
default: {
console.log('Unhandled TcpPackage command \'%s\'', TcpCommand.getName(tcpPkg.command));
}
}
}