121 lines
3.3 KiB
TypeScript
121 lines
3.3 KiB
TypeScript
|
/*
|
||
|
* @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);
|
||
|
});
|