adding a js test server

This commit is contained in:
Chris Marsh 2017-06-27 12:23:09 -07:00
parent 661b5fa3b5
commit 6271f29996
4 changed files with 126 additions and 0 deletions

View File

@ -0,0 +1,9 @@
{
"name": "test-rpc-server",
"version": "0.0.0",
"private": true,
"scripts": {
"server": "node rpc-server.js",
"client": "node test-client.js"
}
}

View File

@ -0,0 +1,24 @@
module.exports = class RpcMessage {
static serialize(obj) {
const serializedJson = JSON.stringify(obj);
const msgLen = 4 + serializedJson.length;
let buff = Buffer.alloc(msgLen);
buff.writeInt32LE(msgLen, 0);
buff.write(serializedJson, 4, serializedJson.length, 'utf-8');
return buff;
}
static deserialize(buff) {
const msgLen = buff.readInt32LE(0);
if (buff.length < msgLen) {
return null;
}
const msg = buff.toString('utf-8', 4, msgLen);
try {
return JSON.parse(msg);
} catch(e) {
return null;
}
}
};

View File

@ -0,0 +1,45 @@
const net = require('net');
const RpcMessage = require('./rpc-message');
console.log('Start up');
let PipePrefix;
if (process.platform == 'win32') {
PipePrefix = "\\\\.\\pipe\\";
}
else {
PipePrefix = "/tmp";
}
const PipePath = PipePrefix + "DiscordRpcServer";
var server = net.createServer(function(stream) {
console.log('Server: on connection')
stream.on('data', function(data) {
const msgObj = RpcMessage.deserialize(data);
if (msgObj != null) {
console.log('Server: on data:', msgObj);
}
else {
console.log('Server: got some data');
}
});
stream.on('end', function() {
console.log('Server: on end')
server.close();
});
});
server.on('close', function(){
console.log('Server: on close');
})
try {
server.listen(PipePath, function(){
console.log('Server: on listening');
});
} catch(e) {
console.error('could not start server:', e);
}

View File

@ -0,0 +1,48 @@
const net = require('net');
const RpcMessage = require('./rpc-message');
var PIPE_NAME = "DiscordRpcServer";
var PIPE_PATH = "\\\\.\\pipe\\" + PIPE_NAME;
const msg = new RpcMessage();
function sendMesg(testUpdatesToSend, stream) {
const msgObj = {
name: 'My Awesome Game',
state: (testUpdatesToSend % 2 == 0) ? 'In a match' : 'In Lobby'
};
console.log('Client: send update:', msgObj);
stream.write(RpcMessage.serialize(msgObj));
}
function sendMessageLoop(testUpdatesToSend, interval, stream) {
sendMesg(testUpdatesToSend, stream);
if (testUpdatesToSend > 1) {
setTimeout(() => {sendMessageLoop(testUpdatesToSend - 1, interval, stream)}, interval);
} else {
shutdown();
}
}
const client = net.connect(PIPE_PATH, function(stream) {
console.log('Client: on connection');
sendMessageLoop(5, 3000, client);
});
client.on('data', function(data) {
const msgObj = RpcMessage.deserialize(data);
if (msgObj != null) {
console.log('Client: got data:', msgObj);
} else {
console.log('Client: got some data');
}
});
client.on('end', function() {
console.log('Client: on end');
});
function shutdown() {
client.end();
}