ipc.js 1018 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. const ipc = require('@achrinza/node-ipc')
  2. // Utils
  3. const { log, dumpObject } = require('../util/logger')
  4. ipc.config.id = process.env.VUE_CLI_IPC || 'vue-cli'
  5. ipc.config.retry = 1500
  6. ipc.config.silent = true
  7. const listeners = []
  8. ipc.serve(() => {
  9. ipc.server.on('message', (data, socket) => {
  10. log('IPC message', dumpObject(data))
  11. for (const listener of listeners) {
  12. listener({
  13. data,
  14. emit: data => {
  15. ipc.server.emit(socket, 'message', data)
  16. }
  17. })
  18. }
  19. })
  20. ipc.server.on('ack', (data, socket) => {
  21. log('IPC ack', dumpObject(data))
  22. if (data.done) {
  23. ipc.server.emit(socket, 'ack', { ok: true })
  24. }
  25. })
  26. })
  27. ipc.server.start()
  28. function on (cb) {
  29. listeners.push(cb)
  30. return () => off(cb)
  31. }
  32. function off (cb) {
  33. const index = listeners.indexOf(cb)
  34. if (index !== -1) listeners.splice(index, 1)
  35. }
  36. function send (data) {
  37. log('IPC send', dumpObject(data))
  38. ipc.server.broadcast('message', data)
  39. }
  40. module.exports = {
  41. on,
  42. off,
  43. send
  44. }