forked from simrail/simrail.pro
Merge pull request 'fix(backend): fix redis' (#58) from fix-redis into main
Reviewed-on: simrail/simrail.alekswilc.dev#58
This commit is contained in:
commit
6c0bd324ee
@ -13,7 +13,7 @@ export class StationsModule {
|
|||||||
const stats = await SteamUtil.getPlayerStats(player.steamid);
|
const stats = await SteamUtil.getPlayerStats(player.steamid);
|
||||||
const date = new Date();
|
const date = new Date();
|
||||||
if (stats) {
|
if (stats) {
|
||||||
const time = (date.getTime() - joinedAt) ?? 0;
|
const time = joinedAt ? (date.getTime() - joinedAt) : 0;
|
||||||
|
|
||||||
const userProfile = await MProfile.findOne({ steam: player.steamid }) ?? await MProfile.create({ steam: player.steamid, id: v4(), steamName: player.personaname });
|
const userProfile = await MProfile.findOne({ steam: player.steamid }) ?? await MProfile.create({ steam: player.steamid, id: v4(), steamName: player.personaname });
|
||||||
if (!userProfile.dispatcherStats) userProfile.dispatcherStats = {};
|
if (!userProfile.dispatcherStats) userProfile.dispatcherStats = {};
|
||||||
|
@ -12,7 +12,7 @@ export class TrainsModule {
|
|||||||
|
|
||||||
client.on(SimrailClientEvents.TrainLeft, async (server: Server, train: Train, player: IPlayer, joinedAt: number, leftAt: number, points: number, distance: number, vehicle: string) => {
|
client.on(SimrailClientEvents.TrainLeft, async (server: Server, train: Train, player: IPlayer, joinedAt: number, leftAt: number, points: number, distance: number, vehicle: string) => {
|
||||||
if (distance) {
|
if (distance) {
|
||||||
const time = (leftAt - joinedAt) ?? 0;
|
const time = joinedAt ? (leftAt - joinedAt) : 0;
|
||||||
const userProfile = await MProfile.findOne({ steam: player.steamid }) ?? await MProfile.create({ steam: player.steamid, id: v4(), steamName: player.personaname });
|
const userProfile = await MProfile.findOne({ steam: player.steamid }) ?? await MProfile.create({ steam: player.steamid, id: v4(), steamName: player.personaname });
|
||||||
|
|
||||||
const vehicleName = getVehicle(vehicle) ?? vehicle;
|
const vehicleName = getVehicle(vehicle) ?? vehicle;
|
||||||
|
@ -50,25 +50,41 @@ export class SimrailClient extends EventEmitter {
|
|||||||
|
|
||||||
public getStation(server: Server['ServerCode'], name: string) {
|
public getStation(server: Server['ServerCode'], name: string) {
|
||||||
if (!this.stationsOccupied[server] || !this.stationsOccupied[server][name]) return null;
|
if (!this.stationsOccupied[server] || !this.stationsOccupied[server][name]) return null;
|
||||||
const player = PlayerUtil.getPlayer(this.stationsOccupied[server][name].SteamId);
|
const player = PlayerUtil.getPlayer(this.stationsOccupied[server][name]?.SteamId ?? "");
|
||||||
return { player, joinedAt: this.stationsOccupied[name].joinedAt };
|
return { player, joinedAt: this.stationsOccupied[name].joinedAt };
|
||||||
}
|
}
|
||||||
|
|
||||||
public getTrain(server: Server['ServerCode'], name: string) {
|
public getTrain(server: Server['ServerCode'], name: string) {
|
||||||
if (!this.trainsOccupied[server] || !this.trainsOccupied[server][name]) return null;
|
if (!this.trainsOccupied[server] || !this.trainsOccupied[server][name]) return null;
|
||||||
const player = PlayerUtil.getPlayer(this.trainsOccupied[server][name].SteamId);
|
const player = PlayerUtil.getPlayer(this.trainsOccupied[server][name]?.SteamId ?? "");
|
||||||
return { player, joinedAt: this.trainsOccupied[server][name].JoinedAt, startPlayerDistance: this.trainsOccupied[server][name].StartPlayerDistance };
|
return { player, joinedAt: this.trainsOccupied[server][name]?.JoinedAt, startPlayerDistance: this.trainsOccupied[server][name]?.StartPlayerDistance };
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private async setup() {
|
private async setup() {
|
||||||
|
console.log(Date.now() - (Number(await redis.get('last_updated'))));
|
||||||
|
if (!await redis.get('last_updated')) {
|
||||||
|
await redis.json.set('trains_occupied', '$', {});
|
||||||
|
await redis.json.set('trains', '$', []);
|
||||||
|
await redis.json.set('stations', '$', []);
|
||||||
|
await redis.json.set('stations_occupied', '$', {});
|
||||||
|
}
|
||||||
|
|
||||||
|
const lastUpdated = Date.now() - (Number(await redis.get('last_updated')) ?? 0);
|
||||||
|
|
||||||
|
if (lastUpdated > 300_000) {
|
||||||
|
console.log('REDIS: last updated more than > 5 mins');
|
||||||
|
await redis.json.set('trains_occupied', '$', {});
|
||||||
|
await redis.json.set('trains', '$', []);
|
||||||
|
await redis.json.set('stations', '$', []);
|
||||||
|
await redis.json.set('stations_occupied', '$', {});
|
||||||
|
}
|
||||||
|
|
||||||
if (!await redis.json.get('stations'))
|
if (!await redis.json.get('stations'))
|
||||||
redis.json.set('stations', '$', []);
|
redis.json.set('stations', '$', []);
|
||||||
if (!await redis.json.get('trains'))
|
if (!await redis.json.get('trains'))
|
||||||
redis.json.set('trains', '$', []);
|
redis.json.set('trains', '$', []);
|
||||||
if (!await redis.json.get('trains_occupied'))
|
if (!await redis.json.get('trains_occupied'))
|
||||||
redis.json.set('trains_occupied', '$', {});
|
redis.json.set('trains_occupied', '$', {});
|
||||||
|
|
||||||
if (!await redis.json.get('stations_occupied'))
|
if (!await redis.json.get('stations_occupied'))
|
||||||
redis.json.set('stations_occupied', '$', {});
|
redis.json.set('stations_occupied', '$', {});
|
||||||
|
|
||||||
@ -76,6 +92,8 @@ export class SimrailClient extends EventEmitter {
|
|||||||
this.stationsOccupied = (await redis.json.get('stations_occupied') as unknown as SimrailClient['stationsOccupied']);
|
this.stationsOccupied = (await redis.json.get('stations_occupied') as unknown as SimrailClient['stationsOccupied']);
|
||||||
this.trains = (await redis.json.get('trains') as unknown as SimrailClient['trains']);
|
this.trains = (await redis.json.get('trains') as unknown as SimrailClient['trains']);
|
||||||
this.trainsOccupied = (await redis.json.get('trains_occupied') as unknown as SimrailClient['trainsOccupied']);
|
this.trainsOccupied = (await redis.json.get('trains_occupied') as unknown as SimrailClient['trainsOccupied']);
|
||||||
|
|
||||||
|
redis.set('last_updated', Date.now().toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
private async processStation(server: Server, stations: ApiResponse<Station>) {
|
private async processStation(server: Server, stations: ApiResponse<Station>) {
|
||||||
@ -86,7 +104,7 @@ export class SimrailClient extends EventEmitter {
|
|||||||
if (!this.stations[server.ServerCode].length) {
|
if (!this.stations[server.ServerCode].length) {
|
||||||
this.stations[server.ServerCode] = stations.data;
|
this.stations[server.ServerCode] = stations.data;
|
||||||
redis.json.set('stations', '$', this.stations);
|
redis.json.set('stations', '$', this.stations);
|
||||||
|
redis.set('last_updated', Date.now().toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
stations.data.forEach(async (x) => {
|
stations.data.forEach(async (x) => {
|
||||||
@ -116,9 +134,9 @@ export class SimrailClient extends EventEmitter {
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
redis.json.set('stations_occupied', '$', this.stationsOccupied);
|
redis.json.set('stations_occupied', '$', this.stationsOccupied);
|
||||||
|
|
||||||
this.stations[server.ServerCode] = stations.data;
|
this.stations[server.ServerCode] = stations.data;
|
||||||
redis.json.set('stations', '$', this.stations);
|
redis.json.set('stations', '$', this.stations);
|
||||||
|
redis.set('last_updated', Date.now().toString());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -131,6 +149,7 @@ export class SimrailClient extends EventEmitter {
|
|||||||
this.trains[server.ServerCode] = trains.data;
|
this.trains[server.ServerCode] = trains.data;
|
||||||
|
|
||||||
redis.json.set('trains', '$', this.trains);
|
redis.json.set('trains', '$', this.trains);
|
||||||
|
redis.set('last_updated', Date.now().toString());
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -194,6 +213,7 @@ export class SimrailClient extends EventEmitter {
|
|||||||
this.trains[server.ServerCode] = trains.data;
|
this.trains[server.ServerCode] = trains.data;
|
||||||
redis.json.set('trains', '$', this.trains);
|
redis.json.set('trains', '$', this.trains);
|
||||||
redis.json.set('trains_occupied', '$', this.trainsOccupied);
|
redis.json.set('trains_occupied', '$', this.trainsOccupied);
|
||||||
|
redis.set('last_updated', Date.now().toString());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -211,9 +231,6 @@ export class SimrailClient extends EventEmitter {
|
|||||||
|
|
||||||
this.processStation(server, stations);
|
this.processStation(server, stations);
|
||||||
this.processTrain(server, trains);
|
this.processTrain(server, trains);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
Loading…
x
Reference in New Issue
Block a user