Use socket broadcast instead of server wide
This commit is contained in:
parent
84b4025bf9
commit
787a85e425
3 changed files with 17 additions and 61 deletions
|
@ -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,
|
|
||||||
])
|
|
||||||
useEffect(
|
|
||||||
() =>
|
|
||||||
console.log(
|
|
||||||
i,
|
|
||||||
isIndex,
|
|
||||||
userStates[i ?? 0].isConnected,
|
|
||||||
isConnectedState,
|
|
||||||
isIndex ? userStates[i].isConnected : isConnectedState,
|
|
||||||
userStates,
|
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
|
||||||
|
|
|
@ -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 {
|
||||||
|
|
|
@ -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 ?? "",
|
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue