Fri Jul 19 12:26:00 CST 2019 Source Update...
This commit is contained in:
143
Source/process/child-process.js
Normal file
143
Source/process/child-process.js
Normal file
@@ -0,0 +1,143 @@
|
||||
/*
|
||||
* @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 > CHECK_STOP_CHILD_PROCESS)
|
||||
{
|
||||
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":
|
||||
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 = GlobalRunMap[msg.id];
|
||||
if(F)
|
||||
{
|
||||
delete GlobalRunMap[msg.id];
|
||||
F(msg.Err, msg.Params);
|
||||
}
|
||||
break;
|
||||
case "ToLogClient":
|
||||
{
|
||||
ToLogClient0(msg.Str, msg.StrKey, msg.bFinal);
|
||||
break;
|
||||
}
|
||||
case "Eval":
|
||||
EvalCode(msg.Code);
|
||||
break;
|
||||
}
|
||||
});
|
||||
|
||||
function Exit()
|
||||
{
|
||||
if(global.OnExit)
|
||||
global.OnExit();
|
||||
process.exit(0);
|
||||
};
|
||||
process.RunRPC = function (Name,Params,F)
|
||||
{
|
||||
if(F)
|
||||
{
|
||||
GlobalRunID++;
|
||||
try
|
||||
{
|
||||
process.send({cmd:"call", id:GlobalRunID, Name:Name, Params:Params});
|
||||
GlobalRunMap[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, "", 4);
|
||||
}
|
||||
catch(e)
|
||||
{
|
||||
Result = "" + e;
|
||||
}
|
||||
return Result;
|
||||
};
|
||||
process.on('uncaughtException', function (err)
|
||||
{
|
||||
ToError(err.stack);
|
||||
ToLog(err.stack);
|
||||
TO_ERROR_LOG(global.PROCESS_NAME, 777, err);
|
||||
ToLog("-----------------" + global.PROCESS_NAME + " EXIT------------------");
|
||||
process.exit();
|
||||
});
|
||||
process.on('error', function (err)
|
||||
{
|
||||
ToError(global.PROCESS_NAME + ":\n" + err.stack);
|
||||
ToLog(err.stack);
|
||||
});
|
||||
@@ -404,7 +404,7 @@ function AllAlive()
|
||||
{
|
||||
for(var i = 0; i < ArrMiningWrk.length; i++)
|
||||
{
|
||||
ArrMiningWrk[i].send({cmd:"Alive"});
|
||||
ArrMiningWrk[i].send({cmd:"Alive", DELTA_CURRENT_TIME:DELTA_CURRENT_TIME});
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
@@ -46,37 +46,14 @@ PROCESS.on('message', function (msg)
|
||||
}
|
||||
}
|
||||
else
|
||||
if(msg.cmd === "SetBlock")
|
||||
if(msg.cmd === "Alive")
|
||||
{
|
||||
var StartNonce = 1000000 * (1 + msg.Num);
|
||||
if(Block.HashCount)
|
||||
{
|
||||
process.send({cmd:"HASHRATE", CountNonce:Block.HashCount, Hash:Block.Hash});
|
||||
}
|
||||
Block.HashCount = 0;
|
||||
Block = msg;
|
||||
Block.Time = Date.now();
|
||||
Block.LastNonce = StartNonce;
|
||||
Block.Period = CONSENSUS_PERIOD_TIME * Block.Percent / 100;
|
||||
if(Block.Period > 0 && Block.RunPeriod > 0)
|
||||
{
|
||||
CalcPOWHash();
|
||||
if(idInterval !== undefined)
|
||||
{
|
||||
clearInterval(idInterval);
|
||||
}
|
||||
idInterval = setInterval(CalcPOWHash, Block.RunPeriod);
|
||||
}
|
||||
}
|
||||
else
|
||||
if(msg.cmd === "Alive")
|
||||
if(msg.cmd === "Exit")
|
||||
{
|
||||
PROCESS.exit(0);
|
||||
}
|
||||
else
|
||||
if(msg.cmd === "Exit")
|
||||
{
|
||||
PROCESS.exit(0);
|
||||
}
|
||||
});
|
||||
|
||||
function CheckAlive()
|
||||
|
||||
@@ -20,41 +20,11 @@ global.DATA_PATH = GetNormalPathString(global.DATA_PATH);
|
||||
global.CODE_PATH = GetNormalPathString(global.CODE_PATH);
|
||||
require("../core/library");
|
||||
global.READ_ONLY_DB = 1;
|
||||
var LastAlive = Date.now();
|
||||
setTimeout(function ()
|
||||
{
|
||||
setInterval(CheckAlive, 1000);
|
||||
}, 20000);
|
||||
setInterval(function ()
|
||||
{
|
||||
process.send({cmd:"Alive"});
|
||||
}, 1000);
|
||||
process.send({cmd:"online", message:"OK"});
|
||||
require("./child-process");
|
||||
process.on('message', function (msg)
|
||||
{
|
||||
LastAlive = Date.now();
|
||||
switch(msg.cmd)
|
||||
{
|
||||
case "ALive":
|
||||
break;
|
||||
case "Exit":
|
||||
process.exit(0);
|
||||
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 "GETBLOCKHEADER":
|
||||
GETBLOCKHEADER(msg);
|
||||
break;
|
||||
@@ -75,32 +45,6 @@ process.on('message', function (msg)
|
||||
break;
|
||||
}
|
||||
});
|
||||
|
||||
function CheckAlive()
|
||||
{
|
||||
if(global.NOALIVE)
|
||||
return ;
|
||||
var Delta = Date.now() - LastAlive;
|
||||
if(Delta > CHECK_STOP_CHILD_PROCESS)
|
||||
{
|
||||
ToLog("STATIC-DB: ALIVE TIMEOUT Stop and exit: " + Delta + "/" + global.CHECK_STOP_CHILD_PROCESS);
|
||||
process.exit(0);
|
||||
return ;
|
||||
}
|
||||
};
|
||||
process.on('uncaughtException', function (err)
|
||||
{
|
||||
ToError(err.stack);
|
||||
ToLog(err.stack);
|
||||
TO_ERROR_LOG("STATIC-DB", 777, err);
|
||||
ToLog("-----------------STATIC-DB EXIT------------------");
|
||||
process.exit();
|
||||
});
|
||||
process.on('error', function (err)
|
||||
{
|
||||
ToError("STATIC-DB:\n" + err.stack);
|
||||
ToLog(err.stack);
|
||||
});
|
||||
var CServerDB = require("../core/db/block-db");
|
||||
var KeyPair = crypto.createECDH('secp256k1');
|
||||
KeyPair.setPrivateKey(Buffer.from([77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77,
|
||||
|
||||
@@ -16,58 +16,18 @@ global.DATA_PATH = GetNormalPathString(global.DATA_PATH);
|
||||
global.CODE_PATH = GetNormalPathString(global.CODE_PATH);
|
||||
require("../core/library");
|
||||
global.READ_ONLY_DB = 0;
|
||||
var LastAlive = Date.now();
|
||||
setTimeout(function ()
|
||||
{
|
||||
setInterval(CheckAlive, 1000);
|
||||
}, 20000);
|
||||
require("./child-process");
|
||||
setInterval(PrepareStatEverySecond, 1000);
|
||||
if(process.send)
|
||||
{
|
||||
setInterval(function ()
|
||||
{
|
||||
process.send({cmd:"Alive"});
|
||||
}, 1000);
|
||||
process.send({cmd:"online", message:"OK"});
|
||||
global.ToLogClient = function (Str,StrKey,bFinal)
|
||||
{
|
||||
process.send({cmd:"ToLogClient", Str:"" + Str, StrKey:StrKey, bFinal:bFinal});
|
||||
};
|
||||
}
|
||||
process.on('message', function (msg)
|
||||
{
|
||||
LastAlive = Date.now();
|
||||
switch(msg.cmd)
|
||||
{
|
||||
case "ALive":
|
||||
break;
|
||||
case "Exit":
|
||||
process.exit(0);
|
||||
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 "FindTX":
|
||||
global.TreeFindTX.SaveValue(msg.TX, msg);
|
||||
break;
|
||||
case "SetSmartEvent":
|
||||
global.TreeFindTX.SaveValue("Smart:" + msg.Smart, 1);
|
||||
break;
|
||||
case "Eval":
|
||||
EvalCode(msg.Code);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
@@ -77,32 +37,6 @@ global.SetStatMode = function (Val)
|
||||
global.STAT_MODE = Val;
|
||||
return global.STAT_MODE;
|
||||
};
|
||||
|
||||
function CheckAlive()
|
||||
{
|
||||
if(global.NOALIVE)
|
||||
return ;
|
||||
var Delta = Date.now() - LastAlive;
|
||||
if(Delta > 100 * 1000)
|
||||
{
|
||||
ToLog("TX-PROCESS: ALIVE TIMEOUT Stop and exit: " + Delta);
|
||||
process.exit(0);
|
||||
return ;
|
||||
}
|
||||
};
|
||||
process.on('uncaughtException', function (err)
|
||||
{
|
||||
ToError(err.stack);
|
||||
ToLog(err.stack);
|
||||
TO_ERROR_LOG("TX-PROCESS", 777, err);
|
||||
ToLog("-----------------TX-PROCESS EXIT------------------");
|
||||
process.exit();
|
||||
});
|
||||
process.on('error', function (err)
|
||||
{
|
||||
ToError("TX-PROCESS:\n" + err.stack);
|
||||
ToLog(err.stack);
|
||||
});
|
||||
global.HTTP_PORT_NUMBER = 0;
|
||||
var CServerDB = require("../core/transaction-validator");
|
||||
var KeyPair = crypto.createECDH('secp256k1');
|
||||
@@ -395,17 +329,3 @@ function TXWriteAccHash()
|
||||
return DataHash;
|
||||
};
|
||||
global.TXWriteAccHash = TXWriteAccHash;
|
||||
global.EvalCode = function (Code)
|
||||
{
|
||||
var Result;
|
||||
try
|
||||
{
|
||||
var ret = eval(Code);
|
||||
Result = JSON.stringify(ret, "", 4);
|
||||
}
|
||||
catch(e)
|
||||
{
|
||||
Result = "" + e;
|
||||
}
|
||||
return Result;
|
||||
};
|
||||
|
||||
@@ -18,54 +18,16 @@ global.DATA_PATH = GetNormalPathString(global.DATA_PATH);
|
||||
global.CODE_PATH = GetNormalPathString(global.CODE_PATH);
|
||||
require("../core/library");
|
||||
require("../core/geo");
|
||||
require("./child-process");
|
||||
global.READ_ONLY_DB = 1;
|
||||
global.MAX_STAT_PERIOD = 600;
|
||||
var HostNodeList = [];
|
||||
var AllNodeList = [];
|
||||
var NodeBlockChain = [];
|
||||
var LastAlive = Date.now();
|
||||
setTimeout(function ()
|
||||
{
|
||||
setInterval(CheckAlive, 1000);
|
||||
}, 20000);
|
||||
setInterval(function ()
|
||||
{
|
||||
process.send({cmd:"Alive"});
|
||||
}, 1000);
|
||||
process.send({cmd:"online", message:"OK"});
|
||||
process.on('message', function (msg)
|
||||
{
|
||||
LastAlive = Date.now();
|
||||
switch(msg.cmd)
|
||||
{
|
||||
case "ALive":
|
||||
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 = GlobalRunMap[msg.id];
|
||||
if(F)
|
||||
{
|
||||
delete GlobalRunMap[msg.id];
|
||||
F(msg.Err, msg.Params);
|
||||
}
|
||||
break;
|
||||
case "Stat":
|
||||
ADD_TO_STAT(msg.Name, msg.Value);
|
||||
break;
|
||||
@@ -101,52 +63,21 @@ process.on('message', function (msg)
|
||||
ArrLogClient.push({text:msg.ResultStr, key:msg.TX, final:msg.bFinal, });
|
||||
break;
|
||||
}
|
||||
case "Eval":
|
||||
EvalCode(msg.Code);
|
||||
break;
|
||||
}
|
||||
});
|
||||
var RedirectServer;
|
||||
var HostingServer;
|
||||
|
||||
function Exit()
|
||||
global.OnExit = function ()
|
||||
{
|
||||
ToLogWeb("=Exit1=");
|
||||
if(RedirectServer)
|
||||
RedirectServer.close();
|
||||
if(HostingServer)
|
||||
HostingServer.close();
|
||||
ToLogWeb("=Exit2=");
|
||||
process.exit(0);
|
||||
};
|
||||
|
||||
function CheckAlive()
|
||||
{
|
||||
if(global.NOALIVE)
|
||||
return ;
|
||||
var Delta = Date.now() - LastAlive;
|
||||
if(Delta > CHECK_STOP_CHILD_PROCESS)
|
||||
{
|
||||
Exit();
|
||||
return ;
|
||||
}
|
||||
};
|
||||
process.on('uncaughtException', function (err)
|
||||
{
|
||||
ToError(err.stack);
|
||||
ToLog(err.stack);
|
||||
TO_ERROR_LOG("HOSTING", 777, err);
|
||||
ToLog("-----------------HOSTING EXIT------------------", 0);
|
||||
process.exit();
|
||||
});
|
||||
process.on('error', function (err)
|
||||
{
|
||||
ToError("HOSTING:\n" + err.stack);
|
||||
ToLog(err.stack);
|
||||
});
|
||||
if(!global.HTTP_HOSTING_PORT)
|
||||
{
|
||||
ToLogTrace("global.HTTP_HOSTING_PORT=" + global.HTTP_HOSTING_PORT);
|
||||
OnExit();
|
||||
process.exit();
|
||||
}
|
||||
var CServerDB = require("../core/db/block-db");
|
||||
@@ -275,24 +206,25 @@ function RunListenServer()
|
||||
TimeToRerun = Math.floor(TimeToRerun * 1.1);
|
||||
if(TimeToRerun > 1000000 * 1000)
|
||||
return ;
|
||||
ToLogClient('Port ' + global.HTTP_HOSTING_PORT + ' in use, retrying...');
|
||||
ToLog('Port ' + global.HTTP_HOSTING_PORT + ' in use, retrying...');
|
||||
if(HostingServer.Server)
|
||||
HostingServer.Server.close();
|
||||
if(!bWasRun)
|
||||
setTimeout(function ()
|
||||
{
|
||||
RunListenServer();
|
||||
if(!bWasRun)
|
||||
RunListenServer();
|
||||
}, TimeToRerun);
|
||||
return ;
|
||||
}
|
||||
ToError("H##6");
|
||||
ToError(err);
|
||||
});
|
||||
ToLogClient("Prepare to run WEB-server on port: " + global.HTTP_HOSTING_PORT);
|
||||
ToLog("Prepare to run WEB-server on port: " + global.HTTP_HOSTING_PORT);
|
||||
HostingServer.listen(global.HTTP_HOSTING_PORT, LISTEN_IP, function ()
|
||||
{
|
||||
if(!bWasRun)
|
||||
ToLogClient("Run WEB-server on " + LISTEN_IP + ":" + global.HTTP_HOSTING_PORT);
|
||||
ToLog("Run WEB-server on " + LISTEN_IP + ":" + global.HTTP_HOSTING_PORT);
|
||||
bWasRun = 1;
|
||||
});
|
||||
};
|
||||
@@ -899,41 +831,6 @@ HostingCaller.GetTotalSupply = function (Params)
|
||||
{
|
||||
return "" + global.TOTAL_SUPPLY_TERA;
|
||||
};
|
||||
global.GlobalRunID = 0;
|
||||
global.GlobalRunMap = {};
|
||||
process.RunRPC = function (Name,Params,F)
|
||||
{
|
||||
if(F)
|
||||
{
|
||||
GlobalRunID++;
|
||||
try
|
||||
{
|
||||
process.send({cmd:"call", id:GlobalRunID, Name:Name, Params:Params});
|
||||
GlobalRunMap[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, "", 4);
|
||||
}
|
||||
catch(e)
|
||||
{
|
||||
Result = "" + e;
|
||||
}
|
||||
return Result;
|
||||
};
|
||||
setInterval(function ()
|
||||
{
|
||||
if(SERVER)
|
||||
|
||||
Reference in New Issue
Block a user