1
0
forked from noxious/server

made typescript my bitch

This commit is contained in:
Dennis Postma 2024-05-24 19:37:15 +02:00
parent 552d9bb4db
commit cfc0f03932
9 changed files with 79 additions and 26 deletions

20
package-lock.json generated
View File

@ -189,9 +189,9 @@
}
},
"node_modules/@types/express-serve-static-core": {
"version": "4.19.0",
"resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.0.tgz",
"integrity": "sha512-bGyep3JqPCRry1wq+O5n7oiBgGWmeIJXPjXXCo8EK0u8duZGSYar7cGqd3ML2JUsLGeB7fmc06KYo9fLGWqPvQ==",
"version": "4.19.1",
"resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.1.tgz",
"integrity": "sha512-ej0phymbFLoCB26dbbq5PGScsf2JAJ4IJHjG10LalgUV36XKTmA4GdA+PVllKvRk0sEKt64X8975qFnkSi0hqA==",
"dev": true,
"dependencies": {
"@types/node": "*",
@ -382,12 +382,12 @@
}
},
"node_modules/braces": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
"integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz",
"integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==",
"dev": true,
"dependencies": {
"fill-range": "^7.0.1"
"fill-range": "^7.1.1"
},
"engines": {
"node": ">=8"
@ -702,9 +702,9 @@
}
},
"node_modules/fill-range": {
"version": "7.0.1",
"resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
"integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
"version": "7.1.1",
"resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz",
"integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==",
"dev": true,
"dependencies": {
"to-regex-range": "^5.0.1"

View File

@ -28,12 +28,12 @@ model User {
model Character {
id Int @id @default(autoincrement())
userId Int
user User @relation(fields: [userId], references: [id])
name String
position_x Int
position_y Int
rotation Int
userId Int
user User @relation(fields: [userId], references: [id])
zoneId Int
zone Zone @relation(fields: [zoneId], references: [id])
}

37
src/app/UserManager.ts Normal file
View File

@ -0,0 +1,37 @@
import {User} from "@prisma/client";
interface ILoggedInUsers {
users: User[];
}
class UserManager {
private loggedInUsers: ILoggedInUsers[] = [];
// Method to initialize user manager
public async boot() {
console.log('[✅] User manager loaded');
}
// Function that adds user to logged in users
public addUser(user: User) {
this.loggedInUsers.push({
users: [user]
});
}
// Function that checks if a user is already logged in
public findUser(user: User) {
return this.loggedInUsers.find((loggedInUser) => {
return loggedInUser.users.includes(user);
});
}
// Function that lists all logged in users
public listUsers() {
return this.loggedInUsers.map((loggedInUser) => {
return loggedInUser.users;
});
}
}
export default new UserManager();

View File

@ -10,7 +10,7 @@ interface ILoadedZone {
class ZoneManager {
private loadedZones: ILoadedZone[] = [];
// Method to initialize zone loading
// Method to initialize zone manager
public async boot() {
if (!await ZoneRepository.getById(1)) {
const zoneService = new ZoneService();

View File

@ -1,7 +1,9 @@
import { Socket, Server } from "socket.io";
import {ISocket} from "../interfaces/socket";
export default function characterConnect(socket: Socket, io: Server) {
export default function characterConnect(socket: ISocket, io: Server) {
socket.on('character:connect', (data) => {
socket.user.username = 'hello'
console.log(`---User ${socket.id} has joined.`);
});
}

View File

@ -0,0 +1,9 @@
import { Socket, Server } from "socket.io";
import {ISocket} from "../interfaces/socket";
export default function characterConnect(socket: ISocket, io: Server) {
socket.on('characters:get', async (data) => {
console.log(socket.user.username)
console.log(`---characters requested.`);
});
}

View File

@ -1,8 +1,8 @@
import { Socket } from 'socket.io';
import {Character, User} from "@prisma/client";
import {Character as ICharacter, User} from "@prisma/client";
interface NQSocket extends Socket
interface Character extends Socket
{
user?: User,
character?: Character
character?: ICharacter
}

View File

@ -0,0 +1,5 @@
import {Socket} from "socket.io";
export interface ISocket extends Socket {
user?: any;
}

View File

@ -8,6 +8,7 @@ import config from './app/utilities/config';
import prisma from './app/utilities/prisma';
import api from "./app/utilities/api";
import ZoneManager from "./app/ZoneManager";
import UserManager from "./app/UserManager";
export class Server
{
@ -54,6 +55,9 @@ export class Server
// Add API routes
await api.addAuthRoutes(this.app);
// Load user manager
await UserManager.boot();
// Load zone manager
await ZoneManager.boot();
@ -70,16 +74,12 @@ export class Server
const eventsPath = path.join(__dirname, 'app', 'events');
try {
const files: string[] = await fs.promises.readdir(eventsPath);
await Promise.all(files.map(async (file) => {
try {
const module = await import(path.join(eventsPath, file));
module.default(socket, this.io);
} catch (error: any) {
console.error(`[❌] Failed to load event handler ${file}: ${error.message}`);
}
}));
for (const file of files) {
const module = await import(path.join(eventsPath, file));
module.default(socket, this.io);
}
} catch (error: any) {
throw new Error('[❌] Failed to read event handlers directory: ' + error.message);
throw new Error('[❌] Failed to load event handlers: ' + error.message);
}
}
}