leaky-ships/leaky-ships/pages/api/ws.ts
2023-02-14 22:18:46 +01:00

59 lines
1.8 KiB
TypeScript

import type { NextApiRequest } from "next"
import { Server } from "socket.io"
import { NextApiResponseWithSocket } from "../../interfaces/NextApiSocket"
import checkTokenIsValid from "../../lib/backend/components/checkTokenIsValid"
import prisma from "../../lib/prisma"
const SocketHandler = (req: NextApiRequest, res: NextApiResponseWithSocket) => {
if (res.socket.server.io) {
console.log("Socket is already running " + req.url)
} else {
console.log("Socket is initializing " + req.url)
const io = new Server(res.socket.server)
res.socket.server.io = io
io.on("connection", (socket) => {
const connection = { id: socket.id, authenticated: false }
socket.on("input-change", (msg) => {
if (!connection.authenticated) socket.emit("unauthenticated")
// socket.broadcast.emit("update-input", msg)
io.emit("update-input", msg)
})
socket.on("authenticate", (payload) => {
// console.log("warst", payload)
// console.log(payload())
checkTokenIsValid({
token: payload.token,
tokenType: "ACCESS",
})
.then(async ({ tokenBody }) => {
// console.log(tokenBody)
const token = await prisma.token.findUnique({
where: { id: tokenBody.id },
})
// console.log(!token , token.used)
if (!token || token.used) {
socket.emit("unauthenticated")
// console.log(token)
} else {
socket.emit("authenticated")
connection.authenticated = true
}
})
.catch((err) => console.log("cat", err.message))
})
socket.on("test", (payload) => {
console.log("Got test:", payload)
// ...
})
socket.emit("test2", "lol")
})
}
res.end()
}
export default SocketHandler