Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

my project #28

Open
wants to merge 15 commits into
base: master
Choose a base branch
from
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
node_modules
1 change: 1 addition & 0 deletions REAME.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Jeff Dederick
Binary file added dump.rdb
Binary file not shown.
133 changes: 133 additions & 0 deletions index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,133 @@
const express = require('express');
const app = express();
const router = express.Router();
const server = require('http').createServer(app);
const exphbs = require('express-handlebars');
const client = require('./lib/redis_server.js');
const bodyParser = require('body-parser');
const promises = require('./lib/promises.js');
const io = require('socket.io')(server);
const cookieParser = require('cookie-parser');

app.use(bodyParser.urlencoded({ extended: true }));
app.engine('handlebars', exphbs({ defaultLayout: 'main' }));
app.set('view engine', 'handlebars');
app.use(express.static(__dirname + '/public'));
app.use(cookieParser());
app.use(
'/socket.io',
express.static(__dirname + 'node_modules/socket.io-client/dist/')
);

let count = 0;

app.get('/', (req, res) => {
if (!req.cookies.userName) {
res.redirect('/login');
return true;
}
let params = [];
let roomParams = [];
promises
.hgetAllPromise('messages')
.then(data => {
if (!data) {
return null;
}
let keys = Object.keys(data);
keys.forEach(key => {
let json = JSON.parse(data[key]);
params.push(json);
});
return true;
})
.then(data => {
return promises.hgetAllPromise('rooms')
})
.then(data => {
if (!data) {
return null;
}
console.log("room data is " + data);
let keys = Object.keys(data);
keys.forEach(key => {
let json = JSON.parse(data[key]);
roomParams.push(json);
});
return true;
})
.then(data => {
let paramsObj = {};
paramsObj.userName = req.cookies.userName;
if (!data) {
res.render('home', paramsObj);
return null;
}
paramsObj.messages = params;
paramsObj.rooms = roomParams;
paramsObj.currentRoom = paramsObj.rooms[0].name;
res.render('home', paramsObj);
})
.catch(err => {
console.log(err);
});
});

app.get('/login', (req, res) => {
res.render('login');
});

app.post('/logout', (req, res) => {
res.clearCookie('userName');
res.redirect('/login');
});

client.setnx('messageCounter', 0);

app.post('/', (req, res) => {
let newMessage = req.body.newMessage;

res.redirect('back');
});

app.post('/login', (req, res) => {
res.cookie('userName', req.body.userName);
res.redirect('/');
});

io.on('connection', client => {
client.on('newMessage', message => {
let obj;
promises
.incrMessageCounter()
.then(promises.getMessageCounter)
.then(counter => {
obj = { body: message.body, postedBy: message.userName, room: 'Cats' };
let strObj = JSON.stringify(obj);
return promises.newMessagePromise(counter, strObj);
})
.then(data => {
io.emit('addMessage', obj);
})
.catch(console.error);
});

client.on('newRoom', room => {
let obj;
promises
.incrRoomCounter()
.then(promises.getRoomCounter)
.then(counter => {
obj = { name: room.name };
let strObj = JSON.stringify(obj);
return promises.newRoomPromise(counter, strObj);
})
.then(data => {
io.emit('addRoom', obj);
})
.catch(console.error);
});
});

//Start server
server.listen(3000);
84 changes: 84 additions & 0 deletions lib/promises.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
const client = require('./redis_server');

const promiser = {
getMessageCounter: () => {
return new Promise((resolve, reject) => {
client.get('messageCounter', (err, data) => {
if (err) {
console.error(err);
}
return resolve(data);
});
});
},

incrMessageCounter: () => {
return new Promise((resolve, reject) => {
client.incr('messageCounter', (err, data) => {
if (err) {
console.error(err);
}
return resolve(data);
});
});
},

newMessagePromise: (counter, data) => {
return new Promise((resolve, reject) => {
client.hmset('messages', counter, data, (err, data) => {
if (err) {
console.error(err);
}
return resolve(data);
});
});
},

hgetAllPromise: hash => {
return new Promise((resolve, reject) => {
client.hgetall(hash, (err, data) => resolve(data));
});
},

hmgetPromise: (hash, field) => {
return new Promise((resolve, reject) => {
client.hmget(hash, field, (err, data) => resolve(data));
});
},

getRoomCounter: () => {
return new Promise((resolve, reject) => {
client.get('roomCounter', (err, data) => {
if (err) {
console.error(err);
}
return resolve(data);
});
});
},

newRoomPromise: (counter, room) => {
return new Promise((resolve, reject) => {
client.hmset('rooms', counter, room, (err, room) => {
if (err) {
console.error(err);
}
return resolve(room);
});
});
},

incrRoomCounter: () => {
return new Promise((resolve, reject) => {
client.incr('roomCounter', (err, data) => {
if (err) {
console.error(err);
}
return resolve(data);
});
});
},

};

module.exports = promiser;
4 changes: 4 additions & 0 deletions lib/redis_server.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
const redis = require('redis');
const client = redis.createClient();

module.exports = client;
17 changes: 17 additions & 0 deletions models/redis_data.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
const dataModel = {
messages: {
body: '',
postedBy: '',
postRoom: ''
},
users: {
userName: '',
id: ''
},
rooms: {
roomName: '',
roomMesages: []
}
};

module.exports = dataModel;
Loading