-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathserver.js
103 lines (86 loc) · 2.96 KB
/
server.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
const express = require("express");
const path = require("path");
const http = require("http");
const socketIO = require("socket.io");
const cors = require("cors");
require("dotenv").config();
const Pizza = require("./models/pizzaModel");
const User = require("./models/userModel");
const Message = require("./models/messageModel");
const Conversation = require("./models/conversationModel");
const pizzasRoute = require("./routes/pizzasRoute");
const userRoute = require("./routes/userRoute");
const messageRoute = require("./routes/messageRoute");
const conversationRoute = require("./routes/conversationRoute");
const orderRoute = require("./routes/orderRoute");
const db = require("./db");
const expressPort = process.env.PORT || 5000;
// const socketIOPort = process.env.SOCKET_IO_PORT || 8080;
const app = express();
app.use(cors());
// Serve static files from the uploads directory
app.use("/uploads", express.static(path.join(__dirname, "uploads")));
// scoket io setup
const server = http.createServer(app);
const io = socketIO(server, {
cors: {
origin: "*",
methods: ["GET", "POST"],
},
});
io.on("connection", (socket) => {
console.log("A user connected");
// Handle chat events
socket.on("sendMessage", async ({ conversationId, senderId, message }) => {
try {
// Create a new instance of the Message model
const newMessage = new Message({
sender: senderId,
conversation: conversationId,
message,
timestamp: new Date(),
});
// Save the message to the database
const savedMessage = await newMessage.save();
// Update the conversation with the new message ID
await Conversation.findByIdAndUpdate(
conversationId,
{
$push: { messages: savedMessage._id },
},
{ new: true }
);
const populatedMessage = await Message.findById(
savedMessage._id
).populate("sender");
// Emit the message to all users in the conversation except the sender
socket.broadcast
.to(`admin-${conversationId}`)
.emit("receiveMessage", populatedMessage);
// Emit the message to the sender
socket.emit("receiveMessage", populatedMessage);
} catch (error) {
console.error(error);
}
});
// Admin joins a room to receive messages
socket.on("joinAdmin", ({ conversationId }) => {
if (conversationId) console.log(`admin-${conversationId}`, "room joind");
if (conversationId) socket.join(`admin-${conversationId}`);
});
});
app.use(express.json());
app.get("/", (req, res) => {
res.send("Server Working!");
});
app.use("/api/pizzas/", pizzasRoute);
app.use("/api/users/", userRoute);
app.use("/api/messages/", messageRoute);
app.use("/api/conversations/", conversationRoute);
app.use("/api/orders/", orderRoute);
server.listen(expressPort, () =>
console.log(`Server is running on port ${expressPort}`)
);
// server.listen(socketIOPort, () => {
// console.log("Socket listening on port 8080");
// });