EventEmitter = require('events').EventEmitter send = process.atomBinding('ipc').send sendWrap = (channel, processId, routingId, args...) -> BrowserWindow = require 'browser-window' if processId?.constructor is BrowserWindow window = processId args = [routingId, args...] processId = window.getProcessId() routingId = window.getRoutingId() send channel, processId, routingId, [args...] class Ipc extends EventEmitter constructor: -> process.on 'ATOM_INTERNAL_MESSAGE', (args...) => @emit(args...) process.on 'ATOM_INTERNAL_MESSAGE_SYNC', (channel, event, args...) => set = (value) -> event.sendReply JSON.stringify(value) Object.defineProperty event, 'returnValue', {set} Object.defineProperty event, 'result', {set} @emit(channel, event, args...) send: (processId, routingId, args...) -> @sendChannel(processId, routingId, 'message', args...) sendChannel: (args...) -> sendWrap('ATOM_INTERNAL_MESSAGE', args...) module.exports = new Ipc