-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathsocketServer.js
More file actions
158 lines (132 loc) · 4.76 KB
/
socketServer.js
File metadata and controls
158 lines (132 loc) · 4.76 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
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
// Import necessary socket handlers
const newConnectionHandler = require("./socketHandlers/newConnectionHandler");
const createCardHandler = require("./socketHandlers/cards/createCardHandler");
const deleteCardHandler = require("./socketHandlers/cards/deleteCardHandler");
const serverStore = require("./severStore");
const getCardHandler = require("./socketHandlers/cards/getCardHandler");
const getStudiedCardHandler = require("./socketHandlers/cards/getStudiedCardHandler");
const getNotStudiedCardHandler = require("./socketHandlers/cards/getNotStudiedCardHandler");
const directMessageHandler = require("./socketHandlers/directMessageHandler");
const directChatHistoryHandler = require("./socketHandlers/directChatHistoryHandler");
const createScheduleHandler = require("./socketHandlers/schedule/createScheduleHandler");
const updateScheduleHandler = require("./socketHandlers/schedule/updateScheduleHandler");
const deleteScheduleHandler = require("./socketHandlers/schedule/deleteScheduleHandler");
const updateCardHandler = require("./socketHandlers/cards/updateCardHandler");
const disconnectHandler = require("./socketHandlers/disconnectHandler");
const inviteLinkingWordsHandler = require("./socketHandlers/Linking_Words/inviteHandler");
const cancelInviteHandler = require("./socketHandlers/Linking_Words/cancelInviteHandler");
const responseInviteHandler = require("./socketHandlers/Linking_Words/responseInviteHandler");
// Function to register the socket server
const registerSocketServer = (server) => {
// Initialize socket.io server with CORS configuration
const io = require("socket.io")(server, {
cors: {
// Allow connections from any origin
origin: "*",
methods: ["GET", "POST"],
},
});
// Set the socket server instance for later use
serverStore.setSocketServerInstance(io);
// Function to emit online user information
const emitOnlineUsers = () => {
const onlineUsers = serverStore.getOnlineUsers();
io.emit("online-users", { onlineUsers });
};
// Handle new connection event
io.on("connection", (socket) => {
console.log(`User Connected: ${socket.id}`);
// Emit online users on connection
emitOnlineUsers();
// Join a room based on the set ID
socket.on("join-set", (id) => {
socket.join(id);
});
// Authenticate the connection
socket.on("authenticate", (data) => {
newConnectionHandler(socket, data);
});
// Create card event
socket.on("create-card", (data) => {
createCardHandler(data, socket);
});
// Delete card event
socket.on("delete-card", (data) => {
deleteCardHandler(data, socket);
});
// Get card event
socket.on("get-card", (id) => {
getCardHandler(id, socket);
});
// Get studied card event
socket.on("get-studied", (id) => {
getStudiedCardHandler(id, socket);
});
// Get not studied card event
socket.on("get-not-studied", (id) => {
getNotStudiedCardHandler(id, socket);
});
// Update card event
socket.on("update-card", (data) => {
updateCardHandler(data, socket);
});
// Direct message event
socket.on("direct-message", (data) => {
directMessageHandler(socket, data);
});
// Direct chat history event
socket.on("direct-chat-history", (data) => {
directChatHistoryHandler(socket, data);
});
// Invite to play event
socket.on("invite-to-play", (data) => {
inviteLinkingWordsHandler(socket, data);
});
// Cancel invite event
socket.on("cancel-invite", (data) => {
cancelInviteHandler(socket, data);
});
// Response to invitation event
socket.on("response-invitation", (data) => {
responseInviteHandler(socket, data);
});
// Start timer event
let timer;
socket.on("start-timer", () => {
const remainingTime = 15;
timer = setInterval(() => {
remainingTime--;
socket.emit("update-timer", remainingTime);
if (remainingTime <= 0) {
clearInterval(timer);
socket.emit("game-over", { loser: socket.id });
}
}, 1000);
});
// Schedule events
socket.on("join-schedule", (data) => {
socket.join(data);
});
socket.on("create-schedule", (data) => {
createScheduleHandler(socket, data);
});
socket.on("update-schedule", (data) => {
updateScheduleHandler(socket, data);
});
socket.on("delete-schedule", (data) => {
deleteScheduleHandler(socket, data);
});
// Handle disconnect event
socket.on("disconnect", () => {
disconnectHandler(socket);
});
});
// Periodically emit online users information every 8 seconds
setInterval(() => {
emitOnlineUsers();
}, [8000]);
};
// Export the registerSocketServer function
module.exports = {
registerSocketServer,
};