Implemented auth flow with db
This commit is contained in:
parent
203c8ece2b
commit
d6591a2685
2 changed files with 32 additions and 19 deletions
38
src/index.ts
38
src/index.ts
|
|
@ -7,6 +7,9 @@ import { instrument } from "@socket.io/admin-ui";
|
|||
|
||||
import { Client, AvailableGame, Game } from "./models";
|
||||
import { pallette, availableColors } from "./pallette";
|
||||
import { DirectusDB } from "./directus_db";
|
||||
|
||||
const db = new DirectusDB();
|
||||
|
||||
const app = express();
|
||||
const server = http.createServer(app);
|
||||
|
|
@ -18,7 +21,7 @@ const io = new Server(server, {
|
|||
},
|
||||
});
|
||||
|
||||
let registeredClients: Client[] = [];
|
||||
let cachedClients: Client[] = [];
|
||||
let onlineClients: Map<Socket, Client> = new Map<Socket, Client>();
|
||||
let availableGames: Map<string, AvailableGame> = new Map<string, AvailableGame>();
|
||||
let runningGames: Map<string, Game> = new Map<string, Game>();
|
||||
|
|
@ -37,35 +40,37 @@ app.get("/pallette", (req, res) => {
|
|||
io.on("connection", (socket) => {
|
||||
socket.emit("hello", "I don't know you");
|
||||
|
||||
socket.on("register", (login, password) => {
|
||||
socket.on("register", async (login, password) => {
|
||||
if (login.length < 3 || login.length > 20 || password.length < 3 || password.length > 20) {
|
||||
socket.emit("register", false, "Login or password is too short or too long");
|
||||
return;
|
||||
}
|
||||
if (registeredClients.find((client) => client.login === login)) {
|
||||
|
||||
const newUser = await db.registerUser(login, password);
|
||||
|
||||
if (newUser === null) {
|
||||
socket.emit("register", false, "User with this login already exists");
|
||||
return;
|
||||
}
|
||||
const client = new Client(login, password, socket);
|
||||
registeredClients.push(client);
|
||||
const client = new Client(newUser!.id, login, socket);
|
||||
cachedClients.push(client);
|
||||
onlineClients.set(socket, client);
|
||||
socket.emit("register", true, "User registered successfully");
|
||||
});
|
||||
|
||||
socket.on("login", (login, password) => {
|
||||
socket.on("login", async (login, password) => {
|
||||
if (login.length < 3 || login.length > 20 || password.length < 3 || password.length > 20) {
|
||||
socket.emit("login", false, "Login or password is too short or too long");
|
||||
return;
|
||||
}
|
||||
if (!registeredClients.find((client) => client.login === login)) {
|
||||
socket.emit("login", false, "User with this login does not exist");
|
||||
|
||||
const user = await db.authenticateUser(login, password);
|
||||
if (user === null) {
|
||||
socket.emit("login", false, "Wrong login or password");
|
||||
return;
|
||||
}
|
||||
if (registeredClients.find((client) => client.login === login && client.password !== password)) {
|
||||
socket.emit("login", false, "Wrong password");
|
||||
return;
|
||||
}
|
||||
onlineClients.set(socket, new Client(login, password, socket));
|
||||
|
||||
onlineClients.set(socket, new Client(user!.id, login, socket));
|
||||
socket.emit("login", true, "User logged in successfully");
|
||||
|
||||
registerSocketLoggedInFunctions(socket);
|
||||
|
|
@ -255,6 +260,10 @@ function registerSocketLoggedInFunctions(socket: Socket) {
|
|||
client.setInGame(false);
|
||||
opponentPlayer.setInGame(false);
|
||||
runningGames.delete(gameId);
|
||||
|
||||
db.updateStats(client.id, true, false);
|
||||
db.updateStats(opponentPlayer.id, true, false);
|
||||
|
||||
return;
|
||||
}
|
||||
if (game.GameLost()) {
|
||||
|
|
@ -264,6 +273,9 @@ function registerSocketLoggedInFunctions(socket: Socket) {
|
|||
client.setInGame(false);
|
||||
opponentPlayer.setInGame(false);
|
||||
runningGames.delete(gameId);
|
||||
|
||||
db.updateStats(client.id, false, true);
|
||||
db.updateStats(opponentPlayer.id, false, true);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -2,17 +2,17 @@ import { Socket } from "socket.io";
|
|||
import { availableColors } from "./pallette";
|
||||
|
||||
export class Client {
|
||||
private _id: string;
|
||||
private _login: string;
|
||||
private _password: string;
|
||||
private _inGame: Boolean;
|
||||
private _socket: Socket;
|
||||
|
||||
public get id() {
|
||||
return this._id;
|
||||
}
|
||||
public get login() {
|
||||
return this._login;
|
||||
}
|
||||
public get password() {
|
||||
return this._password;
|
||||
}
|
||||
public get inGame() {
|
||||
return this._inGame;
|
||||
}
|
||||
|
|
@ -20,9 +20,9 @@ export class Client {
|
|||
return this._socket;
|
||||
}
|
||||
|
||||
constructor(login: string, password: string, socket: Socket) {
|
||||
constructor(id: string, login: string, socket: Socket) {
|
||||
this._id = id;
|
||||
this._login = login;
|
||||
this._password = password;
|
||||
this._inGame = false;
|
||||
this._socket = socket;
|
||||
}
|
||||
|
|
@ -33,6 +33,7 @@ export class Client {
|
|||
|
||||
public simplify() {
|
||||
return {
|
||||
id: this.id,
|
||||
login: this.login,
|
||||
inGame: this.inGame,
|
||||
};
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue