adding a js test server
This commit is contained in:
parent
661b5fa3b5
commit
6271f29996
4 changed files with 126 additions and 0 deletions
9
test-rpc-server/package.json
Normal file
9
test-rpc-server/package.json
Normal 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"
|
||||||
|
}
|
||||||
|
}
|
24
test-rpc-server/rpc-message.js
Normal file
24
test-rpc-server/rpc-message.js
Normal 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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
45
test-rpc-server/rpc-server.js
Normal file
45
test-rpc-server/rpc-server.js
Normal 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);
|
||||||
|
}
|
48
test-rpc-server/test-client.js
Normal file
48
test-rpc-server/test-client.js
Normal 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();
|
||||||
|
}
|
Loading…
Reference in a new issue