improved adherence to types
This commit is contained in:
parent
473c807461
commit
0a40a8ce5d
|
@ -1,9 +1,9 @@
|
|||
import { userData } from "../Classes/userData.js";
|
||||
import { characters } from "../Characters/characters.js";
|
||||
import { users } from "./users.js";
|
||||
import { userCheckResult, users } from "./users.js";
|
||||
import { db } from "../index.js"
|
||||
import { Socket } from "socket.io";
|
||||
import { loginResponse } from "../Classes/Outgoing/accountResponses.js";
|
||||
import { loginResponse, loginResult } from "../Classes/Outgoing/accountResponses.js";
|
||||
import { Endpoints } from "../endpoints.js";
|
||||
|
||||
export async function login(socket : Socket, data){
|
||||
|
@ -14,12 +14,13 @@ export async function login(socket : Socket, data){
|
|||
return
|
||||
}
|
||||
|
||||
const user = await users.readUser(db, json.login, json.password);
|
||||
const userCheck = await users.readUser(db, json.login, json.password);
|
||||
|
||||
if(user){
|
||||
if(userCheck.result == userCheckResult.OK){
|
||||
const user = userCheck.userData;
|
||||
console.log(`User ${user.login} logged in`);
|
||||
const character = await characters.readCharacter(db, user.id);
|
||||
const result = new loginResponse(user, character)
|
||||
const result = new loginResponse(loginResult.success, user, character)
|
||||
|
||||
socket.user = user
|
||||
socket.character = character
|
||||
|
@ -27,7 +28,7 @@ export async function login(socket : Socket, data){
|
|||
}
|
||||
else{
|
||||
console.log(`User ${json.login} did not log in`);
|
||||
const result = new loginResponse(null, null)
|
||||
const result = new loginResponse(loginResult.fail, null, null)
|
||||
socket.emit(Endpoints.Login, JSON.stringify(result));
|
||||
}
|
||||
}
|
|
@ -1,8 +1,8 @@
|
|||
import { userData } from "../Classes/userData.js";
|
||||
import { users } from "./users.js";
|
||||
import { userCheckResult, users } from "./users.js";
|
||||
import { db } from "../index.js"
|
||||
import { Socket } from "socket.io";
|
||||
import { loginResponse } from "../Classes/Outgoing/accountResponses.js";
|
||||
import { loginResponse, loginResult } from "../Classes/Outgoing/accountResponses.js";
|
||||
import { Endpoints } from "../endpoints.js";
|
||||
import { characters } from "../Characters/characters.js";
|
||||
|
||||
|
@ -14,19 +14,26 @@ export async function register(socket : Socket, data){
|
|||
return
|
||||
}
|
||||
|
||||
const user = await users.createUser(db, json.login, json.password);
|
||||
const checkExisting = await users.readUser(db, json.login, null)
|
||||
if(checkExisting.result != userCheckResult.NotExist){
|
||||
const result = new loginResponse(loginResult.accountExists, null, null)
|
||||
socket.emit(Endpoints.Register, JSON.stringify(result))
|
||||
return
|
||||
}
|
||||
|
||||
const user = (await users.createUser(db, json.login, json.password)).userData;
|
||||
|
||||
if(user){
|
||||
console.log(`User ${user.login} registered`);
|
||||
const character = await characters.createCharacter(db, user.id);
|
||||
const result = new loginResponse(user, character)
|
||||
const result = new loginResponse(loginResult.success, user, character)
|
||||
socket.user = user
|
||||
socket.character = character
|
||||
socket.emit(Endpoints.Register, JSON.stringify(result))
|
||||
}
|
||||
else{
|
||||
console.log(`User failed to register`);
|
||||
const result = new loginResponse(null, null)
|
||||
const result = new loginResponse(loginResult.fail, null, null)
|
||||
socket.emit(Endpoints.Register, JSON.stringify(result))
|
||||
}
|
||||
}
|
|
@ -1,25 +1,45 @@
|
|||
import { userData } from "../Classes/userData.js";
|
||||
import { DatabaseController } from "../Database/dbcontroller.js";
|
||||
import { DatabaseController, dbUser } from "../Database/dbcontroller.js";
|
||||
|
||||
export class userCheckResponse{
|
||||
result : userCheckResult
|
||||
userData : userData
|
||||
|
||||
constructor(result : userCheckResult, userData : userData){
|
||||
this.result = result;
|
||||
this.userData = userData;
|
||||
}
|
||||
}
|
||||
|
||||
export enum userCheckResult{
|
||||
OK,
|
||||
IncorrectPassword,
|
||||
NotExist
|
||||
}
|
||||
|
||||
export class users{
|
||||
|
||||
static async createUser(db: DatabaseController, login : string, password : string){
|
||||
await db.run('INSERT INTO users (login, password) VALUES (?, ?)', [login, password]);
|
||||
return await this.readUser(db, login, password)
|
||||
}
|
||||
|
||||
static async readUser(db: DatabaseController, login : string, password : string): Promise<userData>{
|
||||
let user = await db.select(`SELECT * FROM users WHERE login = ? AND password = ?`, [login, password])
|
||||
static async readUser(db: DatabaseController, login : string, password : string): Promise<userCheckResponse>{
|
||||
let user = await db.select<dbUser>(`SELECT * FROM users WHERE login = ? LIMIT 1`, [login])
|
||||
if (user.length > 0){
|
||||
let row = user[0]
|
||||
return new userData({...row})
|
||||
if (row.password != password){
|
||||
return new userCheckResponse(userCheckResult.IncorrectPassword, null)
|
||||
}
|
||||
return new userCheckResponse(userCheckResult.OK, new userData({...row}))
|
||||
}
|
||||
else{
|
||||
return null
|
||||
return new userCheckResponse(userCheckResult.NotExist, null)
|
||||
}
|
||||
}
|
||||
|
||||
static async readUserID(db: DatabaseController, id : number){
|
||||
let user = await db.select(`SELECT * FROM users WHERE id = ?`, [id])
|
||||
let user = await db.select<dbUser>(`SELECT * FROM users WHERE id = ?`, [id])
|
||||
return user;
|
||||
}
|
||||
}
|
|
@ -1,5 +1,5 @@
|
|||
import { characterData } from "../Classes/characterData.js";
|
||||
import { DatabaseController } from "../Database/dbcontroller.js";
|
||||
import { DatabaseController, dbCharacter } from "../Database/dbcontroller.js";
|
||||
|
||||
export class characters{
|
||||
static async createCharacter(db: DatabaseController, userId : number){
|
||||
|
@ -8,7 +8,7 @@ export class characters{
|
|||
}
|
||||
|
||||
static async readCharacter(db: DatabaseController, userId : number): Promise<characterData>{
|
||||
let player = await db.select(`SELECT * FROM characters WHERE user_id = ? LIMIT 1`, [userId])
|
||||
let player = await db.select<dbCharacter>(`SELECT * FROM characters WHERE user_id = ? LIMIT 1`, [userId])
|
||||
if (player.length > 0){
|
||||
let row = player[0]
|
||||
return new characterData({
|
||||
|
@ -23,7 +23,7 @@ export class characters{
|
|||
}
|
||||
|
||||
static async savePlayer(db: DatabaseController, data: characterData){
|
||||
await db.run(`UPDATE characters SET (inventory, questBook) VALUES (?,?) WHERE id = ?`,
|
||||
await db.run(`UPDATE characters SET inventory = ?, questBook = ? WHERE id = ?`,
|
||||
[JSON.stringify(data.inventory), JSON.stringify(data.questBook), data.id])
|
||||
}
|
||||
}
|
|
@ -1,7 +1,10 @@
|
|||
import { levelState } from "../levelState.js";
|
||||
import { characterData } from "../characterData.js";
|
||||
import { Type } from "class-transformer";
|
||||
|
||||
export class levelUpdateHost{
|
||||
@Type(() => characterData)
|
||||
player : characterData
|
||||
@Type(() => levelState)
|
||||
room : levelState
|
||||
}
|
|
@ -1,18 +1,24 @@
|
|||
import { characterData } from "../characterData.js";
|
||||
import { userData } from "../userData.js";
|
||||
|
||||
export enum loginResult{
|
||||
success,
|
||||
fail,
|
||||
accountExists
|
||||
}
|
||||
|
||||
export class loginResponse{
|
||||
result : boolean
|
||||
result : loginResult
|
||||
userData : userData
|
||||
playerData : characterData
|
||||
|
||||
constructor(user : userData, player : characterData){
|
||||
constructor(result: loginResult, user : userData, player : characterData){
|
||||
if (!user || !player){
|
||||
this.result = false;
|
||||
this.result = result;
|
||||
this.userData = this.playerData = null;
|
||||
}
|
||||
else{
|
||||
this.result = true;
|
||||
this.result = result;
|
||||
this.userData = user.makeSafe();
|
||||
this.playerData = player;
|
||||
}
|
||||
|
|
|
@ -2,6 +2,7 @@ import { enemyData } from "./enemyData.js";
|
|||
import { characterData } from "./characterData.js";
|
||||
import { propData } from "./propData.js";
|
||||
import { levelStateStart, levelStateState as levelStateInfo, levelStateUpdate } from "./Outgoing/levelStatePartial.js";
|
||||
import { Type } from "class-transformer";
|
||||
|
||||
export class levelState{
|
||||
id : string
|
||||
|
@ -9,8 +10,11 @@ export class levelState{
|
|||
hostId : number = -1
|
||||
completed : boolean = false
|
||||
isDungeon : boolean = false
|
||||
@Type(() => enemyData)
|
||||
enemies : enemyData[] = []
|
||||
@Type(() => propData)
|
||||
objects : propData[] = []
|
||||
@Type(() => characterData)
|
||||
players : characterData[] = []
|
||||
|
||||
getRandomInt(max) {
|
||||
|
@ -61,7 +65,7 @@ export class levelState{
|
|||
|
||||
removePlayer(player : characterData) : boolean{
|
||||
this.players = this.players.filter(p=> p !== player)
|
||||
|
||||
|
||||
if(this.hostId == player.id){
|
||||
if(this.players.length > 0){
|
||||
this.hostId = this.players[0].id
|
||||
|
|
|
@ -1,6 +1,20 @@
|
|||
import sqlite3 from 'sqlite3'
|
||||
import { open, Database } from 'sqlite'
|
||||
|
||||
export class dbUser{
|
||||
id : number
|
||||
login : string
|
||||
password : string
|
||||
}
|
||||
|
||||
export class dbCharacter{
|
||||
id : number
|
||||
user_id : number
|
||||
level : number
|
||||
inventory : string
|
||||
questBook : string
|
||||
}
|
||||
|
||||
export class DatabaseController {
|
||||
private db: Database;
|
||||
|
||||
|
|
|
@ -2,10 +2,11 @@ import { Socket } from "socket.io";
|
|||
import { levelUpdateHost } from "../Classes/Incoming/levelUpdateHost.js";
|
||||
import { characterData } from "../Classes/characterData.js";
|
||||
import { game } from "../game.js";
|
||||
import { plainToInstance } from "class-transformer";
|
||||
|
||||
export function update(socket : Socket, data){
|
||||
let buff = Buffer.from(data, 'base64');
|
||||
let data1 : levelUpdateHost = JSON.parse(buff.toString('utf-8'));
|
||||
let data1 : levelUpdateHost = plainToInstance(levelUpdateHost, JSON.parse(buff.toString('utf-8')));
|
||||
let character : characterData = socket.character
|
||||
|
||||
let room = game.lobbyState.rooms.find(l=>l.id == data1.room.id)
|
||||
|
|
|
@ -2,7 +2,6 @@ import { lobbyJoin } from "../Classes/Incoming/lobbyJoin.js";
|
|||
import { levelState } from "../Classes/levelState.js";
|
||||
import { lobbyMessage } from "../Classes/lobbyMessage.js";
|
||||
import { characterData } from "../Classes/characterData.js";
|
||||
import { userData } from "../Classes/userData.js";
|
||||
import { game } from "../game.js";
|
||||
import { Socket } from "socket.io";
|
||||
import { Endpoints } from "../endpoints.js";
|
||||
|
@ -12,8 +11,6 @@ export function playerJoin(socket : Socket, data){
|
|||
let data1 : lobbyJoin = JSON.parse(buff.toString('utf-8'));
|
||||
let character : characterData = socket.character
|
||||
|
||||
console.log(character)
|
||||
|
||||
character.room = "0_0"
|
||||
character.characterId = data1.player.characterId
|
||||
game.lobbyState.addUser(socket)
|
||||
|
@ -35,10 +32,6 @@ export function playerJoin(socket : Socket, data){
|
|||
return room.copyState()
|
||||
})
|
||||
}
|
||||
|
||||
console.log(spawnRoom)
|
||||
console.log(spawnRoom.copyStart())
|
||||
console.log(existingUsers)
|
||||
|
||||
//send only player to all existing players
|
||||
socket.broadcast.emit(Endpoints.PlayerJoin, JSON.stringify(newUser));
|
||||
|
|
9
index.ts
9
index.ts
|
@ -1,7 +1,8 @@
|
|||
import './socketExtended.js';
|
||||
import 'reflect-metadata';
|
||||
import express from 'express';
|
||||
import { createServer } from 'http';
|
||||
import { Socket, Server as SocketIOServer } from 'socket.io';
|
||||
import { Server as SocketIOServer } from 'socket.io';
|
||||
import { game } from "./game.js";
|
||||
import { characters } from "./Characters/characters.js";
|
||||
import { registerItemCallbacks } from "./Items/itemSocket.js";
|
||||
|
@ -51,9 +52,9 @@ io.on('connection', (socket : SocketExtended) => {
|
|||
console.log(socket.id + " disconnected");
|
||||
});
|
||||
|
||||
socket.on('error',function(er){
|
||||
console.log(er);
|
||||
});
|
||||
// socket.on('error',function(er){
|
||||
// console.log(er);
|
||||
// });
|
||||
});
|
||||
|
||||
//Send player updates to everyone
|
||||
|
|
|
@ -13,8 +13,10 @@
|
|||
"@types/node": "^17.0.25",
|
||||
"@types/socket.io": "^3.0.2",
|
||||
"better-sqlite3": "^12.2.0",
|
||||
"class-transformer": "^0.5.1",
|
||||
"cors": "^2.8.5",
|
||||
"express": "^4.17.3",
|
||||
"reflect-metadata": "^0.2.2",
|
||||
"socket.io": "^4.4.1",
|
||||
"sqlite": "^5.1.1",
|
||||
"sqlite3": "^5.1.7",
|
||||
|
@ -531,6 +533,11 @@
|
|||
"node": ">=10"
|
||||
}
|
||||
},
|
||||
"node_modules/class-transformer": {
|
||||
"version": "0.5.1",
|
||||
"resolved": "https://registry.npmjs.org/class-transformer/-/class-transformer-0.5.1.tgz",
|
||||
"integrity": "sha512-SQa1Ws6hUbfC98vKGxZH3KFY0Y1lm5Zm0SY8XX9zbK7FJCyVEac3ATW0RIpwzW+oOfmHE5PMPufDG9hCfoEOMw=="
|
||||
},
|
||||
"node_modules/clean-stack": {
|
||||
"version": "2.2.0",
|
||||
"resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz",
|
||||
|
@ -1857,6 +1864,11 @@
|
|||
"node": ">= 6"
|
||||
}
|
||||
},
|
||||
"node_modules/reflect-metadata": {
|
||||
"version": "0.2.2",
|
||||
"resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.2.2.tgz",
|
||||
"integrity": "sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q=="
|
||||
},
|
||||
"node_modules/retry": {
|
||||
"version": "0.12.0",
|
||||
"resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz",
|
||||
|
@ -3013,6 +3025,11 @@
|
|||
"resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz",
|
||||
"integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ=="
|
||||
},
|
||||
"class-transformer": {
|
||||
"version": "0.5.1",
|
||||
"resolved": "https://registry.npmjs.org/class-transformer/-/class-transformer-0.5.1.tgz",
|
||||
"integrity": "sha512-SQa1Ws6hUbfC98vKGxZH3KFY0Y1lm5Zm0SY8XX9zbK7FJCyVEac3ATW0RIpwzW+oOfmHE5PMPufDG9hCfoEOMw=="
|
||||
},
|
||||
"clean-stack": {
|
||||
"version": "2.2.0",
|
||||
"resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz",
|
||||
|
@ -4001,6 +4018,11 @@
|
|||
"util-deprecate": "^1.0.1"
|
||||
}
|
||||
},
|
||||
"reflect-metadata": {
|
||||
"version": "0.2.2",
|
||||
"resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.2.2.tgz",
|
||||
"integrity": "sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q=="
|
||||
},
|
||||
"retry": {
|
||||
"version": "0.12.0",
|
||||
"resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz",
|
||||
|
|
|
@ -14,8 +14,10 @@
|
|||
"@types/node": "^17.0.25",
|
||||
"@types/socket.io": "^3.0.2",
|
||||
"better-sqlite3": "^12.2.0",
|
||||
"class-transformer": "^0.5.1",
|
||||
"cors": "^2.8.5",
|
||||
"express": "^4.17.3",
|
||||
"reflect-metadata": "^0.2.2",
|
||||
"socket.io": "^4.4.1",
|
||||
"sqlite": "^5.1.1",
|
||||
"sqlite3": "^5.1.7",
|
||||
|
|
|
@ -6,6 +6,8 @@
|
|||
"esModuleInterop": true,
|
||||
"allowSyntheticDefaultImports": true,
|
||||
"sourceMap": true,
|
||||
"noImplicitAny": false
|
||||
"noImplicitAny": false,
|
||||
"experimentalDecorators": true,
|
||||
"emitDecoratorMetadata": true,
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue