Connectivity optimization

This commit is contained in:
2023-11-01 19:46:59 +01:00
parent 6dc6bc5db8
commit 8b55039972
22 changed files with 255 additions and 108 deletions

11
Level/_clear.ts Normal file
View File

@@ -0,0 +1,11 @@
import { game } from "../game";
export function clear(socket, data){
if(!socket.hasOwnProperty("player")) return;
let buff = Buffer.from(data, 'base64');
let data1 : string = JSON.parse(buff.toString('utf-8'));
let room = game.lobbyState.roomComplete(data1)
game.socketIO.emit("level/cleared", JSON.stringify(room.copyState()))
}

30
Level/_enter.ts Normal file
View File

@@ -0,0 +1,30 @@
import { game } from "../game";
import { playerData } from "../Classes/playerData";
import { roomChangeResponse } from "../Classes/roomChangeResponse";
import { levelEnter } from "../Classes/Incoming/levelEnter";
export function enter(socket, data){
if(!socket.hasOwnProperty("player")) return;
let buff = Buffer.from(data, 'base64');
let data1 : levelEnter = JSON.parse(buff.toString('utf-8'));
let player : playerData = socket.player
socket.join(data1.targetRoom.id)
let newRoom = game.lobbyState.roomEnter(data1.targetRoom, player)
player.room = newRoom.id
socket.leave(data1.previousRoom.id)
let oldRoom = game.lobbyState.roomExit(data1.previousRoom.id, player)
let data2 = new roomChangeResponse()
data2.player = player.copyUpdate()
data2.newRoom = newRoom.copyStart()
data2.previousRoom = oldRoom.copyState()
socket.emit("level/entered", JSON.stringify(data2))
data2.newRoom = newRoom.copyState()
socket.broadcast.emit("level/entered", JSON.stringify(data2))
}

19
Level/_playerUpdate.ts Normal file
View File

@@ -0,0 +1,19 @@
import { levelUpdateClient } from "../Classes/Incoming/levelUpdateClient";
import { playerData } from "../Classes/playerData";
export function playerUpdate(socket, data){
if(!socket.hasOwnProperty("user")) return;
let buff = Buffer.from(data, 'base64');
let data1 : levelUpdateClient = JSON.parse(buff.toString('utf-8'));
let player : playerData = socket.player
if(player == null){
console.log("Error! Player not spawned!")
return
}
player.rigidbody = data1.player.rigidbody
if(data1.player.hasOwnProperty("damageInfo"))
player.damageInfo = player.damageInfo.concat(data1.player.damageInfo)
}

View File

@@ -1,8 +1,10 @@
import { playerData } from "../Classes/playerData";
export function projectile(socket, data){
if(!socket.hasOwnProperty("user")) return;
let buff = Buffer.from(data, 'base64');
//let data1 = JSON.parse();
let player : playerData = socket.player
socket.to(socket.player.room).emit('level/projectile', buff.toString('utf-8'))
socket.to(player.room).emit('level/projectile', buff.toString('utf-8'))
}

View File

@@ -1,24 +1,30 @@
import { levelState } from "../Classes/levelState";
import { levelUpdateHost } from "../Classes/Incoming/levelUpdateHost";
import { playerData } from "../Classes/playerData";
import { game } from "../game";
export function update(socket, data){
if(!socket.hasOwnProperty("user")) return;
if(!socket.hasOwnProperty("player")) return;
let buff = Buffer.from(data, 'base64');
let rawJson = JSON.parse(buff.toString('utf-8'));
let data1 : levelState = rawJson;
let data1 : levelUpdateHost = JSON.parse(buff.toString('utf-8'));
let player : playerData = socket.player
let room = game.lobbyState.rooms.find(l=>l.id == data1.id)
if (room == null){
let room = game.lobbyState.rooms.find(l=>l.id == data1.room.id)
if (room == null || room.hostId != player.id){
return
}
let player = socket.player
player.room = rawJson.player.room
player.rigidbody = rawJson.player.rigidbody
if(data1.room.objects == null){
data1.room.objects = []
}
if(data1.room.enemies == null){
data1.room.enemies = []
}
player.rigidbody = data1.player.rigidbody
room.enemies = data1.room.enemies
room.objects = data1.room.objects
//only in non-host player
//player.damageInfo = rawJson.player.damageInfo
room.enemies = data1.enemies
room.objects = data1.objects
}

View File

@@ -1,11 +1,26 @@
import { clear } from "./_clear";
import { enter } from "./_enter";
import { playerUpdate } from "./_playerUpdate";
import { projectile } from "./_projectile";
import { update } from "./_update";
export function registerLevelCallbacks(socket){
socket.on('level/enter', (data) => {
enter(socket, data)
});
socket.on('level/cleared', (data) => {
clear(socket, data)
});
socket.on('level/update', (data) => {
update(socket, data)
});
socket.on('level/playerUpdate', (data) => {
playerUpdate(socket, data)
});
socket.on('level/projectile', (data) => {
projectile(socket, data)
});