-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathserver.js
More file actions
105 lines (94 loc) · 3.05 KB
/
server.js
File metadata and controls
105 lines (94 loc) · 3.05 KB
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
const QRCode = require("qrcode");
const app = require("./app");
const dotenv = require("dotenv");
dotenv.config({ path: ".env" });
const db = require("./models");
const http = require("http");
const server = http.createServer(app);
const { Server } = require("socket.io");
const {
sendMessage,
sendImage,
seenMessage,
} = require("./socketMethods/createMessage");
const io = new Server(server, {
cors: {
origin: "*",
methods: ["GET", "POST"],
},
});
// Keep track of connected users and their rooms
const userSocketMap = {};
const restaurantSocketMap = {};
io.on("connection", (socket) => {
console.log("User connected:", socket.id);
// Handle user login
socket.on("login", (userId) => {
userSocketMap[userId] = socket.id;
console.log(`User ${userId} logged in.`);
});
socket.on("restaurantLogin", (restaurantId) => {
restaurantSocketMap[restaurantId] = socket.id;
console.log(`Restaurant ${restaurantId} logged in.`);
});
socket.on("imageMessage", async ({ senderId, receiverId, image }) => {
const receiverSocketId = userSocketMap[receiverId];
const imageLink = await sendImage(senderId, receiverId, image);
console.log(imageLink);
if (receiverSocketId) {
// Save the image to a file (you might want to use a database instead)
const receiverSocketId = userSocketMap[receiverId];
// Send the image path to the receiver
io.to(receiverSocketId).emit("imageMessage", {
senderId,
image: imageLink,
});
await seenMessage(senderId, receiverId);
} else {
console.log(`User ${receiverId} is not connected.`);
}
});
// Handle private messages
socket.on("privateMessage", async ({ senderId, receiverId, message }) => {
const receiverSocketId = userSocketMap[receiverId];
console.log("Hello");
await sendMessage(senderId, receiverId, message);
if (receiverSocketId) {
console.log(message);
io.to(receiverSocketId).emit("privateMessage", { senderId, message });
await seenMessage(senderId, receiverId);
} else {
console.log(`User ${receiverId} is not connected.`);
}
});
socket.on("newOrder", async ({ restaurantId }) => {
console.log("Order Place to:" + restaurantId);
const receiverSocketId = restaurantSocketMap[restaurantId];
if (receiverSocketId) {
console.log("INSIDE");
io.to(receiverSocketId).emit("newOrder");
} else {
console.log(`User ${restaurantId} is not connected.`);
}
});
// Handle user disconnect
socket.on("disconnect", () => {
// Remove user from the mapping on disconnect
const userId = Object.keys(userSocketMap).find(
(key) => userSocketMap[key] === socket.id
);
if (userId) {
delete userSocketMap[userId];
console.log(`User ${userId} disconnected.`);
}
});
// Handle user reconnect
socket.on("connect", () => {
userSocketMap[userId] = socket.id;
});
});
// db.sequelize.sync({ }).then(() => {
server.listen(process.env.PORT || 3000, () => {
console.log(`Server is running on port ${process.env.PORT}`);
});
// });