| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209 | 
							- var Immutable = require("immutable");
 
- var url = require("url");
 
- module.exports = {
 
-     /**
 
-      * The UI uses it's own server/port
 
-      * @param ui
 
-      * @param done
 
-      */
 
-     findAFreePort: function (ui, done) {
 
-         var port = ui.options.get("port");
 
-         var listenHost = ui.options.get("listen", "localhost");
 
-         ui.bs.utils.portscanner.findAPortNotInUse(port, port + 100, {
 
-             host: listenHost,
 
-             timeout: 1000
 
-         }, function (err, port) {
 
-             if (err) {
 
-                 return done(err);
 
-             }
 
-             done(null, {
 
-                 options: {
 
-                     port: port
 
-                 }
 
-             });
 
-         });
 
-     },
 
-     /**
 
-      * Default hooks do things like creating/joining JS files &
 
-      * building angular config
 
-      * @param ui
 
-      * @param done
 
-      */
 
-     initDefaultHooks: function (ui, done) {
 
-         var out = ui.pluginManager.hook("page", ui);
 
-         done(null, {
 
-             instance: {
 
-                 clientJs:    ui.pluginManager.hook("client:js", ui),
 
-                 templates:   ui.pluginManager.hook("templates", ui.getInitialTemplates(), ui),
 
-                 pagesConfig: out.pagesConfig,
 
-                 pages:       out.pagesObj,
 
-                 pageMarkup:  out.pageMarkup
 
-             }
 
-         });
 
-     },
 
-     setBsOptions: function (ui, done) {
 
-         done(null, {
 
-             options: {
 
-                 bs: Immutable.Map({
 
-                     mode: ui.bs.options.get("mode"),
 
-                     port: ui.bs.options.get("port")
 
-                 })
 
-             }
 
-         });
 
-     },
 
-     /**
 
-      * @param ui
 
-      * @param done
 
-      */
 
-     setUrlOptions: function (ui, done) {
 
-         var port        = ui.options.get("port");
 
-         var bsUrls      = ui.bs.getOptionIn(["urls"]).toJS();
 
-         var listenHost  = ui.bs.options.get("listen", "localhost");
 
-         var urls        = {
 
-             ui: "http://" + listenHost + ":" + port
 
-         };
 
-         if (bsUrls.external) {
 
-             var externalListen = listenHost || url.parse(bsUrls.external).hostname;
 
-             urls["ui-external"] = ["http://", externalListen, ":", port].join("");
 
-         }
 
-         done(null, {
 
-             options: {
 
-                 urls: Immutable.fromJS(urls)
 
-             }
 
-         });
 
-     },
 
-     /**
 
-      * Simple static file server with some middlewares for custom
 
-      * scripts/routes.
 
-      * @param ui
 
-      * @param done
 
-      */
 
-     startServer: function (ui, done) {
 
-         var bs          = ui.bs;
 
-         var port        = ui.options.get("port");
 
-         var listenHost  = ui.options.get("listen");
 
-         ui.logger.debug("Using port %s", port);
 
-         var server = require("./server")(ui, {
 
-             middleware: {
 
-                 socket: bs.getMiddleware("socket-js"),
 
-                 connector: bs.getSocketConnector(bs.options.get("port"), {
 
-                     path: bs.options.getIn(["socket", "path"]),
 
-                     namespace: ui.config.getIn(["socket", "namespace"])
 
-                 })
 
-             }
 
-         });
 
-         require('server-destroy')(server.server);
 
-         bs.registerCleanupTask(function () {
 
-             if (server.server) {
 
-                 server.server.destroy();
 
-             }
 
-             if (ui.servers) {
 
-                 Object.keys(ui.servers).forEach(function (key) {
 
-                     if (ui.servers[key].server) {
 
-                         ui.servers[key].server.destroy();
 
-                     }
 
-                 });
 
-             }
 
-         });
 
-         done(null, {
 
-             instance: {
 
-                 server: server.server.listen(port, listenHost),
 
-                 app: server.app
 
-             }
 
-         });
 
-     },
 
-     /**
 
-      * Allow an API for adding/removing elements to clients
 
-      * @param ui
 
-      * @param done
 
-      */
 
-     addElementEvents: function (ui, done) {
 
-         var elems = ui.pluginManager.hook("elements");
 
-         var bs    = ui.bs;
 
-         if (!Object.keys(elems).length) {
 
-             return done();
 
-         }
 
-         ui.setOption("clientFiles", Immutable.fromJS(elems));
 
-         done(null, {
 
-             instance: {
 
-                 enableElement:  require("./client-elements").enable(ui.clients, ui, bs),
 
-                 disableElement: require("./client-elements").disable(ui.clients, ui, bs),
 
-                 addElement:     require("./client-elements").addElement
 
-             }
 
-         });
 
-     },
 
-     /**
 
-      * Run default plugins
 
-      * @param ui
 
-      * @param done
 
-      */
 
-     registerPlugins: function (ui, done) {
 
-         Object.keys(ui.defaultPlugins).forEach(function (key) {
 
-             ui.pluginManager.get(key)(ui, ui.bs);
 
-         });
 
-         done();
 
-     },
 
-     /**
 
-      * The most important event is the initial connection where
 
-      * the options are received from the socket
 
-      * @param ui
 
-      * @param done
 
-      */
 
-     addOptionsEvent: function (ui, done) {
 
-         var bs = ui.bs;
 
-         ui.clients.on("connection", function (client) {
 
-             client.emit("ui:connection", ui.options.toJS());
 
-             ui.options.get("clientFiles").map(function (item) {
 
-                 if (item.get("active")) {
 
-                     ui.addElement(client, item.toJS());
 
-                 }
 
-             });
 
-         });
 
-         ui.socket.on("connection", function (client) {
 
-             client.emit("connection", bs.getOptions().toJS());
 
-             client.emit("ui:connection", ui.options.toJS());
 
-             client.on("ui:get:options", function () {
 
-                 client.emit("ui:receive:options", {
 
-                     bs: bs.getOptions().toJS(),
 
-                     ui: ui.options.toJS()
 
-                 });
 
-             });
 
-             // proxy client events
 
-             client.on("ui:client:proxy", function (evt) {
 
-                 ui.clients.emit(evt.event, evt.data);
 
-             });
 
-             client.on("ui", function (data) {
 
-                 ui.delegateEvent(data);
 
-             });
 
-         });
 
-         done();
 
-     }
 
- };
 
 
  |