gaoshuaixing před 5 roky
rodič
revize
100b16152e

+ 6 - 0
app/const/storageKey.js

@@ -0,0 +1,6 @@
+'use strict';
+
+module.exports = {
+  EGG_CONFIG: 'egg_config',
+  ELECTRON_IPC: 'electron_ipc',
+};

+ 21 - 0
app/controller/v1/example.js

@@ -0,0 +1,21 @@
+'use strict';
+
+const BaseController = require('../base'); 
+
+class ExampleController extends BaseController {
+
+  async openLocalDir() {
+    const self = this;
+    const { ctx } = this;
+
+    const data = {
+      title: 'example test'
+    };
+
+    await service.example.openLocalDir();
+
+    self.sendSuccess(data);
+  }
+}
+
+module.exports = ExampleController;

+ 10 - 0
app/router/example.js

@@ -0,0 +1,10 @@
+'use strict';
+
+/**
+ * @param {Egg.Application} app - egg application
+ */
+module.exports = app => {
+  const { router, controller } = app;
+  // open local dir
+  router.post('/api/v1/example/openLocalDir', controller.v1.example.openLocalDir);
+};

+ 1 - 0
app/router/index.js

@@ -15,5 +15,6 @@ module.exports = app => {
   router.get('/home', controller.v1.home.index);
 
   // 引入其他路由
+  require('./example')(app);
   require('./setting')(app);
 };

+ 21 - 1
app/service/base.js

@@ -1,9 +1,29 @@
 'use strict';
 
+const request = require('superagent');
 const Service = require('egg').Service;
 
 class BaseService extends Service {
-  // base
+  /*
+   * ipc call
+   */
+  async ipcCall(method = '', data = {}) {
+    if (!method) {
+      return 'Method does not exist';
+    }
+    const res = {};
+    const port = this.service.storage.getElectronIPCPort();
+    const url  = 'localhost:' + port + '/send';
+    try {
+      res = await request.post(url)
+        .send({ cmd: method, data: data });
+      console.log(res);
+    } catch (err) {
+      console.error(err);
+    }
+
+    return res;
+  }
 }
 
 module.exports = BaseService;

+ 15 - 0
app/service/example.js

@@ -0,0 +1,15 @@
+'use strict';
+
+const BaseService = require('./base');
+
+class ExampleService extends BaseService {
+  async openLocalDir() {
+    const self = this;
+
+    await self.ipcCall('example.getPath');
+
+    return true;
+  }
+}
+
+module.exports = ExampleService;

+ 46 - 0
app/service/storage.js

@@ -0,0 +1,46 @@
+'use strict';
+
+const BaseService = require('./base');
+const path = require('path');
+const _ = require('lodash');
+const lowdb = require('lowdb');
+const FileSync = require('lowdb/adapters/FileSync');
+const storageKey = require('../const/storageKey');
+const fs = require('fs');
+const os = require('os');
+const storageDir = path.normalize(os.homedir() + '/electron-egg-storage/');
+
+class StorageService extends BaseService {
+  /*
+   * instance
+   */
+  instance(file = null) {
+    if (!file) {
+        file = path.normalize(storageDir +'db.json');
+    }
+    const isExist = fs.existsSync(file);
+    if (!isExist) {
+        return null;
+    }
+  
+    const adapter = new FileSync(file);
+    const db = lowdb(adapter);
+  
+    return db;
+  }
+
+  /*
+   * getElectronIPCPort
+   */
+  getElectronIPCPort() {
+    const key = storageKey.ELECTRON_IPC + 'port';
+    const port = this.instance()
+    .get(key)
+    .value();
+  
+    return port;
+  }
+
+}
+
+module.exports = StorageService;

+ 5 - 5
electron/api.js

@@ -5,7 +5,6 @@ const path = require('path');
 const _ = require('lodash');
 const storage = require('./storage');
 
-
 const apis = {};
 
 exports.setup = async function () {
@@ -13,7 +12,7 @@ exports.setup = async function () {
   setApi();
 
   // use api server
-  let port = await storage.setApiDynamicPort();
+  let port = await storage.setIpcDynamicPort();
   console.log('api port:', port);
   const listen = 'localhost';
   port = port ? port : 7069;
@@ -80,11 +79,12 @@ function setApi() {
 };
 
 /**
- * get api method name for proteus-web
- * ex.) jsname='user' method='get' => 'userGet'
+ * get api method name
+ * ex.) jsname='user' method='get' => 'user.get'
  * @param {String} jsname
  * @param {String} method
  */
 function getApiName (jsname, method) {
-  return jsname + method.charAt(0).toUpperCase() + method.slice(1);
+  return jsname + '.' + method;
+  //return jsname + method.charAt(0).toUpperCase() + method.slice(1);
 };

+ 19 - 0
electron/apis/example.js

@@ -0,0 +1,19 @@
+'use strict';
+
+const {app} = require('electron');
+
+exports.getPath = function () {
+  const dir = app.getAppPath();
+  ELog.info('dir:', dir);
+
+  return dir;
+}
+
+exports.openDir = function () {
+  const dir = app.getAppPath();
+  ELog.info('dir:', dir);
+
+  return dir;
+}
+
+exports = module.exports;

+ 0 - 19
electron/apis/test.js

@@ -1,19 +0,0 @@
-'use strict';
-
-exports.info = function() {
-  console.log('test api info');
-  return true;
-};
-
-// class Test {
-//   constructor() {
-//     this.name = 'test';
-//   }
-
-//   info () {
-//     console.log('test api info');
-//     return true;
-//   };
-// }
-
-// module.exports = Test;

+ 0 - 4
electron/config.js

@@ -39,10 +39,6 @@ const config = {
       provider: 'generic', // or github, s3, bintray
       url: 'https://raw.githubusercontent.com/wallace5303/electron-egg/master/' // resource dir
     }
-  },
-  electronApi: {
-    port: 7069,
-    hostname: '0.0.0.0',
   }
 }
 

+ 11 - 7
electron/storage.js

@@ -6,6 +6,7 @@ const FileSync = require('lowdb/adapters/FileSync');
 const fs = require('fs');
 const getPort = require('get-port');
 const utils = require('../app/utils/utils');
+const storageKey = require('../app/const/storageKey');
 const os = require('os');
 const storageDir = path.normalize(os.homedir() + '/electron-egg-storage/');
 
@@ -18,9 +19,9 @@ exports.setup = function () {
   const file = storageDir + 'db.json';
   const adapter = new FileSync(file);
   const db = lowdb(adapter);
-
-  if (!db.has('egg_config').value()) {
-    db.set('egg_config', {}).write();
+  const eggConfigKey = storageKey.EGG_CONFIG;
+  if (!db.has(eggConfigKey).value()) {
+    db.set(eggConfigKey, {}).write();
   }
 
   return true;
@@ -42,8 +43,9 @@ exports.instance = function (file = null) {
 };
 
 exports.getEggConfig = function () {
+  const key = storageKey.EGG_CONFIG;
   const res = this.instance()
-  .get('egg_config')
+  .get(key)
   .value();
 
   return res;
@@ -54,17 +56,19 @@ exports.setDynamicPort = async function () {
   // console.log('setDynamicPort eggConfig:', eggConfig);
   // const dynamicPort = await getPort({port: eggConfig.port})
   const dynamicPort = await getPort();
+  const key = storageKey.EGG_CONFIG + '.port';
   const res = this.instance()
-    .set('egg_config.port', dynamicPort)
+    .set(key, dynamicPort)
     .write();
   
   return res;
 };
 
-exports.setApiDynamicPort = async function () {
+exports.setIpcDynamicPort = async function () {
+  const key = storageKey.ELECTRON_IPC + '.port';
   const dynamicPort = await getPort();
   this.instance()
-    .set('electron_api.port', dynamicPort)
+    .set(key, dynamicPort)
     .write();
   
   return dynamicPort;

+ 2 - 1
package.json

@@ -113,6 +113,7 @@
     "glob": "^7.1.6",
     "lodash": "^4.17.11",
     "lowdb": "^1.0.0",
-    "semver": "^5.4.1"
+    "semver": "^5.4.1",
+    "superagent": "^6.1.0"
   }
 }