add ping to server
This commit is contained in:
parent
5128b0d530
commit
456eb6d270
@ -1,5 +1,5 @@
|
||||
# TConsole
|
||||
Console log to terminal
|
||||
# Termsole
|
||||
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 chalk = require('chalk');
|
||||
const repl = require('repl');
|
||||
const { DEFAULT_HOST, DEFAULT_PORT } = require("./config");
|
||||
|
||||
const getTime = () => {
|
||||
const now = new Date();
|
||||
@ -11,7 +12,7 @@ const getTime = () => {
|
||||
return `[${hours}:${minutes}:${seconds}]`;
|
||||
}
|
||||
|
||||
const out = (text, color) => {
|
||||
const out = (text, color = "white") => {
|
||||
switch (color) {
|
||||
case "white":
|
||||
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) => {
|
||||
ws.on('message', (message) => {
|
||||
console.log(`Listening to http://${DEFAULT_HOST}:${DEFAULT_PORT}`);
|
||||
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 { type, data } = event;
|
||||
switch (type) {
|
||||
@ -54,6 +65,32 @@ server.on('connection', (ws) => {
|
||||
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('> ');
|
||||
|
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;
|
||||
|
||||
// https://stackoverflow.com/a/44782052/7539840
|
||||
const defaultConsole = Object.assign(Object.create(Object.getPrototypeOf(console)), console);
|
||||
|
||||
const configure = (conn) => {
|
||||
const configure = (conn, defaultConsole) => {
|
||||
// skip if already configured
|
||||
if (console._tsconsole_configured) return;
|
||||
console._tsconsole_configured = true;
|
||||
@ -30,34 +28,41 @@ const configure = (conn) => {
|
||||
|
||||
}
|
||||
|
||||
const release = () => {
|
||||
const release = (defaultConsole) => {
|
||||
console = defaultConsole;
|
||||
ws = null;
|
||||
}
|
||||
|
||||
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 = {
|
||||
host: "localhost",
|
||||
port: 3456,
|
||||
host: DEFAULT_HOST,
|
||||
port: DEFAULT_PORT,
|
||||
ssl: false,
|
||||
...options,
|
||||
}
|
||||
|
||||
ws = new WebSocket(`${options.ssl ? "wss" : "ws"}://${options.host}:${options.port}`);
|
||||
ws.onopen = () => {
|
||||
configure(ws);
|
||||
configure(ws, defaultConsole);
|
||||
console.log('[TCONSOLE]: Connected');
|
||||
};
|
||||
|
||||
ws.onclose = (event) => {
|
||||
release();
|
||||
release(defaultConsole);
|
||||
console.log("[TCONSOLE]: Disconnected", event.message);
|
||||
}
|
||||
|
||||
ws.onerror = (event) => {
|
||||
release();
|
||||
release(defaultConsole);
|
||||
console.error("[TCONSOLE]: Disconnected", event.message);
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user