Use socket broadcast instead of server wide

This commit is contained in:
aronmal 2023-06-07 09:41:17 +02:00
parent 84b4025bf9
commit 787a85e425
Signed by: aronmal
GPG key ID: 816B7707426FC612
3 changed files with 17 additions and 61 deletions

View file

@ -62,8 +62,7 @@ function useSocket() {
toast.warn("Es gibt Probleme mit der Echtzeitverbindung.", { toastId }) toast.warn("Es gibt Probleme mit der Echtzeitverbindung.", { toastId })
}) })
socket.on("gameSetting", (payload, hash, userId) => { socket.on("gameSetting", (payload, hash) => {
if (userId === session?.user.id) return
const newHash = setSetting(payload) const newHash = setSetting(payload)
if (!newHash || newHash === hash) return if (!newHash || newHash === hash) return
console.log("hash", hash, newHash) console.log("hash", hash, newHash)
@ -74,8 +73,7 @@ function useSocket() {
}) })
socket.on("playerEvent", (event) => { socket.on("playerEvent", (event) => {
const { type, i, userId } = event const { type, i } = event
if (userId === session?.user.id) return
let message: string let message: string
console.log(type) console.log(type)
switch (type) { switch (type) {
@ -117,8 +115,7 @@ function useSocket() {
}) })
}) })
socket.on("isReady", (payload, userId) => { socket.on("isReady", (payload) => {
if (userId === session?.user.id) return
setIsReady(payload) setIsReady(payload)
}) })
@ -132,29 +129,14 @@ function useSocket() {
} }
}, [ }, [
full, full,
i,
router, router,
session?.user.id, session?.user.id,
setIsConnected, setIsConnected,
setIsReady, setIsReady,
setPlayer, setPlayer,
setSetting, setSetting,
stateHash, userStates,
]) ])
useEffect(
() =>
console.log(
i,
isIndex,
userStates[i ?? 0].isConnected,
isConnectedState,
isIndex ? userStates[i].isConnected : isConnectedState,
userStates,
session?.user.id
),
[i, isIndex, isConnectedState, session?.user.id, userStates]
)
useEffect(() => console.log("warst", isConnectedState), [isConnectedState])
// useEffect(() => { // useEffect(() => {
// if (!isConnected) return // if (!isConnected) return

View file

@ -27,7 +27,7 @@ export interface ServerToClientEvents {
// noArg: () => void // noArg: () => void
// basicEmit: (a: number, b: string, c: Buffer) => void // basicEmit: (a: number, b: string, c: Buffer) => void
// withAck: (d: string, ) => void // withAck: (d: string, ) => void
gameSetting: (payload: GameSettings, hash: string, userId: string) => void gameSetting: (payload: GameSettings, hash: string) => void
playerEvent: ( playerEvent: (
event: event:
| { | {
@ -35,28 +35,14 @@ export interface ServerToClientEvents {
i: number i: number
payload: { users: PlayerSchema[] } payload: { users: PlayerSchema[] }
hash: string hash: string
userId: string
} }
| { | {
type: "disconnect" type: "disconnect"
i: number i: number
userId: string
} }
) => void ) => void
isReady: ( isReady: (payload: { i: number; isReady: boolean }) => void
payload: { isConnected: (payload: { i: number; isConnected: boolean }) => void
i: number
isReady: boolean
},
userId: string
) => void
isConnected: (
payload: {
i: number
isConnected: boolean
},
userId: string
) => void
} }
export interface ClientToServerEvents { export interface ClientToServerEvents {

View file

@ -65,12 +65,11 @@ const SocketHandler = async (
socket.data.index = index socket.data.index = index
socket.data.gameId = game.id socket.data.gameId = game.id
socket.join(game.id) socket.join(game.id)
io.to(game.id).emit("playerEvent", { socket.to(game.id).emit("playerEvent", {
type: "connect", type: "connect",
i: socket.data.index, i: socket.data.index,
payload: { users: payload.users }, payload: { users: payload.users },
hash, hash,
userId: socket.data.user?.id ?? "",
}) })
next() next()
@ -105,12 +104,7 @@ const SocketHandler = async (
const { hash } = composeBody(game) const { hash } = composeBody(game)
if (!hash) return if (!hash) return
cb(hash) cb(hash)
io.to(game.id).emit( socket.to(game.id).emit("gameSetting", payload, hash)
"gameSetting",
payload,
hash,
socket.data.user?.id ?? ""
)
}) })
socket.on("ping", (count, callback) => { socket.on("ping", (count, callback) => {
@ -162,12 +156,11 @@ const SocketHandler = async (
const { payload, hash } = body const { payload, hash } = body
if (!payload || !hash || socket.data.index === undefined) if (!payload || !hash || socket.data.index === undefined)
return cb(false) return cb(false)
io.to(socket.data.gameId).emit("playerEvent", { socket.to(socket.data.gameId).emit("playerEvent", {
type: "leave", type: "leave",
i: socket.data.index, i: socket.data.index,
payload: { users: payload.users }, payload: { users: payload.users },
hash, hash,
userId: socket.data.user?.id ?? "",
}) })
cb(true) cb(true)
@ -182,16 +175,12 @@ const SocketHandler = async (
socket.on("isReady", async (isReady) => { socket.on("isReady", async (isReady) => {
if (socket.data.index === undefined || !socket.data.gameId) return if (socket.data.index === undefined || !socket.data.gameId) return
io.to(socket.data.gameId).emit( socket
"isReady", .to(socket.data.gameId)
{ i: socket.data.index, isReady }, .emit("isReady", { i: socket.data.index, isReady })
socket.data.user?.id ?? "" socket
) .to(socket.data.gameId)
io.to(socket.data.gameId).emit( .emit("isConnected", { i: socket.data.index, isConnected: true })
"isConnected",
{ i: socket.data.index, isConnected: true },
socket.data.user?.id ?? ""
)
}) })
socket.on("disconnecting", async () => { socket.on("disconnecting", async () => {
@ -201,10 +190,9 @@ const SocketHandler = async (
socket.request socket.request
) )
if (socket.data.index === undefined || !socket.data.gameId) return if (socket.data.index === undefined || !socket.data.gameId) return
io.to(socket.data.gameId).emit("playerEvent", { socket.to(socket.data.gameId).emit("playerEvent", {
type: "disconnect", type: "disconnect",
i: socket.data.index, i: socket.data.index,
userId: socket.data.user?.id ?? "",
}) })
}) })