Skip to content

Instantly share code, notes, and snippets.

@Yiin
Created April 1, 2019 18:28
Show Gist options
  • Save Yiin/2484120da8aadc5b4db31383752371c5 to your computer and use it in GitHub Desktop.
Save Yiin/2484120da8aadc5b4db31383752371c5 to your computer and use it in GitHub Desktop.
import './bindings';
import { inject, injectable } from 'inversify';
import { User } from 'Shared/entity';
import { bind, handleEvent } from '~/container';
import { UserEntityRepository } from './bindings';
import { GameConstants } from '~/constants/game';
import { ServerConstants } from '~/constants/server';
@bind()
@injectable()
export default class PlayersRepository {
constructor(
@inject(UserEntityRepository)
private readonly userEntityRepository: UserEntityRepository,
) {}
private readonly players = new Proxy({}, {
set: (target, p: PropertyKey, value: any): boolean => {
target[p] = value;
return true;
},
get: (target, p: PropertyKey) => {
if (typeof target[p] !== 'undefined') {
return this.fetchUser(target[p]);
}
}
});
fetchUser(userId: string | number) {
return this.userEntityRepository.findOne(userId);
}
getUser(playerMp: PlayerMp): Promise<User | undefined> | undefined {
return this.players[playerMp.id];
}
@handleEvent(ServerConstants.AuthEvents.USER_LOGIN)
onUserLogin(playerMp: PlayerMp, user: User): void {
this.players[playerMp.id] = user.id;
}
@handleEvent(GameConstants.Events.PLAYER_QUIT)
onPlayerQuit(playerMp: PlayerMp) {
this.players[playerMp.id] = undefined;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment