add ping to server
This commit is contained in:
parent
5128b0d530
commit
456eb6d270
@ -1,5 +1,5 @@
|
|||||||
# TConsole
|
# Termsole
|
||||||
Console log to terminal
|
Bring browser console to your terminal
|
||||||
|
|
||||||
|
This package is intended to use while developement
|
||||||
|
|
||||||
# https://stackoverflow.com/questions/65822409/logging-to-terminal-console-instead-of-browser-console-in-react-js
|
|
||||||
|
45
cli.js
45
cli.js
@ -2,6 +2,7 @@
|
|||||||
const WebSocket = require('ws');
|
const WebSocket = require('ws');
|
||||||
const chalk = require('chalk');
|
const chalk = require('chalk');
|
||||||
const repl = require('repl');
|
const repl = require('repl');
|
||||||
|
const { DEFAULT_HOST, DEFAULT_PORT } = require("./config");
|
||||||
|
|
||||||
const getTime = () => {
|
const getTime = () => {
|
||||||
const now = new Date();
|
const now = new Date();
|
||||||
@ -11,7 +12,7 @@ const getTime = () => {
|
|||||||
return `[${hours}:${minutes}:${seconds}]`;
|
return `[${hours}:${minutes}:${seconds}]`;
|
||||||
}
|
}
|
||||||
|
|
||||||
const out = (text, color) => {
|
const out = (text, color = "white") => {
|
||||||
switch (color) {
|
switch (color) {
|
||||||
case "white":
|
case "white":
|
||||||
console.log(getTime(), chalk.white(text))
|
console.log(getTime(), chalk.white(text))
|
||||||
@ -31,10 +32,20 @@ const out = (text, color) => {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const server = new WebSocket.Server({ port: 3456 });
|
function heartbeat() {
|
||||||
|
this.isAlive = true;
|
||||||
|
}
|
||||||
|
|
||||||
server.on('connection', (ws) => {
|
console.log(`Listening to http://${DEFAULT_HOST}:${DEFAULT_PORT}`);
|
||||||
ws.on('message', (message) => {
|
const server = new WebSocket.Server({ port: DEFAULT_PORT, host: DEFAULT_HOST});
|
||||||
|
|
||||||
|
server.on("connection", (conn) => {
|
||||||
|
conn.isAlive = true;
|
||||||
|
|
||||||
|
conn.on('pong', heartbeat);
|
||||||
|
|
||||||
|
conn.on('message', (message) => {
|
||||||
|
//conn.isAlive = true;
|
||||||
const event = JSON.parse(message);
|
const event = JSON.parse(message);
|
||||||
const { type, data } = event;
|
const { type, data } = event;
|
||||||
switch (type) {
|
switch (type) {
|
||||||
@ -54,6 +65,32 @@ server.on('connection', (ws) => {
|
|||||||
data.forEach((text) => out(text, "white"));
|
data.forEach((text) => out(text, "white"));
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
conn.on("close", (event) => {
|
||||||
|
out("[TCONSOLE]: Closed", conn);
|
||||||
|
});
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
const interval = setInterval(() => {
|
||||||
|
server.clients.forEach((conn) => {
|
||||||
|
if (conn.isAlive === false) return conn.terminate();
|
||||||
|
|
||||||
|
conn.isAlive = false;
|
||||||
|
conn.ping("");
|
||||||
|
});
|
||||||
|
}, 5000);
|
||||||
|
|
||||||
|
server.on("close", () => {
|
||||||
|
clearInterval(interval);
|
||||||
|
process.exit(0);
|
||||||
|
});
|
||||||
|
|
||||||
|
server.on("error", (event) => {
|
||||||
|
out(event, "red");
|
||||||
|
process.exit(1);
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
|
// Start a node repl
|
||||||
const r = repl.start('> ');
|
const r = repl.start('> ');
|
||||||
|
2
config.js
Normal file
2
config.js
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
exports.DEFAULT_PORT = 3456;
|
||||||
|
exports.DEFAULT_HOST = "localhost";
|
27
index.js
27
index.js
@ -1,9 +1,7 @@
|
|||||||
|
import { DEFAULT_HOST, DEFAULT_PORT } from "./config";
|
||||||
let ws = null;
|
let ws = null;
|
||||||
|
|
||||||
// https://stackoverflow.com/a/44782052/7539840
|
const configure = (conn, defaultConsole) => {
|
||||||
const defaultConsole = Object.assign(Object.create(Object.getPrototypeOf(console)), console);
|
|
||||||
|
|
||||||
const configure = (conn) => {
|
|
||||||
// skip if already configured
|
// skip if already configured
|
||||||
if (console._tsconsole_configured) return;
|
if (console._tsconsole_configured) return;
|
||||||
console._tsconsole_configured = true;
|
console._tsconsole_configured = true;
|
||||||
@ -30,34 +28,41 @@ const configure = (conn) => {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const release = () => {
|
const release = (defaultConsole) => {
|
||||||
console = defaultConsole;
|
console = defaultConsole;
|
||||||
ws = null;
|
ws = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
const termsole = (options = {}) => {
|
const termsole = (options = {}) => {
|
||||||
if (ws) return; // already running
|
// Ensure termsole doesn't run in production mode
|
||||||
|
if (process.env.NODE_ENV && process.env.NODE_ENV !== 'development') return;
|
||||||
|
|
||||||
|
if (ws) {
|
||||||
|
console.log("already running");
|
||||||
|
return; // already running
|
||||||
|
}
|
||||||
|
const defaultConsole = Object.assign(Object.create(Object.getPrototypeOf(console)), console);
|
||||||
|
|
||||||
options = {
|
options = {
|
||||||
host: "localhost",
|
host: DEFAULT_HOST,
|
||||||
port: 3456,
|
port: DEFAULT_PORT,
|
||||||
ssl: false,
|
ssl: false,
|
||||||
...options,
|
...options,
|
||||||
}
|
}
|
||||||
|
|
||||||
ws = new WebSocket(`${options.ssl ? "wss" : "ws"}://${options.host}:${options.port}`);
|
ws = new WebSocket(`${options.ssl ? "wss" : "ws"}://${options.host}:${options.port}`);
|
||||||
ws.onopen = () => {
|
ws.onopen = () => {
|
||||||
configure(ws);
|
configure(ws, defaultConsole);
|
||||||
console.log('[TCONSOLE]: Connected');
|
console.log('[TCONSOLE]: Connected');
|
||||||
};
|
};
|
||||||
|
|
||||||
ws.onclose = (event) => {
|
ws.onclose = (event) => {
|
||||||
release();
|
release(defaultConsole);
|
||||||
console.log("[TCONSOLE]: Disconnected", event.message);
|
console.log("[TCONSOLE]: Disconnected", event.message);
|
||||||
}
|
}
|
||||||
|
|
||||||
ws.onerror = (event) => {
|
ws.onerror = (event) => {
|
||||||
release();
|
release(defaultConsole);
|
||||||
console.error("[TCONSOLE]: Disconnected", event.message);
|
console.error("[TCONSOLE]: Disconnected", event.message);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user