//Wetty主机的部署地址。 U.CD.Wetty.src="http://10.3.15.219:3000"; //执行创建文件,创建主机的api. U.CD.Wetty.Server="http://10.3.14.30:3001"; Namespace.register("U.CD.Wetty"); U.CD.Wetty.ifameWetty = $$('iframe', { src: U.CD.Wetty.src, style: { cssText: "width: 100%;height: 100%;overflow: hidden;border:none", }, id: "ifameWetty" }) /** * 初始化ifame窗体并执行登陆操作 */ U.CD.Wetty.Init = function () { U.UI.Form({ title: '终端', style: { 'overflow-y': 'hidden', 'overflow-x': 'hidden', width: 1010, height: 700 }, content: U.CD.Wetty.ifameWetty }) //'' setTimeout(U.CD.Wetty.login, 300) } /** * 通过postMessage方法发送消息至socket.io client * @param {string} str */ U.CD.Wetty.send = function (str) { window.frames['ifameWetty'].contentWindow.postMessage(str, U.CD.Wetty.src); } /** * 提交代码区域内容至后端 */ U.CD.Wetty.run = function () { var fileName = 'test' + new Date().getTime() + '.c'; var s = $("#UCD_CT_Code_CT")[0].innerText; if (!U.CD.R.ForbidInput(s)) { //U.UI.SUForms("暂时不支持输入语句scanf等,请直接赋值,敬请期待下一版", "提示!!!", "UCD_R_InAlert", "color:red;", 300, 200); U.UI.Confirm("暂时不支持输入语句scanf等,请直接赋值,敬请期待下一版") return; } //如果是Chrome,FireFox,需要过滤掉一些字符 s = U.CD.CD.ExecIFCompChrome(s); var data = { user : U.CD.FGuid || 'user', // guid name: fileName, // value: s } s = s.replace(/\\/g, '\\\\\\\\') s = s.replace(/(\'|\")/g, '\\\"') var data2 = "user=" + (U.CD.FGuid || 'user') + "&name=" + fileName + "&value=" + encodeURIComponent(s); xhr = new XMLHttpRequest(); xhr.open('POST', U.CD.Wetty.Server+'/createFile', true); //加入当前时间以避免缓存 xhr.setRequestHeader("Content-type","application/x-www-form-urlencoded"); xhr.responseType = 'json'; xhr.send(data2); xhr.onload = function (res) { if (res.target.response.ret) { setTimeout(U.CD.Wetty.send('gcc ' + res.target.response.value + ' -o ' + res.target.response.value + '.exe'), 1000) setTimeout(U.CD.Wetty.send('./' + res.target.response.value + '.exe'), 1000) }else{ alert(res.target.response.value) } }; } /** * 根据后端回显执行ssh登陆操作 */ U.CD.Wetty.login = function () { var ssh = 'ssh root@localhost -p ' + '8000' var fnList = ['usestudio', 'usestudio-1', ssh, 'yes', '123456'] var index = 0 var fnStart = function () { if (fnList[index]) { U.CD.Wetty.send(fnList[index]) console.log(fnList[index]); index++ if (index === 5) { window.removeEventListener('message', checkData, false); U.CD.Wetty.run(); } } }, checkData = function (event) { if (event.data.includes('Password:')) { fnStart(); } if (event.data.includes('Welcome to Ubuntu 16.04.2 LTS')) { fnStart(); } if (event.data.includes('root@localhost\'s password:')) { fnStart(); } } window.addEventListener('message', checkData, false); fnStart(); } /** * 在容器内创建虚拟机 */ U.CD.Wetty.reg = function () { U.CD.Ajax.get(U.CD.Wetty.Server+'/createMachine/' + $('#UCD_TOP_L_UI')[0].innerHTML, function (port) { var ssh = 'ssh root@localhost -p ' + port var fnList = ['usestudio', 'usestudio-1', ssh, 'yes', '123456'] var index = 0 var fnStart = function () { if (fnList[index]) { U.CD.Wetty.send(fnList[index]) index++ } else { clearInterval(jsq) } } var jsq = setInterval(fnStart, 1000) }) } U.CD.Ajax = { /** * 发出GET请求并执行回调函数 * @param {string} url * @param {function} fn */ get: function (url, fn) { var obj = new XMLHttpRequest(); // XMLHttpRequest对象用于在后台与服务器交换数据 obj.open('GET', url, true); obj.onreadystatechange = function () { if (obj.readyState == 4 && obj.status == 200 || obj.status == 304) { // readyState == 4说明请求已完成 fn.call(this, obj.responseText); //从服务器获得数据 } }; obj.send(); }, /** * 发出POST请求并执行回调函数 * @param {string} url * @param {string} data * @param {function} fn */ post: function (url, data, fn) { // datat应为'a=a1&b=b1'这种字符串格式,在jq里如果data为对象会自动将对象转成这种字符串格式 var obj = new XMLHttpRequest(); obj.open("POST", url, true); obj.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); // 添加http头,发送信息至服务器时内容编码类型 obj.onreadystatechange = function () { if (obj.readyState == 4 && (obj.status == 200 || obj.status == 304)) { // 304未修改 fn.call(this, obj.responseText); } }; obj.send(data); } }