-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.js
107 lines (89 loc) · 2.71 KB
/
index.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
107
const express = require("express");
const app = express();
const mongoose = require("mongoose");
const dotenv = require("dotenv");
const helmet = require("helmet");
const morgan = require("morgan");
const userRoute = require("./routes/users");
const authRoute = require("./routes/auth");
const postRoute = require("./routes/posts");
const conversationRoute = require("./routes/conversations");
const messageRoute = require("./routes/messages");
const cors = require("cors");
const {Server} = require('socket.io')
const CryptoJS = require("crypto-js");
let users = []
dotenv.config();
const PORT = process.env.PORT
mongoose.connect(process.env.MONGO_URL, {
useNewUrlParser: true,
useUnifiedTopology: true,
useCreateIndex: true,
useFindAndModify: false,
})
.then(() => {
console.log("Connected to MongoDB");
})
.catch((error) => {
console.error("Error connecting to MongoDB:", error);
});
//middleware
const corsOption = {
origin: [process.env.ALLOWED_HOST],
};
app.use(cors(corsOption));
app.use(express.json());
app.use(helmet());
app.use(morgan("common"));
app.use("/api/auth", authRoute);
app.use("/api/users", userRoute);
app.use("/api/posts", postRoute);
app.use("/api/messages", messageRoute);
app.use("/api/conversations", conversationRoute);
const server = app.listen(process.env.PORT || 8800, () => {
console.log(`Server is running on port ${server.address().port}`);
});
var io = new Server(server, {
cors: {
origin: process.env.ALLOWED_HOST
}
});
const addUser = (userId, socketId) => {
const user = users.find((user) => user.userId === userId)
if(user) user.socketId = socketId
else users.push({userId, socketId})
}
const removeUser = (socketId) =>{
users = users.filter(user => user.socketId !== socketId)
}
const getUser = (userId) => {
return users.find((user) => user.userId === userId)
}
io.on('connection', (socket) => {
// when connected
console.log('a user connected')
// take userid and socket id from user
socket.on('addUser', userId => {
addUser(userId, socket.id)
io.emit('getUsers', users)
})
// send and get message
socket.on('sendMessage', ({senderId, receiverId, text, encryptionKey}) => {
const user = getUser(receiverId)
console.log(user, 'This is the user', text, 'key', encryptionKey)
if(user) {
const decryptedMessage = CryptoJS.AES.decrypt(text, encryptionKey).toString(CryptoJS.enc.Utf8);
console.log('decrypted', decryptedMessage)
io.to(user.socketId).emit('getMessage', {
senderId,
text: decryptedMessage,
})
}
})
// when disconnected
socket.on('disconnect', () => {
console.log('a user disconnected')
removeUser(socket.id)
io.emit('getUsers', users)
})
})