diff --git a/app.js b/app.js index 8dc576f..39614e9 100644 --- a/app.js +++ b/app.js @@ -217,6 +217,105 @@ router.get('/runIndex/:projectName', async (ctx, next) => { +}) +router.get('/runIndexDesignateMobile/:projectNameAndMobileInfo', async (ctx, next) => { + var fs = require('fs'); + + console.log('要运行的项目名称=') + var projectNameAndMobileInfo = ctx.params.projectNameAndMobileInfo; + var projectName = projectNameAndMobileInfo.match(/.*?(?=手机唯一标识码)/)[0] + var 手机唯一标识码=projectNameAndMobileInfo.match(/手机唯一标识码(.*)/)[1] + console.log(projectName) + console.log(手机唯一标识码) + 手机唯一标识码=手机唯一标识码.split(';') + console.log(手机唯一标识码) + var 手机唯一标识码json={"手机唯一标识码":手机唯一标识码} + + + 手机唯一标识码json=JSON.stringify(手机唯一标识码json) + console.log(手机唯一标识码json) + + + fs.writeFileSync('./mobileCode.json',手机唯一标识码json) + + + + + + + + + + + + + + + ctx.response.body = `后端收到runIndexDesignateMobile命令`; + + + if (指定项目中有index文件(projectName)) { + if (index文件中有版本号(projectName)) { + + } else { + 添加版本号(projectName) + } + } else { + 在指定项目中创建index文件(projectName) + } + + + + //将指定项目压缩 + var folder = './projectList/' + projectName + var zipFilePath = zipFolder(folder) + //告诉手机下载指定项目的压缩包 + var 版本号 = 1 + // 版本号读取所选项目的index.js文件, + // 查看scriptVersionNumber字段 + var indexFilePath = folder + '/index.js' + if (!fs.existsSync(indexFilePath)) { + // Do something + console.log('请在项目中建立index.js文件'); + console.log('文件中必须有一行内容来指定项目版本号,如下'); + console.log('scriptVersionNumber=1'); + + process.exit(1) + } + + + + console.log('--------读取index.js文件开始--------'); + + var fileContent = fs.readFileSync(indexFilePath, 'utf-8'); + + console.log('--------读取index.js文件结束--------'); + + //检查版本号 + var reg = /scriptVersionNumber=(\d+)/ + var 版本号 = fileContent.match(reg)[1] + + + + + + + + + + var 服务器下载端口 = port.httpPort + project = { + "projectName": projectName, + "scriptVersionNumber": 版本号, + 'port': 服务器下载端口 + } + tellDesignateMobileDownloadProjectZipFile(project) + //下载完毕手机自动运行该项目中的index.js + //默认版本号为1 如果在index中发现版本号,以index中的版本号为准 + //如果手机上的版本号小于当前版本号,那么就更新脚本. + + + }) function zipFolder(folder) { @@ -237,6 +336,18 @@ function tellMobileDownloadProjectZipFile(projectName) { childSendMsg(projectName) +} +function tellDesignateMobileDownloadProjectZipFile(projectName) { + var t = config.getTime() + console.log(t) + // console.log('6秒后通知手机更新脚本'); + var fs = require('fs'); // 引入fs模块 + // setTimeout(childSendMsg,6000) + var 手机唯一标识码=fs.readFileSync('./mobileCode.json') + 手机唯一标识码=JSON.parse(手机唯一标识码) + childSendMsg(projectName,手机唯一标识码.手机唯一标识码) + + } @@ -305,17 +416,17 @@ child.on('message', (msg) => { console.log('大头儿子说->' + msg) }); -function childSendMsg(projectName) { +function childSendMsg(projectName,手机唯一标识码) { console.log('启动childSendMsg函数'); console.log('现在通知手机更新脚本') child.send('小头爸爸说->大头儿子,让他们更新脚本吧'); // setTimeout(发送项目更新信息,6000) - 发送项目更新信息(projectName) + 发送项目更新信息(projectName,手机唯一标识码) } -function 发送项目更新信息(project) { +function 发送项目更新信息(project,手机唯一标识码) { console.log("发送项目更新信息"); // var projectName=project.projectName @@ -325,7 +436,7 @@ function 发送项目更新信息(project) { // "scriptVersionNumber":scriptVersionNumber // } 项目更新信息 = JSON.stringify(project) - child.send('项目更新信息' + 项目更新信息) + child.send('项目更新信息' + 项目更新信息,手机唯一标识码) } diff --git "a/git\345\270\270\347\224\250\345\221\275\344\273\244.txt" "b/git\345\270\270\347\224\250\345\221\275\344\273\244.txt" index 8d9d5af..6b90656 100644 --- "a/git\345\270\270\347\224\250\345\221\275\344\273\244.txt" +++ "b/git\345\270\270\347\224\250\345\221\275\344\273\244.txt" @@ -10,27 +10,27 @@ git status -s git branch 创建分支 -git checkout master -b daily-12-21-看了一遍设计模式 +git checkout master -b daily-12-21-可以指定手机运行脚本待测试 提交到暂存区 git add . 提交评论 -git commit -m 'daily-12-21-看了一遍设计模式' +git commit -m 'daily-12-21-可以指定手机运行脚本待测试' 推送到分支 -git push origin daily-12-21-看了一遍设计模式 +git push origin daily-12-21-可以指定手机运行脚本待测试 切换主干||分支 git checkout master || git checkout daily-10-1 本地合并分支到主干 -git merge daily-12-21-看了一遍设计模式 +git merge daily-12-21-可以指定手机运行脚本待测试 远端合并分支到主干 -git merge origin/daily-12-21-看了一遍设计模式 +git merge origin/daily-12-21-可以指定手机运行脚本待测试 推送主干 git push origin master diff --git a/nodejsTest/mobileCode.json b/nodejsTest/mobileCode.json new file mode 100644 index 0000000..b113f4d --- /dev/null +++ b/nodejsTest/mobileCode.json @@ -0,0 +1 @@ +{"手机唯一标识码":["aaaaaaaaaa","aabbbbbbbc","ccccccccc","aaaddccccccc"]} \ No newline at end of file diff --git a/nodejsTest/test.js b/nodejsTest/test.js new file mode 100644 index 0000000..5761152 --- /dev/null +++ b/nodejsTest/test.js @@ -0,0 +1,14 @@ +var fs = require('fs'); // 引入fs模块 + +var 手机唯一标识码='aaaaaaaaaa;aabbbbbbbc;ccccccccc;aaaddccccccc' +手机唯一标识码=手机唯一标识码.split(';') + +var 手机唯一标识码json={ + "手机唯一标识码":手机唯一标识码 +} +手机唯一标识码json=JSON.stringify(手机唯一标识码json) +console.log(手机唯一标识码json) + +var filename='./mobileCode.json' +var data=手机唯一标识码json +fs.writeFileSync(filename,data) diff --git a/socketServer.js b/socketServer.js index 5b5c36f..a1c05d9 100644 --- a/socketServer.js +++ b/socketServer.js @@ -13,30 +13,31 @@ var config = require('./config') -function removeBlank(str){ - var result=str.replace(/^\s+|\s+$/g,''); +function removeBlank(str) { + var result = str.replace(/^\s+|\s+$/g, ''); return result } -function recordClientInfo(client){ + +function recordClientInfo(client) { // 唯一标识码 做键名 var fs = require('fs'); //文件模块 var path = require('path'); //系统路径模块 - fs.exists("./clientInfo.json", function(exists) { + fs.exists("./clientInfo.json", function (exists) { console.log("./clientInfo.json") console.log(exists ? "存在" : "不存在"); var file = path.join(__dirname, './clientInfo.json'); - if(!exists){ + if (!exists) { //指定创建目录及文件名称,__dirname为执行当前js文件的目录 //写入文件 var content = {} - var 唯一标识码=client.唯一标识码 - content[唯一标识码]=client + var 唯一标识码 = client.唯一标识码 + content[唯一标识码] = client var content = JSON.stringify(content); - fs.writeFile(file, content, function(err) { + fs.writeFile(file, content, function (err) { if (err) { - return console.log(err); + return console.log(err); } console.log('客户端信息文件创建成功,地址:' + file); console.log("本次记录的客户端为"); @@ -45,28 +46,28 @@ function recordClientInfo(client){ }); - }else{ + } else { - fs.readFile(file,'utf8',function (err, data) { - if(err) console.log(err); - var clientInfo=JSON.parse(data); - var 唯一标识码=client.唯一标识码 - clientInfo[唯一标识码]=client + fs.readFile(file, 'utf8', function (err, data) { + if (err) console.log(err); + var clientInfo = JSON.parse(data); + var 唯一标识码 = client.唯一标识码 + clientInfo[唯一标识码] = client // fs.writeFileSync('test1.json',t) var content = JSON.stringify(clientInfo); - fs.writeFile(file, content, function(err) { + fs.writeFile(file, content, function (err) { if (err) { - return console.log(err); + return console.log(err); } console.log('客户端信息写入成功,写入文件为:' + file); console.log("本次记录的客户端为"); console.log(content); }); -}); + }); } }); @@ -76,55 +77,56 @@ function recordClientInfo(client){ } -所有的手机=[] +所有的手机 = [] + function t1() { var server = net.createServer() - server.on('connection', function(socket) { + server.on('connection', function (socket) { var t = config.getTime() - socket.write(t + "hello,i'm nodejs! giveMeMobileInfo"+"\r\n"); + socket.write(t + "hello,i'm nodejs! giveMeMobileInfo" + "\r\n"); console.log(t + "client connected! %j:%j", socket.remoteAddress, socket.remotePort); 所有的手机.push(socket) socket.on("customEvent", function (msg) { - console.log('Received customEvent->'+msg); + console.log('Received customEvent->' + msg); }); - socket.emit('customEvent','与on同级别 socket emit customEvent') + socket.emit('customEvent', '与on同级别 socket emit customEvent') socket.on("data", function (data) { - socket.emit('customEvent','data事件内部 socket emit customEvent') + socket.emit('customEvent', 'data事件内部 socket emit customEvent') var t = config.getTime() - var mobileInfo='' - if((data.toString()).indexOf('thisIsMobileInfo') != -1){ - var data=data.toString() - data=data.replace('thisIsMobileInfo','') - mobileInfo=JSON.parse(data) - mobileInfo.ip=socket.remoteAddress - mobileInfo.port=socket.remotePort - mobileInfo.客户端登记时间=t+"" + var mobileInfo = '' + if ((data.toString()).indexOf('thisIsMobileInfo') != -1) { + var data = data.toString() + data = data.replace('thisIsMobileInfo', '') + mobileInfo = JSON.parse(data) + mobileInfo.ip = socket.remoteAddress + mobileInfo.port = socket.remotePort + mobileInfo.客户端登记时间 = t + "" console.log("服务器收到的手机信息mobileInfo=") console.log(mobileInfo); console.table(mobileInfo); recordClientInfo(mobileInfo) - var scriptContent='alert(\''+ JSON.stringify(mobileInfo) +'\')' - if(mobileInfo){ - // socket.write("runScript"+scriptContent+"\r\n"); - // once=true + var scriptContent = 'alert(\'' + JSON.stringify(mobileInfo) + '\')' + if (mobileInfo) { + // socket.write("runScript"+scriptContent+"\r\n"); + // once=true - } + } } - if(removeBlank(data.toString()) == 'iHadRunScript'){ - console.log('手机执行脚本完毕->'+scriptContent); - }else if((data.toString()).indexOf('iHadRunScript') != -1){ - console.log('indexOf手机执行脚本完毕,手机传过来的数据==='+data.toString()+"==="); + if (removeBlank(data.toString()) == 'iHadRunScript') { + console.log('手机执行脚本完毕->' + scriptContent); + } else if ((data.toString()).indexOf('iHadRunScript') != -1) { + console.log('indexOf手机执行脚本完毕,手机传过来的数据===' + data.toString() + "==="); } console.log(t + "recived from autojs:", data.toString()); - socket.write(t + "这是来自nodejs的数据->海贼王啥时候完结??"+"\r\n"); + socket.write(t + "这是来自nodejs的数据->海贼王啥时候完结??" + "\r\n"); broadcast(data, socket) @@ -139,7 +141,7 @@ function t1() { socket.on("error", function (err) { console.log("!!!err!!!", err); }); - socket.on('end', function() { + socket.on('end', function () { 所有的手机.splice(所有的手机.indexOf(socket), 1); // 删除数组中的制定元素。这是 JS 基本功哦~ }) @@ -150,12 +152,12 @@ function t1() { function broadcast(message, client) { - var clientList=所有的手机 + var clientList = 所有的手机 var cleanup = [] - for(var i=0;i { - console.log('大头儿子收到小头爸爸发来的的消息->'+msg) - if(msg.indexOf("项目更新信息") != -1){ +process.on('message', (msg,手机唯一标识码) => { + console.log('大头儿子收到小头爸爸发来的的消息->' + msg) + if (msg.indexOf("项目更新信息") != -1) { + if (msg.indexOf("指定手机") != -1) { + 命令指定手机更新指定项目的脚本(msg,手机唯一标识码) + } else { + 命令所有手机更新指定项目的脚本(msg) + } - 命令所有手机更新指定项目的脚本(msg ) } @@ -202,14 +208,14 @@ process.on('message', (msg) => { // process.send('[worker] worker received!'); }); -function 命令所有手机更新指定项目的脚本(项目更新信息){ +function 命令所有手机更新指定项目的脚本(项目更新信息) { console.log("执行命令,所有手机更新指定项目的脚本"); - console.log("手机数量="+所有的手机.length); + console.log("手机数量=" + 所有的手机.length); - for(let i=0;i<所有的手机.length;i++){ - var socket=所有的手机[i] - socket.write("都起床,小头爸爸说,得更新脚本啦"+"\r\n"); - socket.write(项目更新信息+"\r\n"); + for (let i = 0; i < 所有的手机.length; i++) { + var socket = 所有的手机[i] + socket.write("都起床,小头爸爸说,得更新脚本啦" + "\r\n"); + socket.write(项目更新信息 + "\r\n"); console.log("本次通知手机对象%j:%j", socket.remoteAddress, socket.remotePort); @@ -225,3 +231,62 @@ function 命令所有手机更新指定项目的脚本(项目更新信息){ } console.log('已经通知了所有手机') } + + + + +function remoteAddress和手机唯一标识码是否对应(remoteAddress,手机唯一标识码){ + var fs = require('fs'); + var 客户端的手机信息 = fs.readFile('./clientInfo.json') + 客户端的手机信息=JSON.parse(客户端的手机信息) + var 手机ip=客户端的手机信息[手机唯一标识码].ip + if(remoteAddress.indexOf(手机ip) != -1){ + return true + } + return false + + +} + + + + + + + + +function 命令指定手机更新指定项目的脚本(项目更新信息, 手机唯一标识码) { + console.log("执行命令,指定手机更新指定项目的脚本"); + console.log("手机数量=" + 所有的手机.length); + //ip数组 + var 手机唯一标识码 = '项目更新信息' + + for (let j = 0; j < 手机唯一标识码.length; j++) { + for (let i = 0; i < 所有的手机.length; i++) { + var socket = 所有的手机[i] + //使用手机唯一标识码来指定手机 + + + if(remoteAddress和手机唯一标识码是否对应(socket.remoteAddress,手机唯一标识码[j])){ + + + socket.write("都起床,小头爸爸说,得更新脚本啦" + "\r\n"); + socket.write(项目更新信息 + "\r\n"); + + console.log("本次通知手机对象%j:%j", socket.remoteAddress, socket.remotePort); + + + } + + + + + + + + + + } + } + console.log('已经通知了指定手机') +} diff --git a/view/user.html b/view/user.html index 52bb36d..ff85241 100644 --- a/view/user.html +++ b/view/user.html @@ -50,6 +50,10 @@ width: 200px; height: 88px; } + #button_index_designate { + width: 200px; + height: 88px; + } #project_list { position: relative; @@ -108,8 +112,16 @@

+

+
+ +
+