     else
       @nodeInstance.outPorts[port].sendIP ip
 
+  # Sends packets for each port as a key in the map
+  # or sends Error or a list of Errors if passed such
   send: (outputMap) ->
     if @nodeInstance.ordered and
     not ('__resolved' of @result)

    res = (@ports[port].get @scope for port in arguments)
    if arguments.length is 1 then res[0] else res

  getData: ->
    ips = @get.apply this, arguments
    if arguments.length is 1
      return ips?.data ? undefined

  constructor: (@ports, @ip, @nodeInstance, @port, @result) ->
    @scope = @ip.scope

  # Sets component state to `activated`
  activate: ->
    @result.__resolved = false
    if @nodeInstance.ordered
      @nodeInstance.outputQ.push @result

  # Returns true if a port (or ports joined by logical AND) has a new IP
  has: (port = 'in') ->
    res = true
    res and= @ports[port].ready @scope for port in arguments
    res

  # Fetches IP object(s) for port(s)
  get: (port = 'in') ->
    if @nodeInstance.ordered and
    @nodeInstance.activateOnInput and
    not ('__resolved' of @result)
