basic session management completed
multiplayer joining fine
This commit is contained in:
parent
ec95bab507
commit
2881446670
@ -1,7 +1,11 @@
|
||||
import { RequestHandler } from "express";
|
||||
import { deleteSession } from '@/src/managers/sessionManager';
|
||||
|
||||
const deleteSessionController: RequestHandler = (_req, res) => {
|
||||
res.json({ sessionId: { $oid: "64768f104722f795300c9fc0" }, rewardSeed: 5867309943877621023 });
|
||||
|
||||
//res.json({ sessionId: { $oid: "64768f104722f795300c9fc0" }, rewardSeed: 5867309943877621023 });
|
||||
deleteSession(_req.query.sessionId as string);
|
||||
res.sendStatus(200);
|
||||
};
|
||||
|
||||
export { deleteSessionController };
|
||||
|
@ -1,9 +1,42 @@
|
||||
import { RequestHandler } from "express";
|
||||
import { getSession } from '@/src/managers/sessionManager';
|
||||
|
||||
const findSessionsController: RequestHandler = (_req, res) => {
|
||||
|
||||
console.log("FindSession Request:", JSON.parse(_req.body));
|
||||
let r = JSON.parse(_req.body);
|
||||
if(r != undefined)
|
||||
{
|
||||
console.log("Found ID");
|
||||
let s = getSession(r.id);
|
||||
|
||||
if(s)
|
||||
res.json({"queryId":r.queryId,"Sessions":s});
|
||||
else
|
||||
res.json({});
|
||||
}
|
||||
else if(r != undefined)
|
||||
{
|
||||
console.log("Found OriginalSessionID");
|
||||
|
||||
let s = getSession(r.originalSessionId);
|
||||
if(s)
|
||||
res.json({"queryId":r.queryId,"Sessions":[s]});
|
||||
else
|
||||
res.json({});
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
console.log("Found SessionRequest");
|
||||
|
||||
let s = getSession(_req.body);
|
||||
if(s)
|
||||
res.json({"queryId":r.queryId,"Sessions":[s]});
|
||||
else
|
||||
res.json({});
|
||||
}
|
||||
|
||||
res.json({ sessionId: { $oid: "64768f104722f795300c9fc0" }, rewardSeed: 5867309943877621023 });
|
||||
};
|
||||
|
||||
export { findSessionsController };
|
||||
|
@ -1,7 +1,13 @@
|
||||
import { RequestHandler } from "express";
|
||||
|
||||
const getNewRewardSeedController: RequestHandler = (_req, res) => {
|
||||
res.json({ rewardSeed: 5867309943877621023 });
|
||||
res.json({ rewardSeed: 1111111111 });
|
||||
};
|
||||
|
||||
function generateRewardSeed(): number {
|
||||
const min = -Number.MAX_SAFE_INTEGER;
|
||||
const max = Number.MAX_SAFE_INTEGER;
|
||||
return Math.floor(Math.random() * (max - min + 1)) + min;
|
||||
}
|
||||
|
||||
export { getNewRewardSeedController };
|
||||
|
@ -1,9 +1,12 @@
|
||||
import { RequestHandler } from "express";
|
||||
import { createNewSession } from '@/src/managers/sessionManager';
|
||||
|
||||
const hostSessionController: RequestHandler = (_req, res) => {
|
||||
console.log("HostSession Request:", JSON.parse(_req.body));
|
||||
let session = createNewSession(JSON.parse(_req.body), _req.query.accountId as string);
|
||||
console.log("New Session Created: ", session);
|
||||
|
||||
res.json({ sessionId: { $oid: "64768f104722f795300c9fc0" }, rewardSeed: 5867309943877621023 });
|
||||
res.json({ sessionId: { $oid: session.sessionId }, rewardSeed:99999999 });
|
||||
};
|
||||
|
||||
export { hostSessionController };
|
||||
|
12
src/controllers/api/joinSessionController.ts
Normal file
12
src/controllers/api/joinSessionController.ts
Normal file
@ -0,0 +1,12 @@
|
||||
import { RequestHandler } from "express";
|
||||
import { getSessionByID } from '@/src/managers/sessionManager';
|
||||
|
||||
const joinSessionController: RequestHandler = (_req, res) => {
|
||||
|
||||
console.log("JoinSession Request:", JSON.parse(_req.body));
|
||||
let r = JSON.parse(_req.body);
|
||||
let s = getSessionByID(r.sessionIds[0])
|
||||
res.json({"rewardSeed":s?.rewardSeed,"sessionId":{"$oid":s?.sessionId}});
|
||||
};
|
||||
|
||||
export { joinSessionController };
|
@ -1,12 +1,11 @@
|
||||
import { RequestHandler } from "express";
|
||||
|
||||
const logoutController: RequestHandler = (_req, res) => {
|
||||
const data = Buffer.from([0x31]);
|
||||
res.writeHead(200, {
|
||||
"Content-Type": "text/html",
|
||||
"Content-Length": data.length
|
||||
"Content-Length": 1
|
||||
});
|
||||
res.end(data);
|
||||
res.end("1");
|
||||
};
|
||||
|
||||
export { logoutController };
|
||||
|
@ -1,11 +1,13 @@
|
||||
import { RequestHandler } from "express";
|
||||
import { updateSession } from '@/src/managers/sessionManager';
|
||||
|
||||
const updateSessionGetController: RequestHandler = (_req, res) => {
|
||||
res.json({});
|
||||
};
|
||||
const updateSessionPostController: RequestHandler = (_req, res) => {
|
||||
console.log("UpdateSessions POST Request:", JSON.parse(_req.body));
|
||||
|
||||
res.json({ hasStarted: true });
|
||||
console.log("ReqID:",_req.query.sessionId as string)
|
||||
updateSession(_req.query.sessionId as string, _req.body)
|
||||
res.json({});
|
||||
};
|
||||
export { updateSessionGetController, updateSessionPostController };
|
||||
|
157
src/managers/sessionManager.ts
Normal file
157
src/managers/sessionManager.ts
Normal file
@ -0,0 +1,157 @@
|
||||
interface Session {
|
||||
sessionId: string;
|
||||
creatorId: string;
|
||||
maxPlayers: number;
|
||||
minPlayers: number;
|
||||
privateSlots: number;
|
||||
scoreLimit: number;
|
||||
timeLimit: number;
|
||||
gameModeId: number;
|
||||
eloRating: number;
|
||||
regionId: number;
|
||||
difficulty: number;
|
||||
hasStarted: boolean;
|
||||
enableVoice: boolean;
|
||||
matchType: string;
|
||||
maps: string[];
|
||||
originalSessionId: string;
|
||||
customSettings: string;
|
||||
rewardSeed: number;
|
||||
guildId: string;
|
||||
buildId: number;
|
||||
platform: number;
|
||||
xplatform: boolean;
|
||||
freePublic: number;
|
||||
freePrivate: number;
|
||||
fullReset: number;
|
||||
}
|
||||
|
||||
const sessions: Session[] = [];
|
||||
|
||||
function createNewSession(sessionData: Session, Creator: string): Session {
|
||||
const sessionId = getNewSessionID();
|
||||
const newSession: Session = {
|
||||
sessionId,
|
||||
creatorId: Creator,
|
||||
maxPlayers: sessionData.maxPlayers || 4,
|
||||
minPlayers: sessionData.minPlayers || 1,
|
||||
privateSlots: sessionData.privateSlots || 0,
|
||||
scoreLimit: sessionData.scoreLimit || 15,
|
||||
timeLimit: sessionData.timeLimit || 900,
|
||||
gameModeId: sessionData.gameModeId || 0,
|
||||
eloRating: sessionData.eloRating || 3,
|
||||
regionId: sessionData.regionId || 3,
|
||||
difficulty: sessionData.difficulty || 0,
|
||||
hasStarted: sessionData.hasStarted || false,
|
||||
enableVoice: sessionData.enableVoice || true,
|
||||
matchType: sessionData.matchType || 'NORMAL',
|
||||
maps: sessionData.maps || [],
|
||||
originalSessionId: sessionData.originalSessionId || '',
|
||||
customSettings: sessionData.customSettings || '',
|
||||
rewardSeed: sessionData.rewardSeed || -1,
|
||||
guildId: sessionData.guildId || '',
|
||||
buildId: sessionData.buildId || 4920386201513015989,
|
||||
platform: sessionData.platform || 0,
|
||||
xplatform: sessionData.xplatform || true,
|
||||
freePublic: sessionData.freePublic || 3,
|
||||
freePrivate: sessionData.freePrivate || 0,
|
||||
fullReset:0,
|
||||
};
|
||||
sessions.push(newSession);
|
||||
return newSession;
|
||||
}
|
||||
|
||||
function getAllSessions(): Session[] {
|
||||
return sessions;
|
||||
}
|
||||
|
||||
function getSessionByID(sessionId: string): Session | undefined {
|
||||
return sessions.find(session => session.sessionId === sessionId);
|
||||
}
|
||||
|
||||
|
||||
interface FindSessionRequest {
|
||||
[key: string]: any;
|
||||
}
|
||||
|
||||
function getSession(sessionIdOrRequest: string | FindSessionRequest): any[] {
|
||||
if (typeof sessionIdOrRequest === 'string') {
|
||||
const session = sessions.find(session => session.sessionId === sessionIdOrRequest);
|
||||
if (session) {
|
||||
console.log("Found Sessions:",session)
|
||||
return [
|
||||
{
|
||||
createdBy: session.creatorId,
|
||||
id: session.sessionId,
|
||||
},
|
||||
];
|
||||
}
|
||||
return [];
|
||||
} else {
|
||||
const request = sessionIdOrRequest as FindSessionRequest;
|
||||
const matchingSessions = sessions.filter(session => {
|
||||
for (const key in request) {
|
||||
if (key !== 'eloRating' && key !== 'queryId' && request[key] !== session[key as keyof Session]) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
console.log("Found Matching Sessions:",matchingSessions)
|
||||
return true;
|
||||
});
|
||||
return matchingSessions.map(session => ({
|
||||
createdBy: session.creatorId,
|
||||
id: session.sessionId,
|
||||
}));
|
||||
}
|
||||
}
|
||||
|
||||
function getSessionByCreatorID(creatorId: string): Session | undefined {
|
||||
return sessions.find(session => session.creatorId === creatorId);
|
||||
}
|
||||
|
||||
function getNewSessionID(): string {
|
||||
const characters = '0123456789abcdef';
|
||||
const maxAttempts = 100;
|
||||
let sessionId = '';
|
||||
|
||||
for (let attempt = 0; attempt < maxAttempts; attempt++) {
|
||||
sessionId = '64';
|
||||
for (let i = 0; i < 22; i++) {
|
||||
const randomIndex = Math.floor(Math.random() * characters.length);
|
||||
sessionId += characters[randomIndex];
|
||||
}
|
||||
|
||||
if (!sessions.some(session => session.sessionId === sessionId)) {
|
||||
return sessionId;
|
||||
}
|
||||
}
|
||||
|
||||
throw new Error('Failed to generate a unique session ID');
|
||||
}
|
||||
|
||||
function updateSession(sessionId: string, sessionData: string): boolean {
|
||||
const session = sessions.find(session => session.sessionId === sessionId);
|
||||
if (session) {
|
||||
try {
|
||||
const updatedData = JSON.parse(sessionData);
|
||||
Object.assign(session, updatedData);
|
||||
return true;
|
||||
} catch (error) {
|
||||
console.error('Invalid JSON string for session update.');
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
function deleteSession(sessionId: string): boolean {
|
||||
const index = sessions.findIndex(session => session.sessionId === sessionId);
|
||||
if (index !== -1) {
|
||||
sessions.splice(index, 1);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
export { createNewSession, getAllSessions, getSessionByID, getSessionByCreatorID, getNewSessionID, updateSession, deleteSession, getSession };
|
||||
|
@ -27,6 +27,8 @@ import { surveysController } from "@/src/controllers/api/surveysController";
|
||||
import { updateChallengeProgressController } from "@/src/controllers/api/updateChallengeProgressController";
|
||||
import { updateSessionGetController, updateSessionPostController } from "@/src/controllers/api/updateSessionController";
|
||||
import { viewController } from "@/src/controllers/api/viewController";
|
||||
import { joinSessionController } from "@/src/controllers/api/joinSessionController";
|
||||
|
||||
import express from "express";
|
||||
|
||||
const apiRouter = express.Router();
|
||||
@ -65,4 +67,5 @@ apiRouter.post("/updateSession.php", updateSessionPostController);
|
||||
apiRouter.post("/missionInventoryUpdate.php", missionInventoryUpdateController);
|
||||
apiRouter.post("/genericUpdate.php", genericUpdateController);
|
||||
apiRouter.post("/rerollRandomMod.php", rerollRandomModController);
|
||||
apiRouter.post("/joinSession.php", joinSessionController);
|
||||
export { apiRouter };
|
||||
|
Loading…
x
Reference in New Issue
Block a user