Dota 2014-เดจเดพเดฏเดฟ เดžเด™เตเด™เตพ เดฎเดพเดšเตเดšเต เดฎเต‡เด•เตเด•เดฟเด‚เด—เต เดŽเดดเตเดคเตเด•เดฏเดพเดฃเต

เดŽเดฒเตเดฒเดพเดตเตผเด•เตเด•เตเด‚ เดนเดฒเต‹.

เดˆ เดตเดธเดจเตเดคเด•เดพเดฒเดคเตเดคเต เดžเดพเตป เด’เดฐเต เดชเตเดฐเต‹เดœเด•เตเดฑเตเดฑเต เด•เดฃเตเดŸเต, เด…เดคเดฟเตฝ เด†เตบเด•เตเดŸเตเดŸเดฟเด•เตพ Dota 2 เดธเต†เตผเดตเตผ เดชเดคเดฟเดชเตเดชเต 2014 เดŽเด™เตเด™เดจเต† เดชเตเดฐเดตเตผเดคเตเดคเดฟเดชเตเดชเดฟเด•เตเด•เดพเดฎเต†เดจเตเดจเตเด‚ เด…เดคเดจเตเดธเดฐเดฟเดšเตเดšเต เด…เดคเดฟเตฝ เด•เดณเดฟเด•เตเด•เดพเดฎเต†เดจเตเดจเตเด‚ เดชเด เดฟเดšเตเดšเต. เดžเดพเตป เดˆ เด—เต†เดฏเดฟเดฎเดฟเดจเตเดฑเต† เดตเดฒเดฟเดฏ เด†เดฐเดพเดงเด•เดจเดพเดฃเต, เดŽเดจเตเดฑเต† เด•เตเดŸเตเดŸเดฟเด•เตเด•เดพเดฒเดคเตเดคเต เดฎเตเดดเตเด•เดพเดจเตเดณเตเดณ เดˆ เด…เดคเตเดฒเตเดฏเดฎเดพเดฏ เด…เดตเดธเดฐเด‚ เดŽเดจเดฟเด•เตเด•เต เดชเดพเดดเดพเด•เตเด•เดพเตป เด•เดดเดฟเดžเตเดžเดฟเดฒเตเดฒ.

เดžเดพเตป เดตเดณเดฐเต† เด†เดดเดคเตเดคเดฟเตฝ เด•เดŸเดจเตเดจเตเดชเต‹เดฏเดฟ, เด—เต†เดฏเดฟเดฎเดฟเดจเตเดฑเต† เดชเดดเดฏ เดชเดคเดฟเดชเตเดชเดพเดฏ เดฎเดพเดšเตเดšเต เดฎเต‡เด•เตเด•เดฟเด‚เด—เดฟเตฝ เดชเดฟเดจเตเดคเตเดฃเดฏเตโ€Œเด•เตเด•เดพเดคเตเดค เดฎเดฟเด•เตเด•เดตเดพเดฑเตเด‚ เดŽเดฒเตเดฒเดพ เดชเตเดฐเดตเตผเดคเตเดคเดจเด™เตเด™เตพเด•เตเด•เตเด‚ เด‰เดคเตเดคเดฐเดตเดพเดฆเดฟเดฏเดพเดฏ เด’เดฐเต เดกเดฟเดธเตโ€Œเด•เต‹เตผเดกเต เดฌเต‹เดŸเตเดŸเต เดžเดพเตป เดŽเดดเตเดคเดฟ.
เดฌเต‹เดŸเตเดŸเตเดฎเดพเดฏเตเดณเตเดณ เดŽเดฒเตเดฒเดพ เดชเตเดคเตเดฎเด•เตพเด•เตเด•เตเด‚ เดฎเตเดฎเตเดชเต, เดฒเต‹เดฌเดฟ เดธเตเดตเดฎเต‡เดงเดฏเดพ เดธเตƒเดทเตเดŸเดฟเดšเตเดšเต. เดžเด™เตเด™เตพ เด’เดฐเต เดธเดจเตเดฆเต‡เดถเดคเตเดคเต‹เดŸเตเดณเตเดณ 10 เดชเตเดฐเดคเดฟเด•เดฐเดฃเด™เตเด™เตพ เดถเต‡เด–เดฐเดฟเด•เตเด•เตเด•เดฏเตเด‚ เด’เดฐเต เดธเต†เตผเดตเตผ เดธเตเดตเดฎเต‡เดงเดฏเดพ เด•เต‚เดŸเตเดŸเดฟเดšเตเดšเต‡เตผเด•เตเด•เตเด•เดฏเตเด‚ เด…เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ เด’เดฐเต เดชเตเดฐเดพเดฆเต‡เดถเดฟเด• เดฒเต‹เดฌเดฟ เดนเต‹เดธเตเดฑเตเดฑเต เดšเต†เดฏเตเดฏเตเด•เดฏเตเด‚ เดšเต†เดฏเตเดคเต.

Dota 2014-เดจเดพเดฏเดฟ เดžเด™เตเด™เตพ เดฎเดพเดšเตเดšเต เดฎเต‡เด•เตเด•เดฟเด‚เด—เต เดŽเดดเตเดคเตเด•เดฏเดพเดฃเต

เด’เดฐเต เดชเตเดฐเต‹เด—เตเดฐเดพเดฎเตผ เดŽเดจเตเดจ เดจเดฟเดฒเดฏเดฟเตฝ เดŽเดจเตเดฑเต† เดธเตเดตเดญเดพเดตเดคเตเดคเดฟเดจเต เด‡เดคเตเดฐเดฏเดงเดฟเด•เด‚ เดธเตเดตเดฎเต‡เดงเดฏเดพเดฒเตเดณเตเดณ เดœเต‹เดฒเดฟเดฏเต† เดจเต‡เดฐเดฟเดŸเดพเตป เด•เดดเดฟเดžเตเดžเดฟเดฒเตเดฒ, เด’เดฑเตเดฑเดฐเดพเดคเตเดฐเดฟเด•เตŠเดฃเตเดŸเต เดžเดพเตป เดฌเต‹เดŸเตเดŸเดฟเดจเตเดฑเต† เดเดฑเตเดฑเดตเตเด‚ เดฒเดณเดฟเดคเดฎเดพเดฏ เดชเดคเดฟเดชเตเดชเต เดตเดฐเดšเตเดšเต, เด…เดคเต 10 เด†เดณเตเด•เดณเตเดณเตเดณเดชเตเดชเต‹เตพ เดธเต†เตผเดตเดฑเดฟเดจเต† เดฏเดพเดจเตเดคเตเดฐเดฟเด•เดฎเดพเดฏเดฟ เด‰เดฏเตผเดคเตเดคเดฟ.

เดžเดพเตป เด‰เดŸเตป เดคเดจเตเดจเต† เดจเต‹เดกเต‡เดœเตเด•เดณเดฟเตฝ เดŽเดดเตเดคเดพเตป เดคเต€เดฐเตเดฎเดพเดจเดฟเดšเตเดšเต, เด•เดพเดฐเดฃเด‚ เดŽเดจเดฟเด•เตเด•เต เดชเตˆเดคเตเดคเดฃเดฟเดจเต† เดถเดฐเดฟเด•เตเด•เตเด‚ เด‡เดทเตเดŸเดฎเดฒเตเดฒ, เดˆ เดชเดฐเดฟเดคเดธเตเดฅเดฟเดคเดฟเดฏเดฟเตฝ เดŽเดจเดฟเด•เตเด•เต เด•เต‚เดŸเตเดคเตฝ เดธเตเด–เด‚ เดคเต‹เดจเตเดจเตเดจเตเดจเต.

เดกเดฟเดธเตโ€Œเด•เต‹เตผเดกเดฟเดจเดพเดฏเดฟ เด’เดฐเต เดฌเต‹เดŸเตเดŸเต เดŽเดดเตเดคเตเดจเตเดจเดคเต เด‡เดคเต เดŽเดจเตเดฑเต† เด†เดฆเตเดฏ เด…เดจเตเดญเดตเดฎเดพเดฃเต, เดชเด•เตเดทเต‡ เด‡เดคเต เดตเดณเดฐเต† เดฒเดณเดฟเดคเดฎเดพเดฏเดฟ เดฎเดพเดฑเดฟ. เด”เดฆเตเดฏเต‹เด—เดฟเด• npm เดฎเตŠเดกเตเดฏเต‚เตพ discord.js เดธเดจเตเดฆเต‡เดถเด™เตเด™เตพเด•เตเด•เตŠเดชเตเดชเด‚ เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเด‚ เดชเตเดฐเดคเดฟเด•เดฐเดฃเด™เตเด™เตพ เดถเต‡เด–เดฐเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเด‚ เดฎเดฑเตเดฑเตเด‚ เดธเต—เด•เดฐเตเดฏเดชเตเดฐเดฆเดฎเดพเดฏ เด’เดฐเต เด‡เดจเตเดฑเตผเดซเต‡เดธเต เดจเตฝเด•เตเดจเตเดจเต.

เดจเดฟเดฐเดพเด•เดฐเดฃเด‚: เดŽเดฒเตเดฒเดพ เด•เต‹เดกเต เด‰เดฆเดพเดนเดฐเดฃเด™เตเด™เดณเตเด‚ "เดจเดฟเดฒเดตเดฟเดฒเต†" เด†เดฃเต, เด…เดคเดพเดฏเดคเต เด…เดตเตผ เดฐเดพเดคเตเดฐเดฟเดฏเดฟเตฝ เดตเต€เดฃเตเดŸเตเด‚ เดŽเดดเตเดคเตเดจเตเดจ เดจเดฟเดฐเดตเดงเดฟ เด†เดตเตผเดคเตเดคเดจเด™เตเด™เดณเดฟเดฒเต‚เดŸเต† เด•เดŸเดจเตเดจเตเดชเต‹เดฏเดฟ.

เดฎเดพเดšเตเดšเต เดฎเต‡เด•เตเด•เดฟเด‚เด—เดฟเดจเตเดฑเต† เด…เดŸเดฟเดธเตเดฅเดพเดจเด‚ เด’เดฐเต "เด•เตเดฏเต‚" เด†เดฃเต, เด…เดคเดฟเตฝ เด•เดณเดฟเด•เตเด•เดพเตป เด†เด—เตเดฐเดนเดฟเด•เตเด•เตเดจเตเดจ เด•เดณเดฟเด•เตเด•เดพเดฐเต† เดธเตเดฅเดพเดชเดฟเด•เตเด•เตเด•เดฏเตเด‚ เด…เดตเตผ เด†เด—เตเดฐเดนเดฟเด•เตเด•เตเดจเตเดจเดฟเดฒเตเดฒ เด…เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ เด’เดฐเต เด—เต†เดฏเดฟเด‚ เด•เดฃเตเดŸเต†เดคเตเดคเตเด•เดฏเตเด‚ เดšเต†เดฏเตเดฏเตเดฎเตเดชเต‹เตพ เดจเต€เด•เตเด•เด‚ เดšเต†เดฏเตเดฏเตเดจเตเดจเต.

เด’เดฐเต "เดชเตเดฒเต†เดฏเตผ" เดŽเดจเตเดจเดคเดฟเดจเตเดฑเต† เดธเดพเดฐเดพเด‚เดถเด‚ เด‡เด™เตเด™เดจเต†เดฏเดพเดฃเต. เดคเตเดŸเด•เตเด•เดคเตเดคเดฟเตฝ เด‡เดคเต เดกเดฟเดธเตโ€Œเด•เต‹เตผเดกเดฟเดฒเต† เด’เดฐเต เด‰เดชเดฏเต‹เด•เตเดคเตƒ เดเดกเดฟ เดฎเดพเดคเตเดฐเดฎเดพเดฏเดฟเดฐเตเดจเตเดจเต, เดŽเดจเตเดจเดพเตฝ เดธเตˆเดฑเตเดฑเดฟเตฝ เดจเดฟเดจเตเดจเต เด—เต†เดฏเดฟเดฎเตเด•เตพเด•เตเด•เดพเดฏเดฟ เดธเดฎเดพเดฐเด‚เดญเดฟเด•เตเด•เดพเตป/เดคเดฟเดฐเดฏเดพเตป เดชเดฆเตเดงเดคเดฟเดฏเตเดฃเตเดŸเต, เดŽเดจเตเดจเดพเตฝ เด†เดฆเตเดฏเด‚ เด•เดพเดฐเตเดฏเด™เตเด™เตพ เด†เดฆเตเดฏเด‚.

export enum Realm {
  DISCORD,
  EXTERNAL,
}

export default class QueuePlayer {
  constructor(public readonly realm: Realm, public readonly id: string) {}

  public is(qp: QueuePlayer): boolean {
    return this.realm === qp.realm && this.id === qp.id;
  }

  static Discord(id: string) {
    return new QueuePlayer(Realm.DISCORD, id);
  }

  static External(id: string) {
    return new QueuePlayer(Realm.EXTERNAL, id);
  }
}

เด‡เดตเดฟเดŸเต†เดฏเดพเดฃเต เด•เตเดฏเต‚ เด‡เดจเตเดฑเตผเดซเต‡เดธเต. เด‡เดตเดฟเดŸเต†, "เด•เดณเดฟเด•เตเด•เดพเตผ" เดŽเดจเตเดจเดคเดฟเดจเตเดชเด•เดฐเด‚, "เด—เตเดฐเต‚เดชเตเดชเต" เดŽเดจเตเดจ เดฐเต‚เดชเดคเตเดคเดฟเตฝ เด’เดฐเต เด…เดฎเต‚เตผเดคเตเดคเต€เด•เดฐเดฃเด‚ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเต. เด’เดฐเต เด•เดณเดฟเด•เตเด•เดพเดฐเดจเต† เดธเด‚เดฌเดจเตเดงเดฟเดšเตเดšเดฟเดŸเดคเตเดคเต‹เดณเด‚, เด—เตเดฐเต‚เดชเตเดชเดฟเตฝ เดคเดพเดจเตเด‚ เด’เดฐเต เด—เตเดฐเต‚เดชเตเดชเดฟเดฒเต† เด•เดณเดฟเด•เตเด•เดพเตผเด•เตเด•เต เดฏเดฅเดพเด•เตเดฐเดฎเด‚ เด—เตเดฐเต‚เดชเตเดชเดฟเดฒเต† เดŽเดฒเตเดฒเดพ เด•เดณเดฟเด•เตเด•เดพเดฐเตเด‚ เด‰เตพเดชเตเดชเต†เดŸเตเดจเตเดจเต.

export default interface IQueue extends EventEmitter {
  inQueue: QueuePlayer[]
  put(uid: Party): boolean;
  remove(uid: Party): boolean;
  removeAll(ids: Party[]): void;

  mode: MatchmakingMode
  roomSize: number;
  clear(): void
}

เดธเดจเตเดฆเตผเดญเด‚ เด•เตˆเดฎเดพเดฑเดพเตป เด‡เดตเดจเตเดฑเตเด•เตพ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เดพเตป เดžเดพเตป เดคเต€เดฐเตเดฎเดพเดจเดฟเดšเตเดšเต. เด‡เดคเต เด•เต‡เดธเตเด•เตพเด•เตเด•เต เด…เดจเตเดฏเต‹เดœเตเดฏเดฎเดพเดฃเต - โ€œ10 เด†เดณเตเด•เตพเด•เตเด•เตเดณเตเดณ เด’เดฐเต เด—เต†เดฏเดฟเด‚ เด•เดฃเตเดŸเต†เดคเตเดคเดฟโ€ เดŽเดจเตเดจ เด‡เดตเดจเตเดฑเดฟเตฝ, เดจเดฟเด™เตเด™เตพเด•เตเด•เต เดธเตเดตเด•เดพเดฐเตเดฏ เดธเดจเตเดฆเต‡เดถเด™เตเด™เดณเดฟเตฝ เด•เดณเดฟเด•เตเด•เดพเตผเด•เตเด•เต เด†เดตเดถเตเดฏเดฎเดพเดฏ เดธเดจเตเดฆเต‡เดถเด‚ เด…เดฏเดฏเตโ€Œเด•เตเด•เดพเดจเตเด‚ เด…เดŸเดฟเดธเตเดฅเดพเดจ เดฌเดฟเดธเดฟเดจเดธเตเดธเต เดฏเตเด•เตเดคเดฟ เดจเดŸเดชเตเดชเดฟเดฒเดพเด•เตเด•เดพเดจเตเด‚ เด•เดดเดฟเดฏเตเด‚ - เดธเดจเตเดจเดฆเตเดงเดค เดชเดฐเดฟเดถเต‹เดงเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเด‚ เดฒเต‹เดฌเดฟ เดคเดฏเตเดฏเดพเดฑเดพเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเด‚ เด’เดฐเต เดŸเดพเดธเตเด•เต เดธเดฎเดพเดฐเด‚เดญเดฟเด•เตเด•เตเด•. เดตเดฟเด•เตเดทเต‡เดชเดฃเดคเตเดคเดฟเดจเตเด‚ เดฎเดฑเตเดฑเตเด‚.

IOC-เดฏเตโ€Œเด•เตเด•เต เดžเดพเตป InversifyJS เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเต. เดˆ เด—เตเดฐเดจเตเดฅเดถเดพเดฒเดฏเดฟเตฝ เดชเตเดฐเดตเตผเดคเตเดคเดฟเดšเตเดšเดคเดฟเตฝ เดŽเดจเดฟเด•เตเด•เต เดจเดฒเตเดฒ เด…เดจเตเดญเดตเดฎเตเดฃเตเดŸเต. เดตเต‡เด—เดคเตเดคเดฟเดฒเตเด‚ เดŽเดณเตเดชเตเดชเดคเตเดคเดฟเดฒเตเด‚!

เดžเด™เตเด™เดณเตเดŸเต† เดธเต†เตผเดตเดฑเดฟเตฝ เดจเดฟเดฐเดตเดงเดฟ เด•เตเดฏเต‚เด•เดณเตเดฃเตเดŸเต - เดžเด™เตเด™เตพ 1x1, เดธเดพเดงเดพเดฐเดฃ/เดฑเต‡เดฑเตเดฑเดกเต, เด•เต‚เดŸเดพเดคเต† เด•เตเดฑเดšเตเดšเต เด‡เดทเตโ€ŒเดŸเดพเดจเตเดธเตƒเดค เดฎเต‹เดกเตเด•เตพ เดšเต‡เตผเดคเตเดคเต. เด…เดคเดฟเดจเดพเตฝ, เด‰เดชเดฏเต‹เด•เตเดคเดพเดตเดฟเดจเตเด‚ เด—เต†เดฏเดฟเด‚ เดคเดฟเดฐเดฏเดฒเดฟเดจเตเด‚ เด‡เดŸเดฏเดฟเตฝ เด’เดฐเต เดธเดฟเด‚เด—เดฟเตพเดŸเตบ เดฑเต‚เด‚ เดธเตผเดตเต€เดธเต เด‰เดฃเตเดŸเต.

constructor(
    @inject(GameServers) private gameServers: GameServers,
    @inject(MatchStatsService) private stats: MatchStatsService,
    @inject(PartyService) private partyService: PartyService
  ) {
    super();
    this.initQueue(MatchmakingMode.RANKED);
    this.initQueue(MatchmakingMode.UNRANKED);
    this.initQueue(MatchmakingMode.SOLOMID);
    this.initQueue(MatchmakingMode.DIRETIDE);
    this.initQueue(MatchmakingMode.GREEVILING);
    this.partyService.addListener(
      "party-update",
      (event: PartyUpdatedEvent) => {
        this.queues.forEach((q) => {
          if (has(q.queue, (t) => t.is(event.party))) {
            // if queue has this party, we re-add party
            this.leaveQueue(event.qp, q.mode)
            this.enterQueue(event.qp, q.mode)
          }
        });
      }
    );

    this.partyService.addListener(
      "party-removed",
      (event: PartyUpdatedEvent) => {
        this.queues.forEach((q) => {
          if (has(q.queue, (t) => t.is(event.party))) {
            // if queue has this party, we re-add party
            q.remove(event.party)
          }
        });
      }
    );
  }

(เดชเตเดฐเด•เตเดฐเดฟเดฏเด•เตพ เดเด•เดฆเต‡เดถเด‚ เดŽเด™เตเด™เดจเต†เดฏเดฟเดฐเดฟเด•เตเด•เตเด‚ เดŽเดจเตเดจเดคเดฟเดจเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเต เด’เดฐเต เด†เดถเดฏเด‚ เดจเตฝเด•เตเดจเตเดจเดคเดฟเดจเต เด•เต‹เดกเต เดจเต‚เดกเดฟเตฝเดธเต)

เด‡เดตเดฟเดŸเต† เดžเดพเตป เดจเดŸเดชเตเดชเดฟเดฒเดพเด•เตเด•เดฟเดฏ เด“เดฐเต‹ เด—เต†เดฏเดฟเด‚ เดฎเต‹เดกเตเด•เตพเด•เตเด•เตเดฎเตเดณเตเดณ เด•เตเดฏเต‚ เด†เดฐเด‚เดญเดฟเด•เตเด•เตเดจเตเดจเต, เด•เต‚เดŸเดพเดคเต† เด•เตเดฏเต‚เด•เตพ เด•เตเดฐเดฎเต€เด•เดฐเดฟเด•เตเด•เดพเดจเตเด‚ เดšเดฟเดฒ เดตเตˆเดฐเตเดฆเตเดงเตเดฏเด™เตเด™เตพ เด’เดดเดฟเดตเดพเด•เตเด•เดพเดจเตเด‚ "เด—เตเดฐเต‚เดชเตเดชเตเด•เดณเดฟเดฒเต†" เดฎเดพเดฑเตเดฑเด™เตเด™เตพ เดถเตเดฐเดฆเตเดงเดฟเด•เตเด•เตเด•.

เด…เดคเดฟเดจเดพเตฝ, เดจเดจเตเดจเดพเดฏเดฟ เดšเต†เดฏเตเดคเต, เดตเดฟเดทเดฏเดตเตเดฎเดพเดฏเดฟ เดฏเดพเดคเตŠเดฐเต เดฌเดจเตเดงเดตเตเดฎเดฟเดฒเตเดฒเดพเดคเตเดค เด•เต‹เดกเดฟเดจเตเดฑเต† เดญเดพเด—เด™เตเด™เตพ เดžเดพเตป เดšเต‡เตผเดคเตเดคเต, เด‡เดชเตเดชเต‹เตพ เดจเดฎเตเด•เตเด•เต เดจเต‡เดฐเดฟเดŸเตเดŸเต เดฎเดพเดšเตเดšเต เดฎเต‡เด•เตเด•เดฟเด‚เด—เดฟเดฒเต‡เด•เตเด•เต เดชเต‹เด•เดพเด‚.

เดจเดฎเตเด•เตเด•เต เด•เต‡เดธเต เดชเดฐเดฟเด—เดฃเดฟเด•เตเด•เดพเด‚:

1) เด‰เดชเดฏเต‹เด•เตเดคเดพเดตเต เด•เดณเดฟเด•เตเด•เดพเตป เด†เด—เตเดฐเดนเดฟเด•เตเด•เตเดจเตเดจเต.

2) เดคเดฟเดฐเดฏเตฝ เด†เดฐเด‚เดญเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต, เด…เดตเตป เด—เต‡เดฑเตเดฑเตโ€Œเดตเต‡=เดกเดฟเดธเตโ€Œเด•เต‹เตผเดกเต เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเต, เด…เดคเดพเดฏเดคเต, เดธเดจเตเดฆเต‡เดถเดคเตเดคเต‹เดŸเต เด’เดฐเต เดชเตเดฐเดคเดฟเด•เดฐเดฃเด‚ เดจเตฝเด•เตเดจเตเดจเต:

Dota 2014-เดจเดพเดฏเดฟ เดžเด™เตเด™เตพ เดฎเดพเดšเตเดšเต เดฎเต‡เด•เตเด•เดฟเด‚เด—เต เดŽเดดเตเดคเตเด•เดฏเดพเดฃเต

3) เดˆ เด—เต‡เดฑเตเดฑเตโ€Œเดตเต‡ RoomService-เดฒเต‡เด•เตเด•เต เดชเต‹เดฏเดฟ, "เดตเตเดฏเดคเตเดฏเดพเดธเดคเตเดคเดฟเตฝ เดจเดฟเดจเตเดจเตเดณเตเดณ เด’เดฐเต เด‰เดชเดฏเต‹เด•เตเดคเดพเดตเต เด•เตเดฏเต‚, เดฎเต‹เดกเต: เดฑเต‡เดฑเตเดฑเตเดšเต†เดฏเตเดฏเดพเดคเตเดค เด—เต†เดฏเดฟเดฎเดฟเตฝ เดชเตเดฐเดตเต‡เดถเดฟเด•เตเด•เดพเตป เด†เด—เตเดฐเดนเดฟเด•เตเด•เตเดจเตเดจเต" เดŽเดจเตเดจเต เดชเดฑเดฏเตเดจเตเดจเต.

4) RoomService เด—เต‡เดฑเตเดฑเตโ€Œเดตเต‡เดฏเตเดŸเต† เด…เดญเตเดฏเตผเดคเตเดฅเดจ เดธเตเดตเต€เด•เดฐเดฟเด•เตเด•เตเด•เดฏเตเด‚ เด‰เดชเดฏเต‹เด•เตเดคเดพเดตเดฟเดจเต† (เด•เต‚เดŸเตเดคเตฝ เด•เตƒเดคเตเดฏเดฎเดพเดฏเดฟ เดชเดฑเดžเตเดžเดพเตฝ, เด‰เดชเดฏเต‹เด•เตเดคเตƒ เด—เตเดฐเต‚เดชเตเดชเต) เด†เดตเดถเตเดฏเดฎเตเดณเตเดณ เด•เตเดฏเต‚เดตเดฟเดฒเต‡เด•เตเด•เต เดคเดณเตเดณเตเด•เดฏเตเด‚ เดšเต†เดฏเตเดฏเตเดจเตเดจเต.

5) เด•เดณเดฟเด•เตเด•เดพเตป เดฎเดคเดฟเดฏเดพเดฏ เด•เดณเดฟเด•เตเด•เดพเตผ เด‰เดณเตเดณเดชเตเดชเต‹เดดเต†เดฒเตเดฒเดพเด‚ เด•เตเดฏเต‚ เดชเดฐเดฟเดถเต‹เดงเดฟเด•เตเด•เตเดจเตเดจเต. เดธเดพเดงเตเดฏเดฎเต†เด™เตเด•เดฟเตฝ, เด’เดฐเต เด‡เดตเดจเตเดฑเต เดชเตเดฑเดคเตเดคเตเดตเดฟเดŸเตเด•:

private onRoomFound(players: Party[]) {
    this.emit("room-found", {
      players,
    });
  }

6) เดฑเต‚เด‚ เดธเตผเดตเต€เดธเต เดˆ เด‡เดตเดจเตเดฑเดฟเดจเตเดฑเต† เด†เด•เดพเด‚เด•เตเดทเดฏเต‹เดŸเต† เดŽเดฒเตเดฒเดพ เด•เตเดฏเต‚เดตเตเด‚ เดธเดจเตเดคเต‹เดทเดคเตเดคเต‹เดŸเต† เดถเตเดฐเดฆเตเดงเดฟเด•เตเด•เตเดจเตเดจเต. เดžเด™เตเด™เตพเด•เตเด•เต เด‡เตปเดชเตเดŸเตเดŸเดพเดฏเดฟ เด•เดณเดฟเด•เตเด•เดพเดฐเตเดŸเต† เด’เดฐเต เดฒเดฟเดธเตเดฑเตเดฑเต เดฒเดญเดฟเด•เตเด•เตเด‚, เด…เดตเดฐเดฟเตฝ เดจเดฟเดจเตเดจเต เด’เดฐเต เดตเต†เตผเดšเตเดตเตฝ "เดฑเต‚เด‚" เดฐเต‚เดชเต€เด•เดฐเดฟเด•เตเด•เตเด•เดฏเตเด‚ เดคเต€เตผเดšเตเดšเดฏเดพเดฏเตเด‚ เด’เดฐเต เด‡เดตเดจเตเดฑเต เดจเตฝเด•เตเด•เดฏเตเด‚ เดšเต†เดฏเตเดฏเตเดจเตเดจเต:

queue.addListener("room-found", (event: RoomFoundEvent) => {
      console.log(
        `Room found mode: [${mode}]. Time to get free room for these guys`
      );
      const room = this.getFreeRoom(mode);
      room.fill(event.players);

      this.onRoomFormed(room);
    });

7) เด…เดคเดฟเดจเดพเตฝ เดžเด™เตเด™เตพ "เด‰เดฏเตผเดจเตเดจ" เด…เดงเดฟเด•เดพเดฐเดคเตเดคเดฟเดฒเต†เดคเตเดคเดฟ - เด•เตเดฒเดพเดธเต เดฌเต‡เดพเดŸเตเดŸเด‚. เดชเตŠเดคเตเดตเต‡, เด—เต‡เดฑเตเดฑเตโ€Œเดตเต‡เด•เตพ เดคเดฎเตเดฎเดฟเดฒเตเดณเตเดณ เดฌเดจเตเดงเดตเตเด‚ (เดฑเดทเตเดฏเตป เดญเดพเดทเดฏเดฟเตฝ เด‡เดคเต เดŽเดคเตเดฐ เดฐเดธเด•เดฐเดฎเดพเดฃเต†เดจเตเดจเต เดŽเดจเดฟเด•เตเด•เต เดฎเดจเดธเตเดธเดฟเดฒเดพเด•เตเดจเตเดจเดฟเดฒเตเดฒ) เดฎเดพเดšเตเดšเต เดฎเต‡เด•เตเด•เดฟเด‚เด—เดฟเดจเตเดฑเต† เดฌเดฟเดธเดฟเดจเดธเตเดธเต เดฏเตเด•เตเดคเดฟเดฏเตเด‚ เด…เดฆเตเดฆเต‡เดนเด‚ เด•เตˆเด•เดพเดฐเตเดฏเด‚ เดšเต†เดฏเตเดฏเตเดจเตเดจเต. เดฌเต‹เดŸเตเดŸเต เด‡เดตเดจเตเดฑเต เด•เต‡เตพเด•เตเด•เตเด•เดฏเตเด‚ เดŽเดฒเตเดฒเดพ เด‰เดชเดฏเต‹เด•เตเดคเดพเด•เตเด•เตพเด•เตเด•เตเด‚ เด’เดฐเต เดฑเต†เดกเดฟเดจเต†เดธเต เดšเต†เด•เตเด•เต เด…เดฏเดฏเตโ€Œเด•เตเด•เดพเตป เดกเดฟเดธเตโ€Œเด•เต‹เตผเดกเต เด—เต‡เดฑเตเดฑเตโ€Œเดตเต‡เดฏเต‹เดŸเต เด‰เดคเตเดคเดฐเดตเดฟเดŸเตเด•เดฏเตเด‚ เดšเต†เดฏเตเดฏเตเดจเตเดจเต.

Dota 2014-เดจเดพเดฏเดฟ เดžเด™เตเด™เตพ เดฎเดพเดšเตเดšเต เดฎเต‡เด•เตเด•เดฟเด‚เด—เต เดŽเดดเตเดคเตเด•เดฏเดพเดฃเต

8) เด†เดฐเต†เด™เตเด•เดฟเดฒเตเด‚ 3 เดฎเดฟเดจเดฟเดฑเตเดฑเดฟเดจเตเดณเตเดณเดฟเตฝ เด—เต†เดฏเดฟเด‚ เดจเดฟเดฐเดธเดฟเด•เตเด•เตเด•เดฏเต‹ เดธเตเดตเต€เด•เดฐเดฟเด•เตเด•เตเด•เดฏเต‹ เดšเต†เดฏเตเดคเดฟเดฒเตเดฒเต†เด™เตเด•เดฟเตฝ, เดžเด™เตเด™เตพ เด…เดตเดฐเต† เด•เตเดฏเต‚เดตเดฟเดฒเต‡เด•เตเด•เต เดคเดฟเดฐเดฟเดšเตเดšเดฏเด•เตเด•เดฟเดฒเตเดฒ. เดžเด™เตเด™เตพ เดŽเดฒเตเดฒเดพเดตเดฐเต†เดฏเตเด‚ เด•เตเดฏเต‚เดตเดฟเดฒเต‡เด•เตเด•เต เดคเดฟเดฐเดฟเดšเตเดšเต เดตเต€เดฃเตเดŸเตเด‚ 10 เดชเต‡เตผ เดตเดฐเตเดจเตเดจเดคเต เดตเดฐเต† เด•เดพเดคเตเดคเดฟเดฐเดฟเด•เตเด•เตเด•. เดŽเดฒเตเดฒเดพ เด•เดณเดฟเด•เตเด•เดพเดฐเตเด‚ เด—เต†เดฏเดฟเด‚ เด…เด‚เด—เต€เด•เดฐเดฟเดšเตเดšเดฟเดŸเตเดŸเตเดฃเตเดŸเต†เด™เตเด•เดฟเตฝ, เดฐเดธเด•เดฐเดฎเดพเดฏ เดญเดพเด—เด‚ เด†เดฐเด‚เดญเดฟเด•เตเด•เตเดจเตเดจเต.

เดธเดฎเตผเดชเตเดชเดฟเดค เดธเต†เตผเดตเตผ เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป

เดตเดฟเตปเดกเต‹เดธเต เดธเต†เตผเดตเตผ 2012 เด‰เดณเตเดณ VDS-เดฒเดพเดฃเต เดžเด™เตเด™เดณเตเดŸเต† เด—เต†เดฏเดฟเดฎเตเด•เตพ เดนเต‹เดธเตเดฑเตเดฑเต เดšเต†เดฏเตเดคเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเดคเต. เด‡เดคเดฟเตฝ เดจเดฟเดจเตเดจเต เดจเดฎเตเด•เตเด•เต เดจเดฟเดฐเดตเดงเดฟ เดจเดฟเด—เดฎเดจเด™เตเด™เดณเดฟเตฝ เดŽเดคเตเดคเดฟเดšเตเดšเต‡เดฐเดพเดจเดพเด•เตเด‚:

  1. เด…เดคเดฟเตฝ เด’เดฐเต เดกเต‹เด•เตเด•เดฑเตเด‚ เด‡เดฒเตเดฒ, เด…เดคเต เดŽเดจเตเดฑเต† เดนเตƒเดฆเดฏเดคเตเดคเดฟเตฝ เดคเดŸเตเดŸเดฟ
  2. เดžเด™เตเด™เตพ เดตเดพเดŸเด•เดฏเดฟเตฝ เดฒเดพเดญเดฟเด•เตเด•เตเดจเตเดจเต

Linux-เดฒเต† VPS-เตฝ เดจเดฟเดจเตเดจเต VDS-เตฝ เด’เดฐเต เดชเตเดฐเด•เตเดฐเดฟเดฏ เดชเตเดฐเดตเตผเดคเตเดคเดฟเดชเตเดชเดฟเด•เตเด•เตเด• เดŽเดจเตเดจเดคเดพเดฃเต เดšเตเดฎเดคเดฒ. เดžเดพเตป เดซเตเดฒเดพเดธเตเด•เดฟเตฝ เด’เดฐเต เดฒเดณเดฟเดคเดฎเดพเดฏ เดธเต†เตผเดตเตผ เดŽเดดเตเดคเดฟ. เด…เดคเต†, เดŽเดจเดฟเด•เตเด•เต เดชเตˆเดคเตเดคเตบ เด‡เดทเตเดŸเดฎเดฒเตเดฒ, เดชเด•เตเดทเต‡ เดŽเดจเดฟเด•เตเด•เต เดŽเดจเตเดคเตเดšเต†เดฏเตเดฏเดพเตป เด•เดดเดฟเดฏเตเด‚? เดˆ เดธเต†เตผเดตเตผ เด…เดคเดฟเตฝ เดŽเดดเตเดคเตเดจเตเดจเดคเต เดตเต‡เด—เดคเตเดคเดฟเดฒเตเด‚ เดŽเดณเตเดชเตเดชเดคเตเดคเดฟเดฒเตเด‚ เด†เดฃเต.

เด‡เดคเต 3 เดชเตเดฐเดตเตผเดคเตเดคเดจเด™เตเด™เตพ เดšเต†เดฏเตเดฏเตเดจเตเดจเต:

  1. เด’เดฐเต เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เด’เดฐเต เดธเต†เตผเดตเตผ เด†เดฐเด‚เดญเดฟเด•เตเด•เตเดจเตเดจเต - เด’เดฐเต เดฎเดพเดชเตเดชเต เดคเดฟเดฐเดžเตเดžเต†เดŸเตเด•เตเด•เตฝ, เด—เต†เดฏเดฟเด‚ เด†เดฐเด‚เดญเดฟเด•เตเด•เต‡เดฃเตเดŸ เด•เดณเดฟเด•เตเด•เดพเดฐเตเดŸเต† เดŽเดฃเตเดฃเด‚, เด’เดฐเต เด•เต‚เดŸเตเดŸเด‚ เดชเตเดฒเด—เดฟเดจเตเด•เตพ. เดžเดพเตป เด‡เดชเตเดชเต‹เตพ เดชเตเดฒเด—เดฟเดจเตเดจเตเด•เดณเต† เด•เตเดฑเดฟเดšเตเดšเต เดŽเดดเตเดคเดฟเดฒเตเดฒ - เดฐเดพเดคเตเดฐเดฟเดฏเดฟเตฝ เดฒเดฟเดฑเตเดฑเดฑเตเด•เดฃเด•เตเด•เดฟเดจเต เด•เดพเดชเตเดชเดฟเดฏเตเด‚ เด•เดฃเตเดฃเต€เดฐเตเด‚ เด•เต€เดฑเดฟเดฏ เดฎเตเดŸเดฟเดฏเตเด‚ เด•เดฒเตผเดจเตเดจ เดฎเดฑเตเดฑเตŠเดฐเต เด•เดฅเดฏเดพเดฃเดฟเดคเต.
  2. เดตเดฟเดœเดฏเดฟเด•เตเด•เดพเดคเตเดค เด•เดฃเด•เตเดทเดจเตเด•เดณเตเดŸเต† เด•เดพเดฐเตเดฏเดคเตเดคเดฟเตฝ เดธเต†เตผเดตเตผ เดจเดฟเตผเดคเตเดคเตเดจเตเดจเต/เดชเตเดจเดฐเดพเดฐเด‚เดญเดฟเด•เตเด•เตเดจเตเดจเต, เด…เดคเต เดžเด™เตเด™เตพเด•เตเด•เต เดธเตเดตเดฎเต‡เดงเดฏเดพ เดฎเดพเดคเตเดฐเดฎเต‡ เด•เตˆเด•เดพเดฐเตเดฏเด‚ เดšเต†เดฏเตเดฏเดพเตป เด•เดดเดฟเดฏเต‚.

เด‡เดตเดฟเดŸเต† เดŽเดฒเตเดฒเดพเด‚ เดฒเดณเดฟเดคเดฎเดพเดฃเต, เด•เต‹เดกเต เด‰เดฆเดพเดนเดฐเดฃเด™เตเด™เตพ เดชเต‹เดฒเตเด‚ เด‰เดšเดฟเดคเดฎเดฒเตเดฒ. 100 เดตเดฐเดฟ เดธเตเด•เตเดฐเดฟเดชเตเดฑเตเดฑเต

เด…เด™เตเด™เดจเต†, 10 เดชเต‡เตผ เด’เดคเตเดคเตเดšเต‡เตผเดจเตเดจเต เด—เต†เดฏเดฟเด‚ เดธเตเดตเต€เด•เดฐเดฟเดšเตเดšเดชเตเดชเต‹เตพ, เดธเต†เตผเดตเตผ เดฒเต‹เดžเตเดšเต เดšเต†เดฏเตเดคเต, เดŽเดฒเตเดฒเดพเดตเดฐเตเด‚ เด•เดณเดฟเด•เตเด•เดพเตป เด‰เดคเตเดธเตเด•เดฐเดพเดฏเดฟ, เด—เต†เดฏเดฟเดฎเดฟเดฒเต‡เด•เตเด•เต เด•เดฃเด•เตเดฑเตเดฑเตเดšเต†เดฏเตเดฏเดพเดจเตเดณเตเดณ เดฒเดฟเด™เตเด•เต เดธเตเดตเด•เดพเดฐเตเดฏ เดธเดจเตเดฆเต‡เดถเด™เตเด™เดณเดฟเตฝ เด…เดฏเดšเตเดšเต.

Dota 2014-เดจเดพเดฏเดฟ เดžเด™เตเด™เตพ เดฎเดพเดšเตเดšเต เดฎเต‡เด•เตเด•เดฟเด‚เด—เต เดŽเดดเตเดคเตเด•เดฏเดพเดฃเต

เดฒเดฟเด™เตเด•เดฟเตฝ เด•เตเดฒเดฟเด•เตเด•เตเดšเต†เดฏเตเดฏเตเดจเตเดจเดคเดฟเดฒเต‚เดŸเต†, เดชเตเดฒเต†เดฏเตผ เด—เต†เดฏเดฟเด‚ เดธเต†เตผเดตเดฑเดฟเดฒเต‡เด•เตเด•เต เด•เดฃเด•เตเดฑเตเดฑเตเดšเต†เดฏเตเดฏเตเดจเตเดจเต, เดคเตเดŸเตผเดจเตเดจเต เด…เดคเตเดฐเดฎเดพเดคเตเดฐเด‚. ~25 เดฎเดฟเดจเดฟเดฑเตเดฑเดฟเดจเต เดถเต‡เดทเด‚, เด•เดณเดฟเด•เตเด•เดพเดฐเตเดณเตเดณ เดตเต†เตผเดšเตเดตเตฝ "เดฑเต‚เด‚" เดฎเดพเดฏเตโ€Œเด•เตเด•เตเดจเตเดจเต.

เดฒเต‡เด–เดจเดคเตเดคเดฟเดจเตเดฑเต† เด…เดธเตเดตเดพเดธเตเดฅเตเดฏเดคเตเดคเดฟเดจเต เดžเดพเตป เดฎเตเตปเด•เต‚เดŸเตเดŸเดฟ เด•เตเดทเดฎ เดšเต‹เดฆเดฟเด•เตเด•เตเดจเตเดจเต, เดตเดณเดฐเต†เด•เตเด•เดพเดฒเดฎเดพเดฏเดฟ เดžเดพเตป เด‡เดตเดฟเดŸเต† เดŽเดดเตเดคเดฟเดฏเดฟเดŸเตเดŸเดฟเดฒเตเดฒ, เดชเตเดฐเดงเดพเดจเดชเตเดชเต†เดŸเตเดŸ เดตเดฟเดญเดพเด—เด™เตเด™เตพ เดนเตˆเดฒเตˆเดฑเตเดฑเต เดšเต†เดฏเตเดฏเดพเตป เดตเดณเดฐเต†เดฏเดงเดฟเด•เด‚ เด•เต‹เดกเต เด‰เดฃเตเดŸเต. เดจเต‚เดกเดฟเตฝเดธเต, เดšเตเดฐเตเด•เตเด•เดคเตเดคเดฟเตฝ.

เดตเดฟเดทเดฏเดคเตเดคเดฟเตฝ เดžเดพเตป เดคเดพเตฝเดชเตเดชเดฐเตเดฏเด‚ เด•เดพเดฃเตเด•เดฏเดพเดฃเต†เด™เตเด•เดฟเตฝ, เด’เดฐเต เดฐเดฃเตเดŸเดพเด‚ เดญเดพเด—เด‚ เด‰เดฃเตเดŸเดพเด•เตเด‚ - เด…เดคเดฟเตฝ srcds (เดธเต‹เดดเตเดธเต เดกเต†เดกเดฟเด•เตเด•เต‡เดฑเตเดฑเดกเต เดธเต†เตผเดตเตผ) เดŽเดจเตเดจเดคเดฟเดจเดพเดฏเตเดณเตเดณ เดชเตเดฒเด—เดฟเดจเตเด•เตพ เด‰เดณเตเดณ เดŽเดจเตเดฑเต† เดชเต€เดกเดจเด‚ เด…เดŸเด™เตเด™เดฟเดฏเดฟเดฐเดฟเด•เตเด•เตเด‚, เด•เต‚เดŸเดพเดคเต†, เด’เดฐเตเดชเด•เตเดทเต‡, เด’เดฐเต เดฑเต‡เดฑเตเดฑเดฟเด‚เด—เต เดธเดฟเดธเตเดฑเตเดฑเดตเตเด‚ เดฎเดฟเดจเดฟ-เดกเต‹เดŸเตเดŸเดฌเดซเตเด‚, เด—เต†เดฏเดฟเด‚ เดธเตเดฅเดฟเดคเดฟเดตเดฟเดตเดฐเด•เตเด•เดฃเด•เตเด•เตเด•เดณเตเดณเตเดณ เด’เดฐเต เดธเตˆเดฑเตเดฑเตเด‚.

เดšเดฟเดฒ เดฒเดฟเด™เตเด•เตเด•เตพ:

  1. เดžเด™เตเด™เดณเตเดŸเต† เดตเต†เดฌเตเดธเตˆเดฑเตเดฑเต (เดธเตเดฅเดฟเดคเดฟเดตเดฟเดตเดฐเด•เตเด•เดฃเด•เตเด•เตเด•เตพ, เดฒเต€เดกเตผเดฌเต‹เตผเดกเต, เดšเต†เดฑเดฟเดฏ เดฒเดพเตปเดกเดฟเด‚เด—เต เดชเต‡เดœเต, เด•เตเดฒเดฏเดจเตเดฑเต เดกเต—เตบเดฒเต‹เดกเต)
  2. เดกเดฟเดธเตเด•เต‹เตผเดกเต เดธเต†เตผเดตเตผ

เด…เดตเดฒเด‚เดฌเด‚: www.habr.com

เด’เดฐเต เด…เดญเดฟเดชเตเดฐเดพเดฏเด‚ เดšเต‡เตผเด•เตเด•เตเด•