Agent.js 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. /**
  2. * @author oldj
  3. * @blog https://oldj.net
  4. */
  5. 'use strict'
  6. const IS_DEV = process.env.ENV === 'dev'
  7. const {ipcRenderer} = require('electron')
  8. const platform = process.platform
  9. const EventEmitter = require('events')
  10. class MyEmitter extends EventEmitter {}
  11. const evt = new MyEmitter()
  12. const max_listener_count = 20
  13. evt.setMaxListeners(max_listener_count)
  14. ipcRenderer.setMaxListeners(max_listener_count)
  15. let x_get_idx = 0
  16. /**
  17. * act
  18. * @param action {String}
  19. * @param args {Array}
  20. */
  21. function act (action, ...args) {
  22. let fn = ['_cb', (new Date()).getTime(), (x_get_idx++)].join('_')
  23. let callback
  24. if (args.length > 0 && typeof args[args.length - 1] === 'function') {
  25. callback = args.pop()
  26. }
  27. if (typeof callback === 'function') {
  28. ipcRenderer.once(fn, (e, d) => callback.apply(null, d))
  29. }
  30. ipcRenderer.send('x', {
  31. action
  32. , data: args
  33. , callback: fn
  34. })
  35. }
  36. function pact (action, ...args) {
  37. return new Promise((resolve, reject) => {
  38. args.push((err, result) => err ? reject(err) : resolve(result))
  39. act(action, ...args)
  40. })
  41. }
  42. module.exports = {
  43. IS_DEV
  44. , platform
  45. , act
  46. , pact
  47. , on: (...args) => evt.on(...args)
  48. , emit: (...args) => evt.emit(...args)
  49. }