bdcontract-web-ide/js/nodeCenter.js
2021-10-26 11:22:45 +08:00

181 lines
4.8 KiB
JavaScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/**
*
*/
var forkCP = function(contractName,nodeID,contractPort) {
var request = {};
request.action = "downloadContract";
//发送请求查找该contractName对应的projectName并通过nodeID获得对应的node的url
$.ajax(
{
url : "./NodeCenter?action=find&contractName="
+ contractName + "&nodeID=" + nodeID,
dataType : "json"
}).done(function(result) {
// console.log(result);
var res = result.data.split("/");
var res2 = res[res.length-1].split("\"");
request.mainHost = res[2];
request.projectName = res2[res2.length-2];
globalProjectName = res2[res2.length-2];
request.fileName = request.projectName + "_" + new Date().getTime()
+ ".ypk";
//存储该时刻合约执行的状态信息
dumpContract(contractName,res[2],contractPort);
var host = $("#host").val();
disposeContract(request, host);
});
}
var dumpContract = function(contractName,nodeUrl,contractPort) {
$.ajax(
{
url : "./NodeCenter?action=DumpMemory&nodeUrl="
+ nodeUrl + "&contractPort=" + contractPort
+ "&contractName=" + contractName,
dataType : "json"
}).done(function(result) {
// console.log(result);
var content = result.data;
//调用目标节点的ContractController中方法将字符串类型的合约状态存储为dyjs文件
var host = $("#host").val();
var url = getControlWsUrl(host);
//console.log("[nodeCenter.js] host = " + host + " ; url = " + url);
wssocket = new WebSocket(url);
var saveFile = {};
saveFile.action = "writeDyjs";
saveFile.content = content;
saveFile.target = "/memoryDumps/" + contractName + "_"
+ new Date().getTime() + ".dyjs";
saveFile.contractID = contractName;
wssocket.onopen = function() {
//console.log("[nodeCenter.js]与目标节点连接成功");
wssocket.send(JSON.stringify(saveFile));
}
});
};
var disposeContract = function(request, host) {
// console.log("[nodeCenter.js] disposeContract:" + host + "-->"
// + JSON.stringify(request));
var wsUrl = getFileWsUrl(host);
var fileWs = new WebSocket(wsUrl);
fileWs.onerror = function(error) {
console.log(error);
};
fileWs.onopen = function(error) {
fileWs.send(JSON.stringify(request));
};
fileWs.currHost = host;
fileWs.zipInfo = request;
fileWs.onmessage = downloadHandler;
}
var downloadHandler = function(obj, wssocket) {
console.log("[nodeCenter.js] downloadHandler : ");
var currHost = $("#host").val();
// console.log(event);
data = event.data;
// console.log(" -->" + data);
try {
var obj = JSON.parse(data);
switch (obj.action) {
case "onDownloadContract":
// console.log(JSON.stringify(obj));
//console.log("[nodeCenter.js] downloadHandler 执行时间 " + obj.executeTime);
progressbarUpdate(obj.executeTime);
//updateProgress(this.contractIndex, this.currHost,obj.executeTime * 0.95);
if (obj.data == "success") {
//console.log("[nodeCenter.js] downloadHandler successs");
//console.log("[nodeCenter.js] downloadHander host = " + currHost + " ; globalProjectName = " + globalProjectName);
startContractWithHost(currHost, globalProjectName);
this.close();
}
break;
case "onStartContract":
//updateProgress(wssocket.contractIndex, wssocket.currHost, 100);
wssocket.close();
break;
default:
}
} catch (err) {
console.log(err);
}
}
var progressbarUpdate = function(time){
//console.log("[nodeCenter.js] progressbarUpdate time = " + time);
$("#progressbar").val(time);
}
var startContractWithHost = function(host, fileName) {
var wsUrl = getControlWsUrl(host);
//console.log("[nodeCenter.js] wsUrl = " + wsUrl);
var controller = createWssocket(wsUrl, function() {
// onopen;
var request = {};
request.action = "startContractInTempZips";
request.owner = global.privKey;
request.path = fileName;
request.script = "empty";
controller.send(JSON.stringify(request));
//console.log("[nodeCenter.js] request.owner = " + request.owner + " ; request.path = " + request.path);
//this.contractIndex = contractIndex;
//this.currHost = host;
}, downloadHandler);
console.log("[nodeCenter.js] 结束");
};
var initGlobal = function() {
window.global = {};
globalProjectName = "";
global.privKey = localStorage.getItem("PrivKey");
if (global.privKey == undefined || global.privKey == null
|| global.privKey.length < 100) {
generate();
}
}
var init = function() {
initGlobal();
};
var generate = function() {
$.ajax({
url : "./SCManager?action=generatePrivateKey",
dataType : "json"
}).done(function(result) {
if (result.status) {
localStorage.setItem("PrivKey", result.data);
alert("Key successfully generated!");
initRest();
}
});
}
var getControlWsUrl = function(host) {
var prefix = "ws://";
if (document.location.href.startsWith("https"))
prefix = "wss://";
var path = "/SCIDE/SCExecutor";
return prefix + host + path;
};