freedomjs/freedom

View on GitHub
demo/customchannel/main.js

Summary

Maintainability
A
0 mins
Test Coverage
/*jslint sloppy:true */
/*globals freedom */
var friend = freedom.friend();
var af = freedom.altfriend();
var core = freedom.core();

var channels = {};
var id = 0;

var page = freedom();
page.on('create', function () {
  var thisid = id;
  id += 1;

  page.emit('message', 'creating custom channel ' + thisid);
  core.createChannel().then(function (id, cinfo) {
    channels[id] = cinfo.channel;
    channels[id].on('message', function (msg) {
      page.emit('message', msg);
    });
    friend.emit('message', {
      cmd: 'create',
      id: id,
      chan: cinfo.identifier
    });
  }.bind(this, thisid));
});

page.on('destroy', function (id) {
  page.emit('message', 'destroying channel ' + id);
  channels[id].close();
  delete channels[id];
  friend.emit('message', {
    cmd: 'destroy',
    id: id
  });
});

page.on('message', function (id) {
  page.emit('message', 'sending message to ' + id);
  channels[id].emit('message', 'Message to chan ' + id);
});

page.on('alternative', function (q) {
  af.testMethod(q).then(function (answer) {
    page.emit('message', 'got: ' + answer);
  });
});

page.on('peer', function () {
  var thisid = id;
  id += 1;
  core.createChannel().then(function (cinfo) {
    var peer = freedom['core.echo']();
    peer.on('message', function (str) {
      page.emit('message', "from provider: " + JSON.stringify(str));
    });

    channels[thisid] = cinfo.channel;
    channels[thisid].on('message', function (m) {
      page.emit('message', "from custom: " + JSON.stringify(m));
    });
    channels[thisid].onClose(function () {
      freedom['core.echo'].close(peer);
    });

    peer.setup(cinfo.identifier);
  });
});

page.on('mkerr', function () {
  throw new Error("I am a custom error");
});

friend.on('message', function (str) {
  page.emit('message', str);
});

page.on('req', function(url) {
  page.emit('message', 'requiring ' + url);
  core.require(url).then(function (Dependency) {
    var d = new Dependency();
    page.emit('message', 'has methods: ' + JSON.stringify(Object.keys(d)));
  }, function (err) {
    page.emit('message', 'Failed to load: ' + err);
  });
});