-
Notifications
You must be signed in to change notification settings - Fork 0
/
chatcube.js
111 lines (90 loc) · 2.76 KB
/
chatcube.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
var express = require("express");
var http = require("http");
var app = express();
var server = http.createServer(app).listen(3000);
var io = require("socket.io")(server);
var mongo = require("mongodb").MongoClient;
var connections = [];
var users =[];
app.use(express.static("./public"));
console.log("Server running...on port 3000");
mongo.connect("mongodb://localhost:27017/chatcube",function(err,db){
if(err){
throw err;
db.close();
}
console.log("Connected to Mongodb");
var userscollection = db.collection('users');
var chatroom = db.collection('chatroom');
var counter = db.collection('counter');
io.sockets.on('connect', function(socket){
userscollection.find().toArray(function(err,result){
if(err)
throw err;
});
connections.push(socket);
console.log('No. of users connected %s', connections.length);
socket.on('disconnect',function(){
users.splice(users.indexOf(socket.username),1);
updateUsers();
connections.splice(connections.indexOf(socket),1);
console.log('No. of users still connected %s', connections.length);
});
socket.on('chat', function(data) {
io.sockets.emit("new message", {msg:data,name:socket.username});
chatroom.insert({"msgId":getNextSequence("msgId"), "from":socket.username, "message":data,"datetime":new Date()});
});
socket.on('login new user', function(data) {
userscollection.findOne({username:data.username.toLowerCase(),password:data.password},function(err,user){
if(err){
throw err;
}
if(user != null){
socket.username = data.username;
socket.password = data.password;
socket.emit('login credentials',"Correct");
users.push(socket.username);
updateUsers();
}
else{
socket.emit('login credentials',"Incorrect");
}
});
});
socket.on('signup new user',function(data){
var email;
var phone;
if(isNaN(data.emailphone))
email = data.emailphone;
else
phone = data.emailphone;
userscollection.findOne({username:data.username.toLowerCase()},function(err,user){
if(err)
throw err;
if(user != null){
socket.emit('signup credentials',"Incorrect");
}
else{
socket.emit('signup credentials',"Correct");
userscollection.insert({"username":data.username.toLowerCase(), "password":data.password , "email" : email, "phone":phone});
socket.username = data.username;
users.push(socket.username);
updateUsers();
}
});
});
function updateUsers(){
io.sockets.emit('set users',users);
}
});
function getNextSequence(name) {
var ret = counter.findAndModify(
{
query: { _id: name },
update: { $inc: { seq: 1 } },
new: true,
remove: false
});
return ret.seq;
}
});