{EventEmitter} = require 'events'

binding = process.atomBinding 'ipc'
v8Util  = process.atomBinding 'v8_util'

# Created by init.coffee.
ipcRenderer = v8Util.getHiddenValue global, 'ipc'

# Delay the callback to next tick in case the browser is still in the middle
# of sending a message while the callback sends a sync message to browser,
# which can fail sometimes.
ipcRenderer.emit = (args...) ->
  setTimeout (-> EventEmitter::emit.call ipcRenderer, args...), 0

ipcRenderer.send = (args...) ->
  binding.send 'ipc-message', [args...]

ipcRenderer.sendSync = (args...) ->
  JSON.parse binding.sendSync('ipc-message-sync', [args...])

ipcRenderer.sendToHost = (args...) ->
  binding.send 'ipc-message-host', [args...]

module.exports = ipcRenderer