+/jst_server-*.tgz
/node_modules
/yarn.lock
let fs_readFile = util.promisify(fs.readFile)
-let Server = function(caching) {
+let Server = function(socket_io, caching) {
if (!this instanceof Server)
throw Error('Server is a constructor')
+ this.socket_io = socket_io
this.caching = caching || false
this.site_cache = {}
this.mime_type_default = 'application/octet-stream'
}
+Server.prototype.attach = function(server, protocol) {
+ server.on(
+ 'request',
+ (request, response) =>
+ this.respond(request, response, protocol) // ignore returned promise
+ )
+ if (this.socket_io !== undefined)
+ this.socket_io.attach(server)
+}
+
Server.prototype.refresh_config = async function() {
this.sites = await this.build_cache_json.get(
'config/sites.json',
throw err
site_factory = site_factory_default
}
- let site
+ let site = undefined
if (
!Object.prototype.hasOwnProperty.call(this.site_cache, temp.root) ||
(site = this.site_cache[temp.root]).factory !== site_factory
) {
+ if (site !== undefined)
+ for (let i of site.object.socket_io_connect_listeners) {
+ assert(this.socket_io !== undefined)
+ this.socket_io.removeListener('connect', i)
+ }
site = {
factory: site_factory,
object: await site_factory(this, temp.root)
}
+ for (let i of site.object.socket_io_connect_listeners) {
+ assert(this.socket_io !== undefined)
+ this.socket_io.on('connect', i)
+ }
this.site_cache[temp.root] = site
}
await site.object.respond(
throw Error('Site is a constructor')
this.server = server
this.root = root
+ this.socket_io_connect_listeners = []
}
Site.prototype.get_email = function(path) {
--- /dev/null
+exports.Server = require('./Server')
+exports.Site = require('./Site')
#!/usr/bin/env node
let Server = require('./Server')
+let SocketIO = require('socket.io')
let commander = require('commander')
let fs = require('fs')
let http = require('http')
8443
).parse(process.argv)
-let server = new Server(commander.enableCaching)
+let server = new Server(new SocketIO(), commander.enableCaching)
if (commander.httpPort !== -1) {
- let http_server = http.createServer(
- (request, response) =>
- server.respond(request, response, 'http:') // ignore returned promise
- )
+ let http_server = http.createServer()
+ server.attach(http_server, 'http:')
http_server.listen(commander.httpPort)
console.log('HTTP server listening on port', commander.httpPort)
}
{
'cert': fs.readFileSync(commander.sslCert),
'key': fs.readFileSync(commander.sslKey)
- },
- (request, response) =>
- server.respond(request, response, 'https:') // ignore returned promise
+ }
)
+ server.attach(https_server, 'https:')
https_server.listen(commander.httpsPort)
console.log('HTTPS server listening on port', commander.httpsPort)
}
"name": "jst_server",
"version": "1.0.0",
"description": "Web server using JavaScript template system",
- "main": "jst_server.js",
+ "main": "index.js",
"directories": {},
"dependencies": {
- "BuildCache": "../build_cache.git/BuildCache-v1.0.0.tgz",
- "JSONCache": "../json_cache.git/JSONCache-v1.0.0.tgz",
+ "BuildCache": "/home/nick/src/build_cache.git/BuildCache-v1.0.0.tgz",
+ "JSONCache": "/home/nick/src/json_cache.git/JSONCache-v1.0.0.tgz",
"babel-cli": "^6.26.0",
"commander": "^2.18.0",
"cookie": "^0.3.1",
"fs": "^0.0.1-security",
"http": "^0.0.0",
"https": "^1.0.0",
- "js_template": "../js_template.git/acorn/js_template-v6.0.2.tgz",
+ "js_template": "/home/nick/src/js_template.git/acorn/js_template-v6.0.2.tgz",
"less": "^3.8.1",
"querystring": "^0.2.0",
+ "socket.io": "^2.1.1",
"stream-buffers": "^3.0.2",
"url": "^0.11.0",
"xdate": "^0.8.2",
"yauzl": "^2.10.0",
- "zetjs": "../zettair.git/src/zetjs/zetjs-v1.0.0.tgz"
+ "zetjs": "/home/nick/src/zettair.git/src/zetjs/zetjs-v1.0.0.tgz"
},
"devDependencies": {},
"scripts": {},
"author": "Nick Downing",
- "license": "GPL-3.0"
+ "license": "GPL-3.0",
+ "bin": {
+ "jst_server": "jst_server.js"
+ }
}