|
| 1 | +#!/usr/bin/env node |
| 2 | + |
| 3 | +var answers = require('./lib/create-answers') |
| 4 | +var live = require('glslify-live/server') |
| 5 | +var exercises = require('./exercises') |
| 6 | +var styles = require('./style') |
| 7 | +var opener = require('opener') |
| 8 | +var beefy = require('beefy') |
| 9 | +var http = require('http') |
| 10 | +var path = require('path') |
| 11 | +var url = require('url') |
| 12 | +var fs = require('fs') |
| 13 | + |
| 14 | +var livePort = Number(process.env.GLSLIFY_LIVE_PORT = 12491) |
| 15 | +var mainPort = 12492 |
| 16 | + |
| 17 | +module.exports = createServer |
| 18 | + |
| 19 | +createServer(process.cwd()) |
| 20 | + |
| 21 | +function createServer(root) { |
| 22 | + console.error(fs.readFileSync( |
| 23 | + __dirname + '/intro.txt', 'utf8' |
| 24 | + )) |
| 25 | + |
| 26 | + live().listen(livePort, function(err) { |
| 27 | + if (err) throw err |
| 28 | + |
| 29 | + answers(root, function(err) { |
| 30 | + if (err) throw err |
| 31 | + console.error('Done!') |
| 32 | + console.error('Booting up the workshop in your browser in just a second...') |
| 33 | + console.error('') |
| 34 | + setTimeout(loadedAnswers, 1000) |
| 35 | + }) |
| 36 | + }) |
| 37 | + |
| 38 | + function loadedAnswers(err) { |
| 39 | + if (err) throw err |
| 40 | + var exNames = Object.keys(exercises) |
| 41 | + var exLinks = exNames.map(function(k) { return exercises[k] }) |
| 42 | + var exFiles = exLinks.map(function(link) { |
| 43 | + var dir = path.resolve(root, link) |
| 44 | + |
| 45 | + return fs.readdirSync(dir).map(function(name) { |
| 46 | + return path.resolve(dir, name) |
| 47 | + }) |
| 48 | + }) |
| 49 | + |
| 50 | + var exRoutes = exLinks.map(function(link, i) { |
| 51 | + return require('./exercises/' + link + '/server.js')(exFiles[i]) |
| 52 | + }) |
| 53 | + |
| 54 | + var menu = beefy({ |
| 55 | + cwd: path.join(__dirname, 'menu') |
| 56 | + , entries: ['index.js'] |
| 57 | + , quiet: false |
| 58 | + }) |
| 59 | + |
| 60 | + http.createServer(function(req, res) { |
| 61 | + var uri = url.parse(req.url).pathname |
| 62 | + |
| 63 | + if (uri === '/style.css') { |
| 64 | + res.setHeader('content-type', 'text/css') |
| 65 | + res.end(styles()) |
| 66 | + return |
| 67 | + } |
| 68 | + |
| 69 | + for (var i = 0; i < exLinks.length; i++) { |
| 70 | + if (uri.indexOf(exLinks[i]) === 1) { |
| 71 | + req.url = req.url |
| 72 | + .replace(exLinks[i], '') |
| 73 | + .replace(/\/+/g, '/') |
| 74 | + |
| 75 | + return exRoutes[i](req, res) |
| 76 | + } |
| 77 | + } |
| 78 | + |
| 79 | + return menu(req, res) |
| 80 | + }).listen(mainPort, function(err) { |
| 81 | + if (err) throw err |
| 82 | + opener('http://localhost:'+mainPort) |
| 83 | + }) |
| 84 | + } |
| 85 | +} |
0 commit comments