change mailbox behaviour to use reception confirmations
This commit is contained in:
@@ -1,21 +1,21 @@
|
||||
#!/usr/bin/env bun
|
||||
|
||||
import {
|
||||
connectServers,
|
||||
forgetConnection,
|
||||
getWebSocketStats,
|
||||
processMessage,
|
||||
reconnectServers,
|
||||
removeExpiredMailboxes,
|
||||
trackConnection,
|
||||
connectServers,
|
||||
forgetConnection,
|
||||
getWebSocketStats,
|
||||
processMessage,
|
||||
reconnectServers,
|
||||
removeExpiredMailboxes,
|
||||
trackConnection,
|
||||
} from "./websocket-handler";
|
||||
import {
|
||||
createFileResponse,
|
||||
getVersionNumber,
|
||||
writeError,
|
||||
writeStatNumber,
|
||||
writeStatString,
|
||||
writeSuccess,
|
||||
createFileResponse,
|
||||
getVersionNumber,
|
||||
writeError,
|
||||
writeStatNumber,
|
||||
writeStatString,
|
||||
writeSuccess,
|
||||
} from "./utility";
|
||||
|
||||
import Colors from "colors";
|
||||
@@ -35,120 +35,121 @@ export type WS = ServerWebSocket<unknown> | WebSocket;
|
||||
|
||||
// MAIN
|
||||
async function main() {
|
||||
// CONFIG
|
||||
const config = await getConfig();
|
||||
const versionNumber = await getVersionNumber();
|
||||
// CONFIG
|
||||
const config = await getConfig();
|
||||
const versionNumber = await getVersionNumber();
|
||||
|
||||
// SERVER
|
||||
const server = Bun.serve({
|
||||
port: config.port,
|
||||
// SERVER
|
||||
const server = Bun.serve({
|
||||
port: config.port,
|
||||
|
||||
fetch(request, server) {
|
||||
// allow websockets
|
||||
server.upgrade(request);
|
||||
fetch(request, server) {
|
||||
// allow websockets
|
||||
server.upgrade(request);
|
||||
|
||||
// respond
|
||||
const requestPath = new URL(request.url).pathname;
|
||||
switch (requestPath) {
|
||||
case "/":
|
||||
return createFileResponse(DEFAULT_PAGE);
|
||||
case "/stats":
|
||||
return new Response(JSON.stringify(getAllStats()));
|
||||
default:
|
||||
return createFileResponse(requestPath);
|
||||
}
|
||||
},
|
||||
// respond
|
||||
const requestPath = new URL(request.url).pathname;
|
||||
switch (requestPath) {
|
||||
case "/":
|
||||
return createFileResponse(DEFAULT_PAGE);
|
||||
case "/stats":
|
||||
return new Response(JSON.stringify(getAllStats()));
|
||||
default:
|
||||
return createFileResponse(requestPath);
|
||||
}
|
||||
},
|
||||
|
||||
websocket: {
|
||||
open(ws) {
|
||||
try {
|
||||
trackConnection(ws);
|
||||
} catch (error) {
|
||||
writeError(error);
|
||||
}
|
||||
},
|
||||
message(ws, message) {
|
||||
try {
|
||||
processMessage(ws, message.toString(), config);
|
||||
} catch (error) {
|
||||
writeError(error);
|
||||
}
|
||||
},
|
||||
close(ws) {
|
||||
try {
|
||||
forgetConnection(ws);
|
||||
} catch (error) {
|
||||
writeError(error);
|
||||
}
|
||||
},
|
||||
},
|
||||
websocket: {
|
||||
open(ws) {
|
||||
try {
|
||||
trackConnection(ws);
|
||||
} catch (error) {
|
||||
writeError(error);
|
||||
}
|
||||
},
|
||||
message(ws, message) {
|
||||
try {
|
||||
processMessage(ws, message.toString(), config);
|
||||
} catch (error) {
|
||||
writeError(error);
|
||||
}
|
||||
},
|
||||
close(ws) {
|
||||
try {
|
||||
forgetConnection(ws);
|
||||
} catch (error) {
|
||||
writeError(error);
|
||||
}
|
||||
},
|
||||
},
|
||||
|
||||
tls: await (async () => {
|
||||
const keyFile = Bun.file("./key.pem");
|
||||
const certFile = Bun.file("./cert.pem");
|
||||
tls: await (async () => {
|
||||
const keyFile = Bun.file("./key.pem");
|
||||
const certFile = Bun.file("./cert.pem");
|
||||
|
||||
if (
|
||||
(await keyFile.exists()) == false ||
|
||||
(await certFile.exists()) == false
|
||||
)
|
||||
return undefined;
|
||||
if (
|
||||
(await keyFile.exists()) == false ||
|
||||
(await certFile.exists()) == false
|
||||
)
|
||||
return undefined;
|
||||
|
||||
return {
|
||||
key: keyFile,
|
||||
cert: certFile,
|
||||
passphrase: process.env.TLS_PASSPHRASE,
|
||||
};
|
||||
})(),
|
||||
});
|
||||
return {
|
||||
key: keyFile,
|
||||
cert: certFile,
|
||||
passphrase: process.env.TLS_PASSPHRASE,
|
||||
};
|
||||
})(),
|
||||
});
|
||||
|
||||
// OTHER SERVERS
|
||||
connectServers(config);
|
||||
// OTHER SERVERS
|
||||
connectServers(config);
|
||||
|
||||
// AUDIT
|
||||
function getServerStats(): [string, string][] {
|
||||
return [
|
||||
["server url", server.url.toString()],
|
||||
["server ip address", IP.address()],
|
||||
["server version", versionNumber],
|
||||
];
|
||||
}
|
||||
|
||||
function getAllStats(): [string, string | number][] {
|
||||
return [...getServerStats(), ...getWebSocketStats()];
|
||||
}
|
||||
|
||||
// CLI
|
||||
function updateCLI() {
|
||||
console.clear();
|
||||
|
||||
console.log(Colors.bold.bgWhite("UNIVERSAL DECENTRALIZED NETWORK"));
|
||||
console.log(
|
||||
Colors.yellow("relevant output is available in the 'logs' file")
|
||||
);
|
||||
console.log();
|
||||
|
||||
console.log(new Date().toLocaleString());
|
||||
console.log();
|
||||
|
||||
getServerStats().forEach((entry) => writeStatString(...entry));
|
||||
console.log();
|
||||
|
||||
getWebSocketStats().forEach((entry) => writeStatNumber(...entry));
|
||||
console.log();
|
||||
}
|
||||
|
||||
// LOOP
|
||||
setInterval(() => {
|
||||
if (process.env.DEV != "1") {
|
||||
updateCLI();
|
||||
reconnectServers(config);
|
||||
// AUDIT
|
||||
function getServerStats(): [string, string][] {
|
||||
return [
|
||||
["server url", server.url.toString()],
|
||||
["server ip address", IP.address()],
|
||||
["server version", versionNumber],
|
||||
];
|
||||
}
|
||||
|
||||
removeExpiredMailboxes();
|
||||
}, 2000);
|
||||
|
||||
// FINISH
|
||||
writeSuccess(`###\nstarted up ${new Date().toLocaleString()}`);
|
||||
function getAllStats(): [string, string | number][] {
|
||||
return [...getServerStats(), ...getWebSocketStats()];
|
||||
}
|
||||
|
||||
// CLI
|
||||
function updateCLI() {
|
||||
return;
|
||||
console.clear();
|
||||
|
||||
console.log(Colors.bold.bgWhite("UNIVERSAL DECENTRALIZED NETWORK"));
|
||||
console.log(
|
||||
Colors.yellow("relevant output is available in the 'logs' file"),
|
||||
);
|
||||
console.log();
|
||||
|
||||
console.log(new Date().toLocaleString());
|
||||
console.log();
|
||||
|
||||
getServerStats().forEach((entry) => writeStatString(...entry));
|
||||
console.log();
|
||||
|
||||
getWebSocketStats().forEach((entry) => writeStatNumber(...entry));
|
||||
console.log();
|
||||
}
|
||||
|
||||
// LOOP
|
||||
setInterval(() => {
|
||||
if (process.env.DEV != "1") {
|
||||
updateCLI();
|
||||
reconnectServers(config);
|
||||
}
|
||||
|
||||
removeExpiredMailboxes();
|
||||
}, 2000);
|
||||
|
||||
// FINISH
|
||||
writeSuccess(`###\nstarted up ${new Date().toLocaleString()}`);
|
||||
}
|
||||
|
||||
main();
|
||||
|
||||
Reference in New Issue
Block a user