Skip to content

Commit 10ed360

Browse files
committed
ip tagging
1 parent 43189bc commit 10ed360

File tree

6 files changed

+66
-1
lines changed

6 files changed

+66
-1
lines changed

src/core.controller.ts

+6
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ import { PlayerAbandonedEvent } from 'gateway/events/bans/player-abandoned.event
1919
import { LobbyReadyEvent } from 'gateway/events/lobby-ready.event';
2020
import { ConfigService } from '@nestjs/config';
2121
import { SrcdsServerStartedEvent } from 'gateway/events/srcds-server-started.event';
22+
import { PlayerConnectedEvent } from 'gateway/events/srcds/player-connected.event';
2223

2324
@Controller()
2425
export class CoreController {
@@ -123,4 +124,9 @@ export class CoreController {
123124
async MatchFailedEvent(data: MatchFailedEvent) {
124125
this.event(MatchFailedEvent, data);
125126
}
127+
128+
@EventPattern(PlayerConnectedEvent.name)
129+
async PlayerConnectedEvent(data: PlayerConnectedEvent) {
130+
this.event(PlayerConnectedEvent, data);
131+
}
126132
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
import { EventsHandler, IEventHandler } from '@nestjs/cqrs';
2+
import { PlayerConnectedEvent } from 'gateway/events/srcds/player-connected.event';
3+
import { InjectRepository } from '@nestjs/typeorm';
4+
import { InteractionType, PlayerIpEntity } from 'gameserver/model/player-ip.entity';
5+
import { Repository } from 'typeorm';
6+
import { Logger } from '@nestjs/common';
7+
8+
@EventsHandler(PlayerConnectedEvent)
9+
export class PlayerConnectedHandler
10+
implements IEventHandler<PlayerConnectedEvent>
11+
{
12+
private logger = new Logger(PlayerConnectedHandler.name);
13+
14+
constructor(
15+
@InjectRepository(PlayerIpEntity)
16+
private readonly playerIpEntityRepository: Repository<PlayerIpEntity>,
17+
) {}
18+
19+
async handle(event: PlayerConnectedEvent) {
20+
this.logger.log("Handling player connect with ip", {
21+
steam_id: event.playerId.value,
22+
match: event.matchId,
23+
});
24+
const e = new PlayerIpEntity(
25+
event.playerId.value,
26+
event.ip,
27+
InteractionType.MATCH_CONNECT,
28+
);
29+
await this.playerIpEntityRepository.save(e);
30+
}
31+
}

src/gameserver/index.ts

+2
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ import { PlayerAbandonedHandler } from 'gameserver/event-handler/player-abandone
3333
import { PrepareGameHandler } from 'gameserver/command/PrepareGame/prepare-game.handler';
3434
import { LobbyReadyHandler } from 'gameserver/event-handler/lobby-ready.handler';
3535
import { SrcdsServerStartedHandler } from 'gameserver/event-handler/srcds-server-started.handler';
36+
import { PlayerConnectedHandler } from 'gameserver/event-handler/player-connected.handler';
3637

3738
const CommandHandlers = [
3839
FindGameServerHandler,
@@ -42,6 +43,7 @@ const CommandHandlers = [
4243
PrepareGameHandler
4344
];
4445
const EventHandlers = [
46+
PlayerConnectedHandler,
4547
StartFakeMatchHandler,
4648
LiveMatchUpdateHandler,
4749
SrcdsServerStartedHandler,
+24
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
import { Column, Entity, PrimaryColumn } from 'typeorm';
2+
3+
export enum InteractionType {
4+
MATCH_CONNECT = 'MATCH_CONNECT'
5+
}
6+
7+
@Entity()
8+
export class PlayerIpEntity {
9+
@PrimaryColumn({ name: "steam_id" })
10+
steamId: string;
11+
12+
@PrimaryColumn({ name: "ip" })
13+
ip: string;
14+
15+
@Column({ name: 'interaction_type' })
16+
interactionType: InteractionType
17+
18+
19+
constructor(steamId: string, ip: string, interactionType: InteractionType) {
20+
this.steamId = steamId;
21+
this.ip = ip;
22+
this.interactionType = interactionType;
23+
}
24+
}

src/util/typeorm-config.ts

+2
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import FinishedMatchEntity from 'gameserver/model/finished-match.entity';
1616
import { ItemHeroView } from 'gameserver/model/item-hero.view';
1717
import { AchievementEntity } from 'gameserver/model/achievement.entity';
1818
import { MatchmakingModeMappingEntity } from 'gameserver/model/matchmaking-mode-mapping.entity';
19+
import { PlayerIpEntity } from 'gameserver/model/player-ip.entity';
1920

2021
export const Entities: Function[] = [
2122
GameSeasonEntity,
@@ -43,4 +44,5 @@ export const Entities: Function[] = [
4344

4445
ItemView,
4546
ItemHeroView,
47+
PlayerIpEntity
4648
];

0 commit comments

Comments
 (0)