31 lines
		
	
	
	
		
			985 B
			
		
	
	
	
		
			CoffeeScript
		
	
	
	
	
	
			
		
		
	
	
			31 lines
		
	
	
	
		
			985 B
			
		
	
	
	
		
			CoffeeScript
		
	
	
	
	
	
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
 | 
						|
    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
 |