forked from noxious/server
made typescript my bitch
This commit is contained in:
parent
552d9bb4db
commit
cfc0f03932
20
package-lock.json
generated
20
package-lock.json
generated
@ -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"
|
||||
|
@ -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
37
src/app/UserManager.ts
Normal 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();
|
@ -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();
|
||||
|
@ -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.`);
|
||||
});
|
||||
}
|
9
src/app/events/characters.get.ts
Normal file
9
src/app/events/characters.get.ts
Normal 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.`);
|
||||
});
|
||||
}
|
@ -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
|
||||
}
|
5
src/app/interfaces/socket.ts
Normal file
5
src/app/interfaces/socket.ts
Normal file
@ -0,0 +1,5 @@
|
||||
import {Socket} from "socket.io";
|
||||
|
||||
export interface ISocket extends Socket {
|
||||
user?: any;
|
||||
}
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user