/* * @project: TERA * @version: Development (beta) * @license: MIT (not for evil) * @copyright: Yuriy Ivanov (Vtools) 2017-2019 [progr76@gmail.com] * Web: https://terafoundation.org * Twitter: https://twitter.com/terafoundation * Telegram: https://t.me/terafoundation */ global.GlobalRunID = 0; global.GlobalRunMap = {}; var LastAlive = Date.now(); setTimeout(function() { setInterval(CheckAlive, 1000); }, 20000); if (process.send) { setInterval(function() { process.send({ cmd: "Alive" }); }, 1000); process.send({ cmd: "online", message: "OK" }); setInterval(function() { process.send({ cmd: "Alive" }); }, 1000); global.ToLogClient = function(Str, StrKey, bFinal) { process.send({ cmd: "ToLogClient", Str: "" + Str, StrKey: StrKey, bFinal: bFinal }); }; } function CheckAlive() { if (global.NOALIVE) return; var Delta = Date.now() - LastAlive; if (Delta > global.CHECK_STOP_CHILD_PROCESS) { global.ToLog("ALIVE TIMEOUT. Stop and exit: " + Delta + "/" + global.CHECK_STOP_CHILD_PROCESS); Exit(); return; } }; process.on('message', function(msg) { LastAlive = Date.now(); switch (msg.cmd) { case "Alive": global.DELTA_CURRENT_TIME = msg.DELTA_CURRENT_TIME; break; case "Exit": Exit(); break; case "call": var Err = 0; var Ret; try { Ret = global[msg.Name](msg.Params); } catch (e) { Err = 1; Ret = "" + e; } if (msg.id) process.send({ cmd: "retcall", id: msg.id, Err: Err, Params: Ret }); break; case "retcall": var F = global.GlobalRunMap[msg.id]; if (F) { delete global.GlobalRunMap[msg.id]; F(msg.Err, msg.Params); } break; case "ToLogClient": { global.ToLogClient0(msg.Str, msg.StrKey, msg.bFinal); break; } case "Eval": global.EvalCode(msg.Code); break; } }); function Exit() { if (global.OnExit) global.OnExit(); process.exit(0); }; process.RunRPC = function(Name, Params, F) { if (F) { global.GlobalRunID++; try { process.send({ cmd: "call", id: global.GlobalRunID, Name: Name, Params: Params }); global.GlobalRunMap[global.GlobalRunID] = F; } catch (e) { } } else { process.send({ cmd: "call", id: 0, Name: Name, Params: Params }); } }; global.EvalCode = function(Code) { var Result; try { var ret = eval(Code); Result = JSON.stringify(ret, undefined, 4); } catch (e) { Result = "" + e; } return Result; }; process.on('uncaughtException', function(err) { global.ToError(err.stack); global.ToLog(err.stack); global.TO_ERROR_LOG(global.PROCESS_NAME, 777, err); global.ToLog("-----------------" + global.PROCESS_NAME + " EXIT------------------"); process.exit(); }); process.on('error' as any, function(err: TeraError) { global.ToError(global.PROCESS_NAME + ":\n" + err.stack); global.ToLog(err.stack); });