godprotocol
Version:
A distributed computing environment
93 lines (75 loc) • 2.71 kB
JavaScript
import https from "https";
import http from "http";
let PORT = Number(process.env.PORT) || 1408;
const handle_routes = (req, res, manager, app) => {
let data = "";
res.setHeader("Access-Control-Allow-Origin", "*");
res.setHeader("Access-Control-Allow-Headers", "Content-Type");
if (req.method === "OPTIONS") {
res.writeHead(204, {
"Access-Control-Allow-Origin": "*",
"Access-Control-Allow-Headers": "Content-Type",
"Access-Control-Allow-Methods": "POST, GET, OPTIONS",
});
res.end();
return;
}
if (['/create_account', '/load', '/run', '/parse'].includes(req.url)){
req.on("data", (chunk) => {
data += chunk;
});
req.on("end", async () => {
if (!data) {
res.writeHead(400, { "Content-Type": "application/json" });
res.end(JSON.stringify({ error: "Request body cannot be empty" }));
return;
}
data = JSON.parse(data)
let result;
if (req.url === '/create_account'){
result = await manager.add_account(data.name, data.options)
res.end(JSON.stringify(result.stringify()))
}else if(req.url === '/load'){
let account = await manager.get_account(data.account);
result = await account.load(data)
res.end(JSON.stringify(result))
}else if(req.url === '/run'){
let account = await manager.get_account(data.account);
result = await account.run(data)
res.writeHead(200, { "Content-type": "application/json" });
res.end(result? JSON.stringify(result): JSON.stringify({done: true}))
}else if(req.url === '/parse'){
let account = await manager.get_account(data.account);
result = await account.parse(data)
res.end(result? JSON.stringify(result): JSON.stringify({done: true}))
}
});
req.on("error", (e) => {
res.writeHead(500, { "Content-Type": "application/json" });
res.end(JSON.stringify({ status: "error", error_message: e.message }));
});
}else if (app){
app(req, res);
}
};
const create_server = async (settings) => {
return new Promise((resolve, reject) => {
settings = settings || {};
let { port, app, manager } = settings;
port = port || PORT;
// console.log(__dirname)
let server = http.createServer(
// {
// key: fs.readFileSync(`${__dirname}/server.key`),
// cert: fs.readFileSync(`${__dirname}/server.cert`),
// },
(req, res) => handle_routes(req, res, manager, app)
);
server.listen(port, () => {
console.log(`\n...GOD PROTOCOL RUNNING :${port}`);
resolve(server);
});
});
};
export default create_server;
export { PORT };