gaoshuaixing 5 年之前
父节点
当前提交
5831ff9bba
共有 3 个文件被更改,包括 97 次插入0 次删除
  1. 89 0
      electron/api.js
  2. 6 0
      electron/apis/test.js
  3. 2 0
      electron/setup.js

+ 89 - 0
electron/api.js

@@ -0,0 +1,89 @@
+'use strict';
+const fs = require('fs');
+const http = require('http');
+const path = require('path');
+const _ = require('lodash');
+
+const apis = {};
+
+exports.setup = function () {
+  ELog.info('[api] [setup]');
+  setApi();
+
+  // use monitor server
+  const mConfig = {};
+  const listen = mConfig.listen || '0.0.0.0';
+  const port = 7069;
+  const timeout = 10000;
+
+  const server = http.createServer(function(req, res) {
+    ELog.info('[ Monitor ] command received', { method: req.method, url: req.url });
+    if ((req.method === 'POST' && req.url === '/send')) {
+
+      let body = '';
+      req.setEncoding('utf8');
+      req
+      .on('data', function(data) {
+        body += data;
+      })
+      .on('end', function() {
+        let message;
+        try {
+          message = JSON.parse(body);
+        } catch (e) {
+          res.statusCode = 400;
+          return res.end('request body parse failure.');
+        }
+        if (!apis[message.cmd]) {
+          ELog.info('[ Monitor ] invalid command called:', message.cmd);
+          res.statusCode = 404;
+          return res.end('NG');
+        }
+
+        const start = Date.now();
+        const data = apis[message.cmd]();
+        const elapsed = Date.now() - start;
+        ELog.info(`monitor api [${message.cmd}] success. elapsed: ${elapsed}ms`, data);
+        res.statusCode = 200;
+        const result = {
+          code: 0,
+          data,
+        };
+        res.end(JSON.stringify(result));
+      });
+    } else {
+      res.statusCode = 404;
+      res.end('NOT FOUND');
+    }
+  });
+
+  server.listen(port, listen, function() {
+    ELog.info('[ Monitor ] server is listening on', `${listen}:${port}`);
+  });  
+};
+
+function setApi() {
+  const apiDir = path.normalize(__dirname + '/apis');
+  console.log('apiDir:', apiDir);
+  fs.readdirSync(apiDir).forEach(function(filename) {
+    if (path.extname(filename) === '.js' && filename !== 'index.js') {
+      const name = path.basename(filename, '.js');
+      //const file = apiDir + filename;
+      _.map(require(`./apis/${filename}`), function(fn, method) {
+        let methodName = getApiName(name, method);
+        apis[methodName] = fn;
+        ELog.info('[ Monitor ]', methodName);
+      });
+    }
+  });
+};
+
+/**
+ * get api method name for proteus-web
+ * ex.) jsname='user' method='get' => 'userGet'
+ * @param {String} jsname
+ * @param {String} method
+ */
+function getApiName (jsname, method) {
+  return jsname + method.charAt(0).toUpperCase() + method.slice(1);
+};

+ 6 - 0
electron/apis/test.js

@@ -0,0 +1,6 @@
+'use strict';
+
+exports.info = function() {
+  console.log('test api info');
+  return true;
+};

+ 2 - 0
electron/setup.js

@@ -4,11 +4,13 @@ global.ELog = require('electron-log');
 const storage = require('./storage');
 const storage = require('./storage');
 const config = require('./config');
 const config = require('./config');
 const autoUpdater = require('./autoUpdater');
 const autoUpdater = require('./autoUpdater');
+const api = require('./api');
 
 
 module.exports = () => {
 module.exports = () => {
   storage.setup();
   storage.setup();
   logger();
   logger();
   autoUpdater.setup();
   autoUpdater.setup();
+  api.setup();
 }
 }
 
 
 function logger () {
 function logger () {