shivam413 commited on
Commit
18510dc
·
verified ·
1 Parent(s): ba39e7b

Update pages/api/socketio.ts

Browse files
Files changed (1) hide show
  1. pages/api/socketio.ts +50 -2
pages/api/socketio.ts CHANGED
@@ -11,7 +11,7 @@ import {
11
  setRoom,
12
  } from "../../lib/cache"
13
  import { createNewRoom, createNewUser, updateLastSync } from "../../lib/room"
14
- import { Playlist, RoomState, UserState } from "../../lib/types"
15
  import { isUrl } from "../../lib/utils"
16
 
17
  const ioHandler = (_: NextApiRequest, res: NextApiResponse) => {
@@ -77,6 +77,17 @@ const ioHandler = (_: NextApiRequest, res: NextApiResponse) => {
77
 
78
  await createNewUser(roomId, socket.id)
79
 
 
 
 
 
 
 
 
 
 
 
 
80
  socket.on("disconnect", async () => {
81
  await decUsers()
82
  log("disconnected")
@@ -309,6 +320,43 @@ const ioHandler = (_: NextApiRequest, res: NextApiResponse) => {
309
  room.serverTime = new Date().getTime()
310
  socket.emit("update", room)
311
  })
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
312
  }
313
  )
314
 
@@ -325,4 +373,4 @@ export const config = {
325
  },
326
  }
327
 
328
- export default ioHandler
 
11
  setRoom,
12
  } from "../../lib/cache"
13
  import { createNewRoom, createNewUser, updateLastSync } from "../../lib/room"
14
+ import { Playlist, RoomState, UserState, ChatMessage } from "../../lib/types"
15
  import { isUrl } from "../../lib/utils"
16
 
17
  const ioHandler = (_: NextApiRequest, res: NextApiResponse) => {
 
77
 
78
  await createNewUser(roomId, socket.id)
79
 
80
+ // Send initial chat history to the newly joined socket
81
+ {
82
+ const r = await getRoom(roomId)
83
+ if (r) {
84
+ io.to(socket.id).emit("chatHistory", r.chatLog ?? [])
85
+ }
86
+ }
87
+
88
+ // Simple chat rate limiting per-socket
89
+ let lastChatAt = 0
90
+
91
  socket.on("disconnect", async () => {
92
  await decUsers()
93
  log("disconnected")
 
320
  room.serverTime = new Date().getTime()
321
  socket.emit("update", room)
322
  })
323
+
324
+ // ===== Chat events =====
325
+ socket.on("chatMessage", async (text: string) => {
326
+ try {
327
+ const now = Date.now()
328
+ // Basic rate limiting: 1 message every 750ms
329
+ if (now - lastChatAt < 750) return
330
+ lastChatAt = now
331
+
332
+ const msgText = (text || "").toString().trim()
333
+ if (!msgText) return
334
+ if (msgText.length > 500) return
335
+
336
+ const room = await getRoom(roomId)
337
+ if (room === null) return
338
+
339
+ // Find sender's display name
340
+ const sender = room.users.find((u) => u.socketIds[0] === socket.id)
341
+ const name = sender?.name ?? "Anonymous"
342
+
343
+ const msg: ChatMessage = {
344
+ id: `${now}-${socket.id}`,
345
+ userId: socket.id,
346
+ name,
347
+ text: msgText,
348
+ ts: now,
349
+ }
350
+
351
+ room.chatLog = [...(room.chatLog ?? []), msg].slice(-200)
352
+ await setRoom(roomId, room)
353
+
354
+ io.to(roomId).emit("chatNew", msg)
355
+ } catch (e) {
356
+ console.error("chatMessage failed:", e)
357
+ }
358
+ })
359
+ // =======================
360
  }
361
  )
362
 
 
373
  },
374
  }
375
 
376
+ export default ioHandler