24 lines
776 B
TypeScript
24 lines
776 B
TypeScript
import type { NextRequest } from "next/server"
|
|
import type { WebSocket, WebSocketServer } from "ws"
|
|
|
|
export function UPGRADE(client: WebSocket, server: WebSocketServer, _req: NextRequest) {
|
|
client.send(JSON.stringify({ type: "server:hello", message: "Connected via next-ws" }))
|
|
|
|
client.on("message", (data) => {
|
|
let payload: any
|
|
try {
|
|
payload = JSON.parse(data.toString())
|
|
} catch {
|
|
return
|
|
}
|
|
|
|
if (payload?.type === "client:ping") {
|
|
const message = typeof payload.message === "string" ? payload.message : ""
|
|
const response = { type: "server:pong", message: `pong: ${message}`.trim() }
|
|
server.clients.forEach((peer) => {
|
|
if (peer.readyState === client.OPEN) peer.send(JSON.stringify(response))
|
|
})
|
|
}
|
|
})
|
|
}
|