Source: Transports/browser/MessageChannel.js

var ElementReader = require("ndn-lib/js/encoding/element-reader.js").ElementReader;
var Transport = require("ndn-lib/js/transport/transport.js").Transport;
var debug = {};
debug.debug = require("debug")("MessageChannelTransport");


/**Transport Class for HTML5 MessageChannels
 *@constructor
 *@param {MessageChannel_Port} port one end of an HTML MessageChannel
 *@returns {MessageChannelTransport}
 */
function MessageChannelTransport (port) {
  debug.debug("constructor");
  Transport.call(this);
  this.connectionInfo = new MessageChannelTransport.ConnectionInfo(port);
  return this;
}


MessageChannelTransport.prototype = new Transport();
MessageChannelTransport.prototype.name = "MessageChannelTransport";

MessageChannelTransport.ConnectionInfo = function MessageChannelTransportConnectionInfo(port){
  Transport.ConnectionInfo.call(this);
  this.port = port;
};

MessageChannelTransport.ConnectionInfo.prototype = new Transport.ConnectionInfo();
MessageChannelTransport.ConnectionInfo.prototype.name = "MessageChannelTransport.ConnectionInfo";

MessageChannelTransport.ConnectionInfo.prototype.getPort = function()
{
  return this.port;
};

MessageChannelTransport.ConnectionInfo.prototype.equals = function(other)
{
  if (other === null || other.port === undefined){
    return false;
  }
  return (this.port === other.port);
};

/**Set the event listener for incoming elements
 *@param {Object} face the ndn.Face object that this transport is attached to
 *@param {function} onopenCallback a callback to be performed once the transport is open
 */
MessageChannelTransport.prototype.connect = function(connectionInfo, elementListener, onopenCallback, onclosedCallback)
{
  debug.debug("connect");
  this.elementReader = new ElementReader(elementListener);
  var self = this;
  connectionInfo.getPort().onmessage = function(ev) {
    debug.debug("onmessage called");
    if (ev.data.buffer instanceof ArrayBuffer) {
      try {
        self.elementReader.onReceivedData(new Buffer(ev.data));
      } catch (ex) {
        debug.debug(" onmessage exception: %s", ex);
        return;
      }
    }
  };
  //elementListener.readyStatus = 2
  onopenCallback();
};

/**Send the Uint8Array data.
 *@param {Buffer} element the data packet
 */
MessageChannelTransport.prototype.send = function(element)
{
  debug.debug("send");
  this.connectionInfo.getPort().postMessage(element);
};

module.exports = MessageChannelTransport;