try {
   var autobahn = require('autobahn');
   var when = require('when');
} catch (e) {
   // When running in browser, AutobahnJS will
   // be included without a module system
   var when = autobahn.when;
}

var connection = new autobahn.Connection({
   url: 'ws://127.0.0.1:8080/ws',
   realm: 'realm1'}
);

connection.onopen = function (session) {

   function on_event(val) {
      console.log("Someone requested to square non-positive:", val);
   }

   session.subscribe('com.myapp.square_on_nonpositive', on_event);

   var dl = [];

   var vals = [2, 0, -2];
   for (var i = 0; i < vals.length; ++i) {

      dl.push(session.call('com.myapp.square', [vals[i]], {}, {disclose_me: true}).then(
         function (res) {
            console.log("Squared", res);
         },
         function (error) {
            console.log("Call failed:", error);
         }
      ));
   }

   when.all(dl).then(
      function () {
         console.log("All finished.");
      },
      function () {
         console.log("Error", arguments);
      });
};

connection.open();
