mythic-bastionland/app/api/ws/route.ts

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))
})
}
})
}