bdcontract-web-ide/js/timeTravel.js

315 lines
8.2 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.

/*
* Global.contractID
* Global.memoryFiles
* Global.currentFile
* Global.currentNode
* Global.nodes
*/
var initContracts = function(){
$.ajax({
url : "./CMManager?action=listContractProcess",
dataType : "json"
}).done(function(result) {
// console.log(result);
Global.result = result;
listNodes();
updateTabs(JSON.parse(result.data));
});
}
var updateTabs = function(data) {
for (var i = 0; i < data.length; i++) {
var obj = data[i];
$("#contracts").editableSelect('add', obj.name);
}
if (data.length > 0)
$("#contracts").editableSelect()[0].value = data[0].name;
Global.contractID = $("#contracts")[0].value;
updateContract();
clickContract();
};
var clickContract = function() {
var contractID = $("#contracts")[0].value;
if (contractID != Global.contractID) {
Global.contractID = contractID;
updateContract();
}
}
var switchMemoryFile = function(i) {
Global.currentFile = Global.memoryFiles[i]; //设置当前选中的文件currentFile为文件名
$("#notice").html("Choose time " + Global.currentFile + " to travel.");
for(var j = 0;j < Global.memoryFiles.length;j++){
if(j == i){
document.getElementById("memoryFile" + j).style.color="#a9423e"; //改变选中文件颜色
}
else{
document.getElementById("memoryFile" + j).style.color="black";
}
}
}
var updateContract = function() {
var name = Global.contractID;
$("#show").html("Contract " + name + " has been choosed.");
listMemoryFiles(); //更新选择的合约需更新memoryFiles
}
var updateMemoryFiles = function(data) {
Global.memoryFiles = data; //首次设置当前Global.memoryFiles值
var html = "<label><b>Time to Choose</b></label>";
for(var i = 0;i < data.length;i++){
html += "<h4 onclick=\"switchMemoryFile(" + i + ")\" class='projectButton' id=\"memoryFile" + i + "\">&nbsp;&nbsp;" + data[i] + "</h4>";
}
$("#memoryFilesArea").html(html);
printTimeTravelLog();
}
var listMemoryFiles = function() {
console.log("listMemoryFiles : ");
$.ajax({
url : "./CMManager?action=listMemoryFiles&target=" + Global.contractID,
dataType : "json"
}).done(function(result) {
Global.result = result;
// console.log("[listMemoryFiles] result.data = " + result.data);
if(result.data == "" || result.data == null){
$("#memoryFilesArea").html("<label><b>Time to Choose</b></label></br><h4>This contract has no memory files,can't travel!</h4>");
}else if(result.data == "all"){
$("#memoryFilesArea").html("<label><b>Time to Choose</b></label></br><h4>Please choose a contract first!</h4>");
}else{
updateMemoryFiles(JSON.parse(result.data));
}
});
}
var dumpContract = function() {
$.ajax({
url : "./CMManager?action=dumpContract&contractID=" + Global.contractID + "&target=" + Global.contractID,
dataType : "json"
}).done(function(result) {
// console.log("dumpContract result : " + result);
Global.result = result;
if(result.data == "success"){
$("#notice").html("Contract " + Global.contractID + " has been dumped successfully.Meomry file size is " + result.size + " . Dump time is " + result.time + ".");
printTimeTravelLog();
listMemoryFiles(); //产生新的memory文件需要刷新
}
else{
$("#notice").html("Contract " + Global.contractID + " dumped failed!");
printTimeTravelLog();
}
});
}
var backtoContract = function() {
// console.log("Global.currentFile=" + Global.currentFile);
if(Global.currentFile == null){
alert("Please choose time to travel!");
$("#notice").html("Please choose time to travel!");
return;
}
$.ajax({
url : "./CMManager?action=loadMemory&contractID=" + Global.contractID + "&target=" + Global.currentFile + "&direction=back",
dataType : "json"
}).done(function(result) {
Global.result = result;
if(result.data == "success"){
$("#notice").html("Contract " + Global.contractID + " has travelled back to past successfully.Meomry file size is " + result.size + " . Travel time is " + result.time + ".");
printTimeTravelLog();
}
else{
alert(result.data);
$("#notice").html(result.data);
printTimeTravelLog();
}
});
}
var gotoContract = function() {
// ("Global.currentFile=" + Global.currentFile);
if(Global.currentFile == null){
alert("Please choose time to travel!");
$("#notice").html("Please choose time to travel!");
return;
}
$.ajax({
url : "./CMManager?action=loadMemory&contractID=" + Global.contractID + "&target=" + Global.currentFile + "&direction=go",
dataType : "json"
}).done(function(result) {
Global.result = result;
if(result.data == "success"){
$("#notice").html("Contract " + Global.contractID + " has travelled to future successfully. Meomry file size is " + result.size + " . Travel time is " + result.time + ".");
printTimeTravelLog();
}
else{
alert(result.data);
$("#notice").html(result.data);
printTimeTravelLog();
}
});
}
var printTimeTravelLog = function() {
$.ajax({
url : "./CMManager?action=printTimeTravelLog",
dataType : "json"
}).done(function(result) {
Global.result = result;
$("#log").html(result.data);
});
}
var printTransferLog = function() {
$.ajax({
url : "./CMManager?action=printTransferLog",
dataType : "json"
}).done(function(result) {
Global.result = result;
$("#log2").html(result.data);
});
}
var listNodes = function() {
console.log("listNodes : ");
$.ajax({
url : "./CMManager?action=listForkNodes",
dataType : "json"
}).done(function(result) {
Global.result = result;
console.log("[listNodes] result.data = " + result.data);
if(result.data == "" || result.data == null){
$("#nodesArea").html("<label><b>No node to choose!!!</b></label></br>");
}else{
updateNodes(JSON.parse(result.data));
}
printTransferLog();
});
}
var updateNodes = function(data) {
console.log("updateNodes : " + data);
Global.nodes = data;
var html = "<label><b>Nodes to Choose</b></label>";
for(var i = 0;i < data.length;i++){
html += "<h4 onclick=\"switchNode(" + i + ")\" class='projectButton' id=\"node" + i + "\">&nbsp;&nbsp;" + "[node] " + data[i] + "</h4>";
}
$("#nodesArea").html(html);
printTransferLog();
}
var switchNode = function(i) {
Global.currentNode = Global.nodes[i];
$("#notice2").html("Choose node " + Global.currentNode + " to transfer.");
for(var j = 0;j < Global.nodes.length;j++){
if(j == i){
document.getElementById("node" + j).style.color="#a9423e";
}
else{
document.getElementById("node" + j).style.color="black";
}
}
}
var transfer = function(i) {
console.log("Global.currentNode=" + Global.currentNode);
if(Global.currentNode == null){
alert("Please choose node to transfer!");
$("#notice2").html("Please choose a node to transfer!");
return;
}
//先将合约代码传过去并在选中的节点上启动
var mode;
switch(i){
case 0 :
mode = "memoryTransfer";
//memory dumpfork
break;
case 1 :
mode = "traceTransfer";
break;
case 2 :
mode = "simpleTransfer";
break;
case 3 :
mode = "fastTransfer";
break;
default:
;
}
$("#notice2").html("Use mode " + mode + " to transfer!");
/*
var urlstr = "http://" + Global.currentNode + ":8080/SCIDE/CMManager?action=forkContract&contractID=" + Global.contractID + "&method="
$.ajax({
url : urlstr,
dataType : "json"
}).done(function(result) {
Global.result = result;
if(result.data == "success"){
console.log("[transfer] test success!");
$("#notice2").html("Contract " + Global.contractID + " has transferred successfully.");
printTransferLog();
}
else{
alert("Transfer error : " + result.data);
$("#notice2").html(result.data);
printTransferLog();
}
//从这继续写
printTransferLog();
});
*/
/*
var host = Global.currentNode;
if(host == "127.0.0.1"){
host += ":18000"
}else{
host += ":8080"
}
var wsUrl = getControlWsUrl(host);
console.log("[transfer] wsUrl=" + wsUrl);
var sock = new WebSocket(wsUrl);
var controller = createWssocket(wsUrl, function() {
// onopen;
var request = {};
request.action = "forkContract";
request.script = "empty";
controller.send(JSON.stringify(request));
}, transferHandler);
*/
}
var transferHandler = function(obj){
console.log("[transferHandler]");
printTransferLog();
console.log(obj);
var obj2 = JSON.parse(obj.data );
console.log(obj2.data);
}