Nicely working ws

This commit is contained in:
aronmal 2023-02-14 22:18:46 +01:00
parent 9e1522426a
commit a8dbb30795
Signed by: aronmal
GPG key ID: 816B7707426FC612
2 changed files with 59 additions and 11 deletions

View file

@ -1,6 +1,8 @@
import type { NextApiRequest } from "next" import type { NextApiRequest } from "next"
import { Server } from "socket.io" import { Server } from "socket.io"
import { NextApiResponseWithSocket } from "../../interfaces/NextApiSocket" import { NextApiResponseWithSocket } from "../../interfaces/NextApiSocket"
import checkTokenIsValid from "../../lib/backend/components/checkTokenIsValid"
import prisma from "../../lib/prisma"
const SocketHandler = (req: NextApiRequest, res: NextApiResponseWithSocket) => { const SocketHandler = (req: NextApiRequest, res: NextApiResponseWithSocket) => {
if (res.socket.server.io) { if (res.socket.server.io) {
@ -11,12 +13,37 @@ const SocketHandler = (req: NextApiRequest, res: NextApiResponseWithSocket) => {
res.socket.server.io = io res.socket.server.io = io
io.on("connection", (socket) => { io.on("connection", (socket) => {
const connection = { id: socket.id, authenticated: false }
socket.on("input-change", (msg) => { socket.on("input-change", (msg) => {
socket.broadcast.emit("update-input", 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))
}) })
// console.log(socket.id)
// console.log(socket)
// ...
socket.on("test", (payload) => { socket.on("test", (payload) => {
console.log("Got test:", payload) console.log("Got test:", payload)

View file

@ -1,24 +1,41 @@
import { ChangeEventHandler, useEffect, useState } from "react" import { ChangeEventHandler, useEffect, useState } from "react"
import { io } from "socket.io-client" import { io } from "socket.io-client"
import getAccessToken from "../../lib/frontend/getAccessToken"
let socket: ReturnType<typeof io> let socket: ReturnType<typeof io>
const Home = () => { const Home = () => {
const [input, setInput] = useState("") const [input, setInput] = useState("")
const [data, setData] = useState("")
useEffect(() => { useEffect(() => {
socketInitializer() socketInitializer()
}, []) }, [])
const socketInitializer = async () => { async function socketInitializer() {
await fetch("/api/ws") await fetch("/api/ws")
socket = io() socket = io()
await fetch("/api/login", {
method: "POST",
body: JSON.stringify({ username: "warst", password: "warst" }),
})
getAccessToken().then((token) => {
socket.emit("authenticate", { token })
})
socket.on("connect", () => { socket.on("connect", () => {
console.log("connected") console.log("connected")
}) })
socket.on("authenticated", () => {
console.log("Yay!")
})
socket.on("unauthenticated", () => {
console.log("No... pls work")
})
socket.on("update-input", (msg) => { socket.on("update-input", (msg) => {
setInput(msg) setData(msg)
}) })
} }
@ -28,11 +45,15 @@ const Home = () => {
} }
return ( return (
<input <>
placeholder="Type something" <input
value={input} placeholder="Type something"
onChange={onChangeHandler} value={input}
/> onChange={onChangeHandler}
onDoubleClick={() => setInput(data)}
/>
<h1>{data}</h1>
</>
) )
} }