diff --git a/app.js b/app.js index e06a85c..06ad078 100644 --- a/app.js +++ b/app.js @@ -15,11 +15,12 @@ var passport = require('passport') , FacebookStrategy = require('passport-facebook').Strategy; var routes = require('./routes/index'); +var login = require('./routes/login'); var chats = require('./routes/chats'); var users = require('./routes/users'); var posts = require('./routes/posts'); -var chat = require('./routes/chat'); var account = require('./routes/account'); +var learn = require('./routes/learn'); var app = express(); @@ -36,7 +37,7 @@ winston.add(winston.transports.File, { level: 'info' }); -mongoose.connect('mongodb://booklog3:123456@ds053130.mongolab.com:53130/booklog3'); +mongoose.connect('mongodb://booklog3:123456@ds047622.mongolab.com:47622/booklog3'); mongoose.connection.on('error', function() { winston.log('error', 'MongoDB: error'); }); @@ -45,8 +46,8 @@ mongoose.connection.on('open', function() { }); var postSchema = new mongoose.Schema({ - title : { type: String }, - content : { type: String }, + title: { type: String }, + content: { type: String }, userId: { type: mongoose.Schema.Types.ObjectId, ref: 'user' }, timeCreated: { type: Date, default: Date.now } }); @@ -59,13 +60,21 @@ var userSchema = new mongoose.Schema({ facebook: { type: Object, select: false } }); +var lessonSchema = new mongoose.Schema({ + lessonName: { type: String, unique: true }, + lessonLearn: { type: String, unique: true }, + timeCreated: { type: Date, default: Date.now } +}); + var Post = mongoose.model('post', postSchema); var User = mongoose.model('user', userSchema); +var Learn = mongoose.model('learn', lessonSchema); app.db = { model: { Post: Post, User: User, + Learn: Learn } }; @@ -94,8 +103,9 @@ passport.deserializeUser(function(obj, done) { }); passport.use(new FacebookStrategy({ - clientID: '1559480364270197', - clientSecret: '4d5d1e9389c179142348cbb7044bdab1', + clientID: '410866279063864', + clientSecret: '3887b8914b81d0e778d3b9af10775fb6', +// callbackURL: "http://alwaysladylove.com/auth/facebook/callback" callbackURL: "/auth/facebook/callback" }, function(accessToken, refreshToken, profile, done) { @@ -113,7 +123,6 @@ passport.use(new FacebookStrategy({ user = doc; } - console.log(user); return done(null, user); // verify callback }); @@ -124,22 +133,14 @@ passport.use(new FacebookStrategy({ app.use(cors()); app.use('/', routes); +app.use('/', login); app.use('/', posts); app.use('/', chats); app.use('/users', users); app.use('/account', account); +app.use('/learn', learn); -app.get('/login/facebook', - passport.authenticate('facebook')); - -app.get('/auth/facebook/callback', - passport.authenticate('facebook', { failureRedirect: '/login/fail' }), - function(req, res) { - // Successful authentication, redirect home. - res.redirect('/'); - }); - // catch 404 and forward to error handler app.use(function(req, res, next) { var err = new Error('Not Found'); @@ -179,4 +180,4 @@ app.use(function(err, req, res, next) { }); -module.exports = app; +module.exports = app; \ No newline at end of file diff --git a/bin/www b/bin/www index c141877..f3c5908 100755 --- a/bin/www +++ b/bin/www @@ -15,21 +15,33 @@ var WebSocketServer = require('websocket').server; * Get port from environment and store in Express. */ +/** + * Create HTTP server in worker process. + */ var port = normalizePort(process.env.PORT || '3000'); +var server = http.createServer(app); + +/* + * WebSocket Section + */ +var wsServer = new WebSocketServer({ + httpServer: server, + autoAcceptConnections: false +}); + +// create WebSocket connections array +app.clients = []; if (cluster.isMaster) { console.log('CPUs: ' + cpuCount); // Create a worker for each CPU for (var i = 0; i < cpuCount ; i++) { - cluster.fork({PORT: port + i}); + cluster.fork({ + PORT: port + i + }); } } else { - /** - * Create HTTP server in worker process. - */ - var port = process.env.PORT; - var server = http.createServer(app); console.log('HTTP server listening on port ' + port + ' at worker ' + cluster.worker.id); @@ -41,6 +53,8 @@ if (cluster.isMaster) { server.on('error', onError); server.on('listening', onListening); + wsServer.on('request', onWsRequest); + /* * WebSocket Section */ @@ -78,6 +92,28 @@ if (cluster.isMaster) { } +function onWsConnMessage(message) { + if (message.type == 'utf8') { + console.log('Received message: ' + message.utf8Data); + } else if (message.type == 'binary') { + console.log('Received binary data.'); + } +} + +function onWsConnClose(reasonCode, description) { + console.log(' Peer disconnected with reason: ' + reasonCode); +} + +function onWsRequest(request) { + var connection = request.accept('echo-protocol', request.origin); + console.log("WebSocket connection accepted."); + + app.clients.push(connection); + + connection.on('message', onWsConnMessage); + connection.on('close', onWsConnClose); +} + /** * Normalize a port into a number, string, or false. */ diff --git a/package.json b/package.json index e6e5540..9bc4907 100644 --- a/package.json +++ b/package.json @@ -18,7 +18,9 @@ "passport": "^0.2.2", "passport-facebook": "^2.0.0", "serve-favicon": "~2.2.1", + "websocket": "^1.0.21", "winston": "^1.0.1", - "websocket": "~1.0.21" + "nginx": "0.0.0", + "forever": "~0.15.1" } } diff --git a/public/booklog/index.html b/public/booklog/index.html index c781d66..2c48ab2 100644 --- a/public/booklog/index.html +++ b/public/booklog/index.html @@ -36,6 +36,20 @@