tbl/src/game-tbl/schedule.service.ts
Schedule service responsible for scheduled tasks - currently it's only game time syncronization of game gateway
Properties |
|
Methods |
|
constructor(gameGateway: GameGateway)
|
||||||
Defined in tbl/src/game-tbl/schedule.service.ts:15
|
||||||
constructor
Parameters :
|
Async checkAwsLead |
checkAwsLead()
|
Decorators :
@Interval(5000)
|
Defined in tbl/src/game-tbl/schedule.service.ts:40
|
Check if is aws lead once in 5 sec
Returns :
Promise<void>
|
Async sendAwsMetrics |
sendAwsMetrics()
|
Decorators :
@Interval(60000)
|
Defined in tbl/src/game-tbl/schedule.service.ts:53
|
Send custom metrics once in 1 min (1000 * 60)
Returns :
Promise<void>
|
syncTimes |
syncTimes()
|
Decorators :
@Interval(1000)
|
Defined in tbl/src/game-tbl/schedule.service.ts:27
|
Send timerSync event to /live socket.io namespace
Returns :
void
|
Private awsInstanceId |
Type : string
|
Default value : ''
|
Defined in tbl/src/game-tbl/schedule.service.ts:14
|
Private awsIsLead |
Default value : false
|
Defined in tbl/src/game-tbl/schedule.service.ts:15
|
Private Readonly logger |
Default value : new Logger(LiveScheduleService.name)
|
Defined in tbl/src/game-tbl/schedule.service.ts:13
|
logger |
import { Injectable, Logger } from '@nestjs/common';
import { Interval } from '@nestjs/schedule';
import { GameGateway } from './game-tbl.gateway';
import { AwsService } from '../../../shared/common/aws-service';
import { CatchAndLogError } from '../../../shared/common/catch-and-log-error.decorator';
/**
* Schedule service responsible for scheduled tasks - currently it's only game time syncronization of game gateway
*/
@Injectable()
export class LiveScheduleService {
/** logger */
private readonly logger = new Logger(LiveScheduleService.name);
private awsInstanceId = '';
private awsIsLead = false;
/**
* constructor
*/
constructor(private readonly gameGateway: GameGateway) {}
/**
* Send timerSync event to /live socket.io namespace
*/
@Interval(1000)
@CatchAndLogError(LiveScheduleService.name)
syncTimes(): void {
if (!this.awsIsLead) {
this.logger.log('Not a lead instance');
return;
}
this.gameGateway.syncGameTimer();
}
/**
* Check if is aws lead once in 5 sec
*/
@Interval(5000)
@CatchAndLogError(LiveScheduleService.name)
async checkAwsLead(): Promise<void> {
const aws = new AwsService();
this.awsIsLead = await aws.allowLeadRoutines();
if (this.awsInstanceId === '') {
this.awsInstanceId = await aws.getRunningInstanceId();
}
}
/**
* Send custom metrics once in 1 min (1000 * 60)
*/
@Interval(60000)
@CatchAndLogError(LiveScheduleService.name)
async sendAwsMetrics(): Promise<void> {
const aws = new AwsService();
const metrics = this.gameGateway.collectAwsMetrics();
metrics.instanceId = this.awsInstanceId;
await aws.publishMetrics(metrics);
}
}