
{EventEmitter} = require 'events'
{ABComm} = require '../src/appborg'
{encodeLine, decodeLine} = require '../src/appborg_util'
LineStream = require 'linestream'


class Portal extends EventEmitter
  constructor: () ->
    super()
  
  write: (data) ->
    @emit 'data', data
  
  end: (data) ->
    if data
      @write data
    @emit 'end'


EVENTS_OUT = []

input = new EventEmitter
output = new Portal

comm = new ABComm input:input, output:output
comm.on 'oh-hai', (x) ->
comm.on 'error-please', (x) -> throw new Error "OH NOES"


ls = new LineStream output
ls.on 'data', (line) ->
  event = decodeLine line
  EVENTS_OUT.push event
  console.log '>>>', event


comm.send 'set-password', {password: 'hunter2'}, () ->
  console.log 'k, got response'


input.emit 'data', encodeLine {
  id: 1
  from: 'zaphod'
  to: 'subprocess'
  error: null
  result: {}
}

input.emit 'data', encodeLine {
  method: 'oh-hai'
  info: {}
  from: 'zaphod'
  id: 100
}

input.emit 'data', encodeLine {
  method: 'error-please'
  info: {}
  from: 'zaphod'
  id: 101
}

