Skip to content

Commit

Permalink
Improved efficiency of the server
Browse files Browse the repository at this point in the history
  • Loading branch information
gdsc0301 committed Sep 13, 2023
1 parent f8b7cc7 commit f55fbf3
Show file tree
Hide file tree
Showing 2 changed files with 57 additions and 70 deletions.
124 changes: 57 additions & 67 deletions index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -19,17 +19,14 @@ export const BasicHeaders = {
};

const rooms: {[ID: string]: Room} = {};
const players: {[username: string]: Player} = {};

/**
* @param {Player} player
* @returns {Room} The room with the player
*/
const assign_room_for = player => {
const assign_room_for = (playerUsername: string): Room | false => {
if(Object.keys(rooms).length === 0) { // If ther's no room, create a new one;
const new_room = new Room(createHash('sha256').update(Date.now().toString()).digest('hex'));
player.setRoomID(new_room.ID);
players[playerUsername].setRoomID(new_room.ID);

new_room.add_player(player) ? undefined : console.error('Invalid player', player);
new_room.add_player(players[playerUsername]);

rooms[new_room.ID] = new_room;
return rooms[new_room.ID];
Expand All @@ -39,30 +36,26 @@ const assign_room_for = player => {
for(const room_id in rooms) {
if(rooms[room_id].is_full) continue;

if(rooms[room_id].add_player(player)){
player.setRoomID(room_id);
return rooms[room_id];
}
rooms[room_id].add_player(players[playerUsername]);

players[playerUsername].setRoomID(room_id);
return rooms[room_id];
}

// In last case, it just creates a new room.
const new_room = new Room(createHash('sha256').update(Date.now().toString()).digest('hex'));
player.setRoomID(new_room.ID);
new_room.add_player(player);
players[playerUsername].setRoomID(new_room.ID);
new_room.add_player(players[playerUsername]);

rooms[new_room.ID] = new_room;
return rooms[new_room.ID];
}

/**
* @param {String} room_id Room ID to check it out.
* @returns {boolean}
*/
const room_exist = (room_id) => {
return !(Object.keys(rooms).indexOf === room_id);
const room_exist = (room_id: string): boolean => {
return Object.keys(rooms).indexOf(room_id) !== -1;
}

const get_headers = (origin) => {
const get_headers = (origin: string) => {
if(ALLOW_ACCESS_ORIGINS.indexOf(origin) === -1) {
return BasicHeaders;
}else {
Expand All @@ -74,8 +67,8 @@ const get_headers = (origin) => {
}

app.use((req, res, next) => {
if(req.query['room_id'] && !room_exist(req.query['room_id'])) {
res.set(get_headers(req.headers.origin));
if(req.query['room_id'] && !room_exist(req.query['room_id'].toString())) {
res.set(get_headers(req.headers.origin || ''));
res.status(BAD_REQUEST).json((new Response({}, BAD_REQUEST, 'Invalid room ID')));
return;
}
Expand All @@ -85,99 +78,96 @@ app.use((req, res, next) => {
app.use(express.text());

app.get('/', (req, res) => {
res.set(get_headers(req.headers.origin));
res.set(get_headers(req.headers.origin || ''));
res.end('This is the BMGP server');
});

app.get('/login', (req, res) => {
const player_email = req.query['player_email']+'';
players[player_email] = new Player(player_email);

const new_player = new Player(player_email);
const new_player_room = assign_room_for(new_player);
const new_player_room = assign_room_for(player_email);

console.log('New player: ', new_player, new_player_room);

const body = new Response(new_player_room);

res.set(get_headers(req.headers.origin));
const body = new Response(new_player_room);
res.set(get_headers(req.headers.origin || ''));
res.status(OK).json(body);

console.log('New player: ', players[player_email], new_player_room);
return;
});

app.get('/room', (req, res) => {
const origin = req.headers.origin || '';
const player_email = req.query['player_email'] + '';
const room_id = req.query['room_id']+'';

const response = new Response();
if(!players[player_email]) {
console.error('Player not logged in.');

if(!rooms[room_id]) {
console.error('Invalid room ID');

response.error = "Invalid room ID";
response.error = "Player not logged in.";
response.status = BAD_REQUEST;
res.set(get_headers(req.headers.origin));
res.set(get_headers(origin));
res.status(BAD_REQUEST).json(response);
return;
}

const player_is_here = rooms[room_id].player_is_here(player_email);

if(player_is_here) {
response.data = rooms[room_id];
}else {
response.error = "Not logged in or internal error.";
response.status = UNAUTHORIZED;
}
response.data = rooms[players[player_email].currentRoomID];

res.set(get_headers(req.headers.origin));
res.set(get_headers(origin));
res.status(OK).json(response);

return;
});

app.post('/player_update', (req, res) => {
const origin = req.headers.origin || '';
const player_email = req.query['player_email']+'';
const room_id = req.query['room_id']+'';

if(!players[player_email]) {
console.error('Player not logged in.');

let response = new Response();
const body = JSON.parse(req.body);
if(!body) {
response = new Response(req.body, BAD_REQUEST, 'Invalid player data')
res.set(get_headers(req.headers.origin));
res.status(BAD_REQUEST).json(response);
res.set(get_headers(origin));
res.status(BAD_REQUEST).json((new Response({}, BAD_REQUEST, 'Player not logged in.')));
return;
}else {
res.set(get_headers(req.headers.origin));
}

const updateData = body.params;
let response = new Response();

const areYouThere = rooms[room_id].player_is_here(player_email);
if(areYouThere){
const newPos = new Vector3(updateData.position._x, updateData.position._y, 0);
const newRot = new Vector3(updateData.rotation._x, updateData.rotation._y, updateData.rotation._z);
rooms[room_id].players[player_email].update(newPos, newRot);
}else{
response = new Response({}, BAD_REQUEST, 'Invalid player email');
const body = JSON.parse(req.body);
const updateData = body.params;
if(!updateData) {
response = new Response({}, BAD_REQUEST, 'Invalid player data');
res.set(get_headers(origin));
res.status(BAD_REQUEST).json(response);
return;
}

const newPos = new Vector3(updateData.position._x, updateData.position._y, 0);
const newRot = new Vector3(updateData.rotation._x, updateData.rotation._y, updateData.rotation._z);
players[player_email].update(newPos, newRot);

res.set(get_headers(origin));
res.status(OK).json(response);
return;
});

app.get('/logout', (req, res) => {
const origin = req.headers.origin || '';
const player_email = req.query['player_email']+'';
const room_id = req.query['room_id']+'';

if(!rooms[room_id]) {
res.set(get_headers(req.headers.origin));
res.status(BAD_REQUEST).json((new Response({}, BAD_REQUEST, 'Invalid room ID')));
if(!players[player_email]) {
console.error('Player not logged in.');

res.set(get_headers(origin));
res.status(BAD_REQUEST).json((new Response({}, BAD_REQUEST, 'Player not logged in.')));
return;
}

const room_id = players[player_email].currentRoomID;
rooms[room_id].remove_player(player_email);
delete players[player_email];

res.set(get_headers(req.headers.origin));
res.set(get_headers(origin));
res.end();
return;
});
Expand Down
3 changes: 0 additions & 3 deletions src/Room.ts
Original file line number Diff line number Diff line change
Expand Up @@ -66,10 +66,7 @@ export default class Room {
player.setPosition(newPosition);

this.players[player.username] = player;
return true;
}

return false;
}

remove_player(player_username: string) {
Expand Down

0 comments on commit f55fbf3

Please sign in to comment.