aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSam Wilkins <samwilkins333@gmail.com>2020-01-03 01:15:17 -0800
committerSam Wilkins <samwilkins333@gmail.com>2020-01-03 01:15:17 -0800
commit5111eb546d9bcd6070ddbe8076f3389a37cd7081 (patch)
tree006ddd2225988936032431b9fa8fc8faed5fdaca
parent75a0a9be12d4902898f8b82ec1df4e2ce41bb326 (diff)
factored out smaller functions in session
-rw-r--r--src/client/DocServer.ts2
-rw-r--r--src/server/session.ts36
2 files changed, 21 insertions, 17 deletions
diff --git a/src/client/DocServer.ts b/src/client/DocServer.ts
index befe9ea5c..47c63bfb7 100644
--- a/src/client/DocServer.ts
+++ b/src/client/DocServer.ts
@@ -82,7 +82,7 @@ export namespace DocServer {
Utils.AddServerHandler(_socket, MessageStore.UpdateField, respondToUpdate);
Utils.AddServerHandler(_socket, MessageStore.DeleteField, respondToDelete);
Utils.AddServerHandler(_socket, MessageStore.DeleteFields, respondToDelete);
- _socket.on("connection_terminated", () => alert("Your connection to the server has been terminated."));
+ Utils.AddServerHandler(_socket, MessageStore.ConnectionTerminated, () => alert("Your connection to the server has been terminated."));
}
function errorFunc(): never {
diff --git a/src/server/session.ts b/src/server/session.ts
index c66461d03..ec51b6e18 100644
--- a/src/server/session.ts
+++ b/src/server/session.ts
@@ -17,6 +17,7 @@ export namespace Session {
export let key: string;
export const signature = "Best,\nServer Session Manager";
let activeWorker: Worker;
+ let listening = false;
const masterIdentifier = `${yellow("__master__")}:`;
const workerIdentifier = `${magenta("__worker__")}:`;
@@ -40,6 +41,10 @@ export namespace Session {
return false;
}
+ function logLifecycleEvent(lifecycle: string) {
+ process.send?.({ lifecycle });
+ }
+
function messageHandler({ lifecycle, action }: any) {
if (action) {
console.log(`${workerIdentifier} action requested (${action})`);
@@ -54,6 +59,21 @@ export namespace Session {
}
}
+ async function activeExit(error: Error) {
+ if (!listening) {
+ return;
+ }
+ listening = false;
+ await Promise.all(admin.map(recipient => Email.dispatch(recipient, "Dash Web Server Crash", crashReport(error))));
+ const { _socket } = WebSocket;
+ if (_socket) {
+ Utils.Emit(_socket, MessageStore.ConnectionTerminated, "Manual");
+ }
+ logLifecycleEvent(red(`Crash event detected @ ${new Date().toUTCString()}`));
+ logLifecycleEvent(red(error.message));
+ process.exit(1);
+ }
+
function crashReport({ name, message, stack }: Error) {
return [
"You, as a Dash Administrator, are being notified of a server crash event. Here's what we know:",
@@ -66,7 +86,6 @@ export namespace Session {
}
export async function initialize(work: Function) {
- let listening = false;
if (isMaster) {
process.on("uncaughtException", error => {
if (error.message !== "Channel closed") {
@@ -96,22 +115,7 @@ export namespace Session {
tryKillActiveWorker();
});
} else {
- const logLifecycleEvent = (lifecycle: string) => process.send?.({ lifecycle });
logLifecycleEvent(green("initializing..."));
- const activeExit = async (error: Error) => {
- if (!listening) {
- return;
- }
- listening = false;
- await Promise.all(admin.map(recipient => Email.dispatch(recipient, "Dash Web Server Crash", crashReport(error))));
- const { _socket } = WebSocket;
- if (_socket) {
- Utils.Emit(_socket, MessageStore.ConnectionTerminated, "Manual");
- }
- logLifecycleEvent(red(`Crash event detected @ ${new Date().toUTCString()}`));
- logLifecycleEvent(red(error.message));
- process.exit(1);
- };
process.on('uncaughtException', activeExit);
const checkHeartbeat = async () => {
await new Promise<void>(resolve => {