-
Notifications
You must be signed in to change notification settings - Fork 0
/
server.js
65 lines (56 loc) · 1.76 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
// Import required modules
import express from 'express';
import http from 'http';
import { Server } from 'socket.io';
import cors from 'cors';
import mongoose from 'mongoose';
import Chat from './chatter.schema.js';
import { ObjectId } from 'mongodb';
// Express app and configure middleware
export const app = express();
app.use(cors());
// HTTP server using Express app
export const server = http.createServer(app);
// Initialize Socket.IO server with custom configurations
const io = new Server(server, {
cors: {
origin: '*',
methods: ["GET", "POST"]
}
});
// Array to store online users
let onlineUser = [];
// Event handling for Socket.IO connections
io.on("connection", (socket) => {
console.log("Connection Made ");
// Event: User joins
socket.on('join', async (name) => {
const oldMessage = await Chat.find();
onlineUser.push({ id: socket.id, name });
io.emit("onlineUser", onlineUser);
io.emit('joined', oldMessage);
});
// Event: User typing
socket.on('typing', () => {
io.emit('typing', socket.id);
});
// Event: User sends a message
socket.on("sendMessage", async (newMessage) => {
if (!newMessage.message || !newMessage.name) {
return;
}
const newUser = new Chat({
name: newMessage.name,
message: newMessage.message,
time: new Date(),
});
io.emit("newMessage", await newUser.save());
});
// Event: User disconnects
socket.on("disconnect", () => {
const indexToRemove = onlineUser.findIndex(user => user.id == socket.id);
onlineUser.splice(indexToRemove, 1);
io.emit('onlineUser', onlineUser);
console.log("Connection disconnected.");
});
});