From f791f1d5d8eaf5ff018d7cad6e289bb99354532a Mon Sep 17 00:00:00 2001 From: Dennis Postma Date: Tue, 4 Jun 2024 17:23:57 +0200 Subject: [PATCH] bit of cleaning, npm updated, working on character moving, typescript improvements --- package-lock.json | 66 ++++++++++----------- src/app/events/CharacterMove.ts | 13 ++++ src/app/events/CharacterZoneLoad.ts | 34 +++++++---- src/app/events/Disconnect.ts | 17 +++++- src/app/repositories/CharacterRepository.ts | 14 +++++ 5 files changed, 95 insertions(+), 49 deletions(-) diff --git a/package-lock.json b/package-lock.json index 662267a..6fde2ae 100644 --- a/package-lock.json +++ b/package-lock.json @@ -64,9 +64,9 @@ } }, "node_modules/@prisma/client": { - "version": "5.14.0", - "resolved": "https://registry.npmjs.org/@prisma/client/-/client-5.14.0.tgz", - "integrity": "sha512-akMSuyvLKeoU4LeyBAUdThP/uhVP3GuLygFE3MlYzaCb3/J8SfsYBE5PkaFuLuVpLyA6sFoW+16z/aPhNAESqg==", + "version": "5.15.0", + "resolved": "https://registry.npmjs.org/@prisma/client/-/client-5.15.0.tgz", + "integrity": "sha512-wPTeTjbd2Q0abOeffN7zCDCbkp9C9cF+e9HPiI64lmpehyq2TepgXE+sY7FXr7Rhbb21prLMnhXX27/E11V09w==", "hasInstallScript": true, "license": "Apache-2.0", "engines": { @@ -82,48 +82,48 @@ } }, "node_modules/@prisma/debug": { - "version": "5.14.0", - "resolved": "https://registry.npmjs.org/@prisma/debug/-/debug-5.14.0.tgz", - "integrity": "sha512-iq56qBZuFfX3fCxoxT8gBX33lQzomBU0qIUaEj1RebsKVz1ob/BVH1XSBwwwvRVtZEV1b7Fxx2eVu34Ge/mg3w==", + "version": "5.15.0", + "resolved": "https://registry.npmjs.org/@prisma/debug/-/debug-5.15.0.tgz", + "integrity": "sha512-QpEAOjieLPc/4sMny/WrWqtpIAmBYsgqwWlWwIctqZO0AbhQ9QcT6x2Ut3ojbDo/pFRCCA1Z1+xm2MUy7fAkZA==", "license": "Apache-2.0" }, "node_modules/@prisma/engines": { - "version": "5.14.0", - "resolved": "https://registry.npmjs.org/@prisma/engines/-/engines-5.14.0.tgz", - "integrity": "sha512-lgxkKZ6IEygVcw6IZZUlPIfLQ9hjSYAtHjZ5r64sCLDgVzsPFCi2XBBJgzPMkOQ5RHzUD4E/dVdpn9+ez8tk1A==", + "version": "5.15.0", + "resolved": "https://registry.npmjs.org/@prisma/engines/-/engines-5.15.0.tgz", + "integrity": "sha512-hXL5Sn9hh/ZpRKWiyPA5GbvF3laqBHKt6Vo70hYqqOhh5e0ZXDzHcdmxNvOefEFeqxra2DMz2hNbFoPvqrVe1w==", "hasInstallScript": true, "license": "Apache-2.0", "dependencies": { - "@prisma/debug": "5.14.0", - "@prisma/engines-version": "5.14.0-25.e9771e62de70f79a5e1c604a2d7c8e2a0a874b48", - "@prisma/fetch-engine": "5.14.0", - "@prisma/get-platform": "5.14.0" + "@prisma/debug": "5.15.0", + "@prisma/engines-version": "5.15.0-29.12e25d8d06f6ea5a0252864dd9a03b1bb51f3022", + "@prisma/fetch-engine": "5.15.0", + "@prisma/get-platform": "5.15.0" } }, "node_modules/@prisma/engines-version": { - "version": "5.14.0-25.e9771e62de70f79a5e1c604a2d7c8e2a0a874b48", - "resolved": "https://registry.npmjs.org/@prisma/engines-version/-/engines-version-5.14.0-25.e9771e62de70f79a5e1c604a2d7c8e2a0a874b48.tgz", - "integrity": "sha512-ip6pNkRo1UxWv+6toxNcYvItNYaqQjXdFNGJ+Nuk2eYtRoEdoF13wxo7/jsClJFFenMPVNVqXQDV0oveXnR1cA==", + "version": "5.15.0-29.12e25d8d06f6ea5a0252864dd9a03b1bb51f3022", + "resolved": "https://registry.npmjs.org/@prisma/engines-version/-/engines-version-5.15.0-29.12e25d8d06f6ea5a0252864dd9a03b1bb51f3022.tgz", + "integrity": "sha512-3BEgZ41Qb4oWHz9kZNofToRvNeS4LZYaT9pienR1gWkjhky6t6K1NyeWNBkqSj2llgraUNbgMOCQPY4f7Qp5wA==", "license": "Apache-2.0" }, "node_modules/@prisma/fetch-engine": { - "version": "5.14.0", - "resolved": "https://registry.npmjs.org/@prisma/fetch-engine/-/fetch-engine-5.14.0.tgz", - "integrity": "sha512-VrheA9y9DMURK5vu8OJoOgQpxOhas3qF0IBHJ8G/0X44k82kc8E0w98HCn2nhnbOOMwbWsJWXfLC2/F8n5u0gQ==", + "version": "5.15.0", + "resolved": "https://registry.npmjs.org/@prisma/fetch-engine/-/fetch-engine-5.15.0.tgz", + "integrity": "sha512-z6AY5yyXxc20Klj7wwnfGP0iIUkVKzybqapT02zLYR/nf9ynaeN8bq73WRmi1TkLYn+DJ5Qy+JGu7hBf1pE78A==", "license": "Apache-2.0", "dependencies": { - "@prisma/debug": "5.14.0", - "@prisma/engines-version": "5.14.0-25.e9771e62de70f79a5e1c604a2d7c8e2a0a874b48", - "@prisma/get-platform": "5.14.0" + "@prisma/debug": "5.15.0", + "@prisma/engines-version": "5.15.0-29.12e25d8d06f6ea5a0252864dd9a03b1bb51f3022", + "@prisma/get-platform": "5.15.0" } }, "node_modules/@prisma/get-platform": { - "version": "5.14.0", - "resolved": "https://registry.npmjs.org/@prisma/get-platform/-/get-platform-5.14.0.tgz", - "integrity": "sha512-/yAyBvcEjRv41ynZrhdrPtHgk47xLRRq/o5eWGcUpBJ1YrUZTYB8EoPiopnP7iQrMATK8stXQdPOoVlrzuTQZw==", + "version": "5.15.0", + "resolved": "https://registry.npmjs.org/@prisma/get-platform/-/get-platform-5.15.0.tgz", + "integrity": "sha512-1GULDkW4+/VQb73vihxCBSc4Chc2x88MA+O40tcZFjmBzG4/fF44PaXFxUqKSFltxU9L9GIMLhh0Gfkk/pUbtg==", "license": "Apache-2.0", "dependencies": { - "@prisma/debug": "5.14.0" + "@prisma/debug": "5.15.0" } }, "node_modules/@socket.io/component-emitter": { @@ -250,9 +250,9 @@ "license": "MIT" }, "node_modules/@types/node": { - "version": "20.14.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.0.tgz", - "integrity": "sha512-5cHBxFGJx6L4s56Bubp4fglrEpmyJypsqI6RgzMfBHWUJQGWAAi8cWcgetEbZXHYXo9C2Fa4EEds/uSyS4cxmA==", + "version": "20.14.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.1.tgz", + "integrity": "sha512-T2MzSGEu+ysB/FkWfqmhV3PLyQlowdptmmgD20C6QxsS8Fmv5SjpZ1ayXaEC0S21/h5UJ9iA6W/5vSNU5l00OA==", "license": "MIT", "dependencies": { "undici-types": "~5.26.4" @@ -1376,13 +1376,13 @@ } }, "node_modules/prisma": { - "version": "5.14.0", - "resolved": "https://registry.npmjs.org/prisma/-/prisma-5.14.0.tgz", - "integrity": "sha512-gCNZco7y5XtjrnQYeDJTiVZmT/ncqCr5RY1/Cf8X2wgLRmyh9ayPAGBNziI4qEE4S6SxCH5omQLVo9lmURaJ/Q==", + "version": "5.15.0", + "resolved": "https://registry.npmjs.org/prisma/-/prisma-5.15.0.tgz", + "integrity": "sha512-JA81ACQSCi3a7NUOgonOIkdx8PAVkO+HbUOxmd00Yb8DgIIEpr2V9+Qe/j6MLxIgWtE/OtVQ54rVjfYRbZsCfw==", "hasInstallScript": true, "license": "Apache-2.0", "dependencies": { - "@prisma/engines": "5.14.0" + "@prisma/engines": "5.15.0" }, "bin": { "prisma": "build/index.js" diff --git a/src/app/events/CharacterMove.ts b/src/app/events/CharacterMove.ts index e4ddba3..3e585f1 100644 --- a/src/app/events/CharacterMove.ts +++ b/src/app/events/CharacterMove.ts @@ -11,7 +11,20 @@ type SocketResponseT = { export default function (socket: TSocket, io: Server) { socket.on('character:move', async (data: SocketResponseT) => { try { + console.log('character:move requested', data); + if (!socket.character) { + console.log('character:move error', 'Character not found'); + return; + } + + socket.character.position_x = data.position_x; + socket.character.position_y = data.position_y; + + await CharacterRepository.update(socket.character); + console.log(socket.character); + + socket.emit('character:moved', socket.character); } catch (error: any) { console.log('character:move error', error); } diff --git a/src/app/events/CharacterZoneLoad.ts b/src/app/events/CharacterZoneLoad.ts index af5faad..d3baac3 100644 --- a/src/app/events/CharacterZoneLoad.ts +++ b/src/app/events/CharacterZoneLoad.ts @@ -5,7 +5,7 @@ import ZoneManager from "../ZoneManager"; import {Character, Zone} from "@prisma/client"; interface IZoneLoad { - zoneId?: number; + zoneId: number; } /** @@ -19,7 +19,12 @@ export default function (socket: TSocket, io: Server) { socket.on('character:zone:load', async (data: IZoneLoad) => { console.log(`---User ${socket.character?.id} has requested zone.`); - const zone = await ZoneRepository.getById(1); + if (!data.zoneId) { + console.log(`---Zone id not provided.`); + return; + } + + const zone = await ZoneRepository.getById(data.zoneId); if (!zone) { console.log(`---Zone not found.`); @@ -28,18 +33,21 @@ export default function (socket: TSocket, io: Server) { socket.join(zone.name); - ZoneManager.addCharacterToZone(zone.id, socket.character as Character); - - // const socketConnectionsInRoom = await io.in(zone.name).fetchSockets(); - // const characters = socketConnectionsInRoom.filter(socket => socket.id !== socket.id); - - // let other clients know of new character - socket.to(zone.name).emit('zone:new_join', socket.character); - - // send over zone and characters - io.in(zone.name).to(socket.id).emit('character:zone:load', { + // send over zone and characters to socket + socket.emit('character:zone:load', { zone: zone, characters: ZoneManager.getCharactersInZone(zone.id), }); + + // let other clients know of new character + io.to(zone.name).emit('zone:character:join', socket.character); + + // add character to zone manager + ZoneManager.addCharacterToZone(zone.id, socket.character as Character); }); -} \ No newline at end of file +} + +/** + * Resources: + * https://stackoverflow.com/questions/6873607/socket-io-rooms-difference-between-broadcast-to-and-sockets-in + */ \ No newline at end of file diff --git a/src/app/events/Disconnect.ts b/src/app/events/Disconnect.ts index 3503b26..dc67dd1 100644 --- a/src/app/events/Disconnect.ts +++ b/src/app/events/Disconnect.ts @@ -1,7 +1,18 @@ -import { Socket, Server } from "socket.io"; +import { Server } from "socket.io"; +import {TSocket} from "../utilities/Types"; +import ZoneManager from "../ZoneManager"; -export default function (socket: Socket, io: Server) { +export default function (socket: TSocket, io: Server) { socket.on('disconnect', (data: any) => { - console.log(`---User ${socket.id} has disconnected.`); + + + if (!socket.character) { + console.log('User disconnected but had no character set'); + return; + } + + ZoneManager.removeCharacterFromZone(socket.character.id, socket.character.zoneId); + + io.emit('user:disconnect', socket.character); }); } \ No newline at end of file diff --git a/src/app/repositories/CharacterRepository.ts b/src/app/repositories/CharacterRepository.ts index 7eb2fba..7aab75c 100644 --- a/src/app/repositories/CharacterRepository.ts +++ b/src/app/repositories/CharacterRepository.ts @@ -61,6 +61,20 @@ class CharacterRepository { } } + async update(character: Character): Promise { + try { + return await prisma.character.update({ + where: { + id: character.id, + }, + data: character + }); + } catch (error: any) { + // Handle error + throw new Error(`Failed to update character: ${error.message}`); + } + } + async delete(id: number): Promise { try { return await prisma.character.delete({