Convert to WebSockets #1

Open
NBTX wants to merge 1 commit from NBTX/remote:master into master
4 changed files with 56 additions and 36 deletions
Showing only changes of commit 58fecdee92 - Show all commits

1
.gitignore vendored Normal file
View file

@ -0,0 +1 @@
node_modules/

View file

@ -1,7 +1,9 @@
const
{ version } = require('./package.json'),
http = require('http');
const { version } = require('./package.json');
const WebSocket = require('ws');
/**
* @type WebSocket.Server[]
*/
const servers = {};
module.exports = {
@ -18,56 +20,62 @@ module.exports = {
*/
default: async ({ Window, Ouput }, _, { help, open: portToOpen, close: portToClose, closeAll }) => {
let res = '';
if(help){
if (help) {
return `remote v${version}`
+ `\nUsage : remote [--open <port>]`
+ `\n remote [--close <port>]`
+ `\n remote [--close-all]`;
+ `\nUsage : remote [--open <port>]`
+ `\n remote [--close <port>]`
+ `\n remote [--close-all]`;
}
if(portToOpen){
if(servers[portToOpen])
if (portToOpen) {
if (servers[portToOpen])
res += `Port ${portToOpen} already open.\n`;
else {
const server = http.createServer((req, res) => {
if(req.method === 'POST'){
let body = '';
req.on('data', chunk => body += chunk.toString());
req.on('end', () => {
try {
const _res = eval(body);
res.writeHead(200);
res.end(_res && _res.toString());
} catch(error){
res.writeHead(400);
res.end(error.stack);
}
});
}
else {
res.writeHead(405);
res.end();
}
const wss = new WebSocket.Server({ port: portToOpen });
wss.on('connection', (ws) => {
ws.on('message', (msg) => {
const data = JSON.parse(msg);
try {
const response = eval(data.payload);
ws.send(JSON.stringify({
error: false,
id: data.id,
response
}));
} catch (ex) {
ws.send(JSON.stringify({
error: true,
id: data.id,
response: ex
}));
}
})
});
await new Promise(resolve => server.listen(portToOpen, () => resolve()));
servers[portToOpen] = server;
servers[portToOpen] = wss;
res += `Port ${portToOpen} open.\n`;
}
}
if(portToClose){
if(servers[portToClose]){
if (portToClose) {
if (servers[portToClose]) {
await new Promise(resolve => servers[portToClose].close(resolve));
delete servers[portToClose];
res += `Port ${portToClose} closed.\n`;
}
else res += `Port ${portToClose} wasn't open.\n`;
}
if(closeAll){
for(const [port, server] of Object.entries(servers)){
if (closeAll) {
for (const [port, server] of Object.entries(servers)) {
await new Promise(resolve => server.close(resolve));
delete servers[port];
res += `Port ${port} closed.\n`;
}
}
return res.trim();
}
};

View file

@ -1,4 +1,7 @@
{
"name": "@thornhill-corp/remote",
"version": "0.1.0"
}
"version": "0.1.0",
"dependencies": {
"ws": "^7.4.3"
}
}

8
yarn.lock Normal file
View file

@ -0,0 +1,8 @@
# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
# yarn lockfile v1
ws@^7.4.3:
version "7.4.3"
resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.3.tgz#1f9643de34a543b8edb124bdcbc457ae55a6e5cd"
integrity sha512-hr6vCR76GsossIRsr8OLR9acVVm1jyfEWvhbNjtgPOrfvAlKzvyeg/P6r8RuDjRyrcQoPQT7K0DGEPc7Ae6jzA==