var WSHandler = function (event) { // console.log("[scide.js] WSHandler " + event); data = event.data; // console.log(" -->" + data); try { var obj = JSON.parse(data); switch (obj.action) { case 'ping': case 'poing': break; case 'onExecuteResult': onExecuteResult(obj); break; case 'onListContractProcess': onListContractProcess(obj); break; case 'onStartContract': onStartContract(obj); break; case 'onKillContractProcess': logComm(obj); break; case 'onKillAllContract': onKillAllContract(obj); break; case 'onOutputStream': displayOutput(obj); break; case 'onException': logException(obj); break; case 'onHashResult': onHashResult(obj); break; default: // displayOutput(obj); break; } } catch (err) { console.log(err); } };// WSHandler() var logException = function (obj) { global.tempobj = obj; $("#responseStatus").html("Exception (" + obj.executeTime + "ms)"); displayOutput(obj); }; var logComm = function (obj) { console.log(obj); }; var displayOutput = function (obj) { displayOutputStr(obj.data); }; var displayOutputStr = function (str) { var val = global.outputStreamEditor.getValue(); val += "\n" + str; global.outputStreamEditor.setValue(val); var info = global.outputStreamEditor.getScrollInfo(); global.outputStreamEditor.scrollTo(0, info.height); }; var checkConnectStatus = function () { if (global.wssocket.isOpen() != 1) { if ($("#checkConnect").css("display") == "none") { $("#checkConnect").fadeIn(800); } else $("#checkConnect").fadeOut(800); } else { $("#checkConnect").css("display", "block"); $("#checkConnect").css("background-color", "#007FFF"); } }; var initWSocket = function () { var prefix = "ws://"; if (document.location.href.startsWith("https")) prefix = "wss://"; url = prefix + document.location.host + (document.location.pathname.replace("scide.html", "SCExecutor")); // console.log(url); global.wssocket = createWssocket(url, function () { listContractProcess(); listProjects(); }, function (data) { WSHandler(data); FileHandler(data); }); global.filewssocket = global.wssocket; setInterval(checkConnectStatus, 1000); }; // ====== wsHandler var onStartContract = function (obj) { console.log("onStartContract:"); // console.log(obj); var result = JSON.parse(obj.data); $("#responseStatus").html(result.status + " (" + obj.executeTime + "ms)"); global.responseEditor.setValue(result.result); // $("#tabdiv").editableSelect('add', obj.cid); // $("#tabdiv").editableSelect()[0].value = obj.cid; }; var onExecuteResult = function (obj) { console.log("onExecuteResult:"); // console.log(obj); var data = JSON.parse(obj.data); $("#responseStatus").html(data.status + " (" + obj.executeTime + "ms)"); global.responseEditor.setValue(data.result); // console.log(data); var totalLines = global.responseEditor.lineCount(); global.responseEditor.autoFormatRange({ line: 0, ch: 0 }, { line: totalLines }); if (data.analysis != undefined && data.analysis.length > 0) { // displayOutputStr(data.analysis); } }; var onListContractProcess = function (obj) { var data = JSON.parse(obj.data); global.contracts = data; var html = ""; $("#tabdiv").editableSelect('clear'); // $("#tabdiv").html(""); global.contractName2ID = {}; for (var i = 0; i < data.length; i++) { $("#tabdiv").editableSelect('add', data[i].name); global.contractName2ID[data[i].name] = data[i].id; // $("#tabdiv").append( // $("").attr("value", data[i].id).text( // data[i].id)); } if (data.length > 0) $("#tabdiv").editableSelect()[0].value = data[0].name; // $("#tabdiv").selectmenu("refresh"); // $("#tabdiv").html(html); // $("yourid/class here").append($("").attr("value", // youroption-value).text(youroption-text)); }; var onSaveƒe = function (obj) { alert("Save file:" + obj.data); }; var onKillAllContract = function (obj) { customAlert(obj.data); }; var onHashResult = function (obj) { $("#hashResult").html("刚刚操作的数链指纹:" + obj.data); }; // ====== wsHandler done! var switchContract = function (off) { // var contract = global.contracts[off]; // global.scriptEditor.setValue(contract.script); // $("#tabdiv")[0].value = contract.id; var pingObj = {}; pingObj.action = "connectTo"; pingObj.name = $("#tabdiv")[0].value; pingObj.id = global.contractName2ID[pingObj.name]; global.wssocket.send(JSON.stringify(pingObj)); } var countChar = function (str, c) { var ret = 0; for (var i = 0; i < str.length; i++) { if (str.charAt(i) == c) ret++; } return ret; } var generateOld = 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 generate = function () { localStorage.setItem("PrivKey", JSON.stringify(sm2.generateKeyPairHex())); global.privKey = localStorage.getItem("PrivKey"); } var initGlobal = function () { window.global = {}; global.privKey = localStorage.getItem("PrivKey"); if (global.privKey == undefined || global.privKey == null || global.privKey.length < 100 || !global.privKey.startsWith("{")) { generate(); initRest(); } else initRest(); global.privKey = JSON.parse(global.privKey); } var initRest = function () { global.scriptEditor = CodeMirror.fromTextArea($("#contractArea")[0], { matchBrackets: true, autoCloseBrackets: true, lineNumbers: true, height: "auto", mode: "application/ld+json", lineWrapping: true }); global.responseEditor = CodeMirror.fromTextArea($("#responseArea")[0], { matchBrackets: true, autoCloseBrackets: true, lineNumbers: true, mode: "application/ld+json", lineWrapping: true }); global.outputStreamEditor = CodeMirror.fromTextArea( $("#outputStreamArea")[0], { matchBrackets: true, autoCloseBrackets: true, lineNumbers: true, mode: "application/ld+json", lineWrapping: true }); global.argEditor = CodeMirror.fromTextArea($("#argArea")[0], { matchBrackets: true, autoCloseBrackets: true, lineNumbers: true, mode: "application/ld+json", lineWrapping: true, height: "auto" }); $('#tabdiv').editableSelect({ filter: false }); $("#tabdiv").on('select.editable-select', function (e) { // console.log("====="); // console.log(e); // console.log(e.target.value); // TODO; switchContract(); // switchContract }); // $('#tabdiv').addClass("ui-selectmenu-button"); $('#tabdiv').addClass("ui-selectmenu-button-closedn"); $('#tabdiv').addClass("ui-corner-all"); $('#tabdiv').addClass("ui-button"); $('#tabdiv').addClass("ui-widget"); }; // var onUploadNext = function() { // var request = {}; // request.action = "startContract"; // request.owner = global.privKey; // request.isPartial = false; // request.contractid = $("#tabdiv")[0].value; // request.path = $(".ui-tabs-active").find("a").html(); // request.script = global.toSend; // if (request.script.length > 1024) { // global.toSend = request.script.substr(1024); // request.script = request.script.substr(0, 1024); // request.isPartial = true; // } else { // global.toSend = ""; // } // console.log("Upload nextPart:"); // console.log(JSON.stringify(request)); // global.wssocket.send(JSON.stringify(request)); // }; var startContract = function () { var request = {}; request.action = "startContract"; // TODO should be pubkey request.owner = global.privKey.publicKey; request.requestID = new Date().getTime() + ""; // TODO ignore contractid request.contractid = $("#tabdiv")[0].value; request.script = global.scriptEditor.getValue(); request.path = $(".ui-tabs-active").find("a").html(); localStorage.setItem("persisStatus", JSON.stringify(request)); if (request.path.startsWith("/")) { request.signature = sm2.doSignature("Fixed|" + request.path + "|" + global.privKey.publicKey, global.privKey.privateKey); request.script = "empty"; } else request.signature = sm2.doSignature("Fixed|" + request.script + "|" + global.privKey.publicKey, global.privKey.privateKey); // console.log("path=" + request.path); // console.log("[scide.js] startContract() contractid = " // + $("#tabdiv")[0].value); global.wssocket.send(JSON.stringify(request)); }; var executeContractWithDynamicResult = function () { var request = {}; request.action = "executeContract"; request.requestID = new Date().getTime() + ""; request.contractID = $("#tabdiv")[0].value; request.arg = global.argEditor.getValue(); request.privKey = global.privKey; request.withDyanmicAnalysis = true; localStorage.setItem("persisArg", JSON.stringify(request)); global.wssocket.send(JSON.stringify(request)); }; var executeContract = function () { var request = {}; request.action = "executeContract"; request.requestID = new Date().getTime() + ""; request.contractID = $("#tabdiv")[0].value; request.arg = global.argEditor.getValue(); request.pubkey = global.privKey.publicKey; // contractID + "|" + action + "|" + arg + "|" + requester; var localArg = JSON.parse(request.arg); request.signature = sm2.doSignature(request.contractID + "|" + localArg.action + "|" + localArg.arg + "|" + global.privKey.publicKey, global.privKey.privateKey); localStorage.setItem("persisArg", JSON.stringify(request)); global.wssocket.send(JSON.stringify(request)); }; function listContractProcess() { global.wssocket.send(JSON.stringify({ action: 'listContractProcess', filters: 2 })); } var killContractProcess = function () { var request = {}; request.action = "killContractProcess"; request.requestID = new Date().getTime() + ""; request.name = $("#tabdiv")[0].value; request.id = global.contractName2ID[request.name]; global.wssocket.send(JSON.stringify(request)); }; var staticVerify = function () { var request = {}; request.action = "staticVerifyContract"; // TODO should be pubkey request.owner = global.privKey; request.isPartial = false; // TODO ignore contractid request.contractid = $("#tabdiv")[0].value; request.script = global.scriptEditor.getValue(); request.path = $(".ui-tabs-active").find("a").html(); localStorage.setItem("persisStatus", JSON.stringify(request)); if (request.path.startsWith("/")) request.script = "empty"; /* * if (request.script.length > 1024) { global.toSend = * request.script.substr(1024); request.script = request.script.substr(0, * 1024); request.isPartial = true; } */ global.wssocket.send(JSON.stringify(request)); }; var downloadContract = function () { if (global.lastClickedProjectId == undefined) global.lastClickedProjectId = 0; var projectName = global.projects[global.lastClickedProjectId]; var url = window.location.href.replace("/scide.html", "/CMManager?action=downloadContract&projectName="); url += projectName; window.open(url); }; var killAllContract = function () { var request = {}; request.action = "killAllContract"; global.wssocket.send(JSON.stringify(request)); }; var customAlert = function (message, title) { if (!title) title = 'Alert'; if (!message) message = 'No Message to Display.'; $('
').html(message).dialog({ title: title, resizable: false, modal: true, buttons: { 'Ok': function () { $(this).dialog('close'); } } }); } var init = function () { console.log("init:"); initGlobal(); initWSocket(); var req = localStorage.getItem("persisStatus"); // console.log(req); req = JSON.parse(req); if (req != undefined) { // $("#tabdiv")[0].value = req.contractid; //global.scriptEditor.setValue(req.script); } var req2 = localStorage.getItem("persisArg"); req2 = JSON.parse(req2); if (req2 != undefined && req2.arg != undefined) { global.argEditor.setValue(req2.arg); } initHello(); }; var getRequestParameters = function () { var arr = (location.search || "").replace(/^\?/, '').split("&"); var params = {}; for (var i = 0; i < arr.length; i++) { var data = arr[i].split("="); if (data.length == 2) { params[data[0]] = data[1]; } } return params; }; var getTemplate1 = function (name, list, expiredDate) { var tem = "contract _cname {\n \t//数据清洗逻辑\n function deleteKeys(result,list){\n\t\tfor (var key in list)\n \t\t\tdelete result[list[key]];\n \t\tfor (var key in result){\n \t\t\tif (typeof result[key] == 'object'){\n \t\t\t\tdeleteKeys(result[key],list);\t\n\t\t\t}\n\t\t}\n \t\treturn JSON.stringify(result);\n\t}\n\n \texport function filter(arg){\n \t\tvar result = JSON.parse(arg);\n\t\tvar list = _list;\n \t\tlist = list.split(\",\");\n \t\treturn deleteKeys(result,list);\n\t}\n\t//数据处理逻辑\n\tfunction handle(obj){\n \n }\n\texport function get(arg){\n if (new Date().getTime()<_expiredDate)\n return \"Permission Denied\";\n\t\tvar result = YancloudUtil.httpGet(arg);\n result = JSON.parse(result);\n \tif (result.resposeCode==200){\n \t\t\treturn handle(filter(result.response));\n } else { return result; }\n\t}\n}"; tem = tem.replace("_cname", name); tem = tem.replace("_list", JSON.stringify(list)); tem = tem.replace("_expiredDate", expiredDate); return tem; }; var getTemplate2 = function (name, list, expiredDate) { var tem = "contract _cname {\n //数据清洗逻辑\n \tfunction inVal(key,list){\n\t\tfor (var i=0;i