bonescriptjtjk
Version:
Physical computing library for embedded Linux
67 lines (58 loc) • 2.19 kB
JavaScript
// Copyright (C) 2011 - Texas Instruments, Jason Kridner
//
//
var fs = require('fs');
var http = require('http');
var winston = require('winston');
var express = require('express');
var events = require('events');
var socketHandlers = require('./socket_handlers');
var serverEmitter = new events.EventEmitter();
var debug = process.env.DEBUG ? true : false;
myrequire('systemd', function() {
if(debug) winston.debug("Startup as socket-activated service under systemd not enabled");
});
exports.serverStart = function(port, directory, callback) {
if(port === undefined) {
port = (process.env.LISTEN_PID > 0) ? 'systemd' : ((process.env.PORT) ? process.env.PORT : 80);
}
if(directory === undefined) {
directory = (process.env.SERVER_DIR) ? process.env.SERVER_DIR : '/usr/share/bone101';
}
var server = mylisten(port, directory);
serverEmitter.on('newListner', addServerListener);
function addServerListener(event, listener) {
console.log('got here'); //TODO: not getting here
if(debug) winston.debug('Got request to add listener to ' + event);
var serverEvent = event.replace(/^server\$/, '');
if(serverEvent) {
if(debug) winston.debug('Adding listener to server$' + serverEvent);
server.on(serverEvent, listener);
}
}
return(serverEmitter);
};
function mylisten(port, directory) {
winston.info("Opening port " + port + " to serve up " + directory);
var app = express();
app.get('/bonescript.js', socketHandlers.socketJSReqHandler);
app.use('/bone101', express.static(directory));
app.use('/bone101/static', express.static(directory+"/static"));
app.use(express.static(directory));
var server = http.createServer(app);
socketHandlers.addSocketListeners(server, serverEmitter);
server.listen(port);
return(server);
}
function myrequire(packageName, onfail) {
var y = {};
try {
y = require(packageName);
y.exists = true;
} catch(ex) {
y.exists = false;
if(debug) winston.debug("Optional package '" + packageName + "' not loaded");
if(onfail) onfail();
}
return(y);
}