เช…เชฎเซ‡ Dota 2014 เชฎเชพเชŸเซ‡ เชฎเซ‡เชšเชฎเซ‡เช•เชฟเช‚เช— เชฒเช–เซ€ เชฐเชนเซเชฏเชพ เช›เซ€เช

เชฌเชงเชพ เชจเซ‡ เชจเชฎเชธเซเช•เชพเชฐ.

เช† เชตเชธเช‚เชคเชฎเชพเช‚ เชฎเชจเซ‡ เชเช• เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸ เชฎเชณเซเชฏเซ‹ เชœเซ‡เชฎเชพเช‚ เชฒเซ‹เช•เซ‹เช เชกเซ‹เชŸเชพ 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) เชถเซ‹เชง เชถเชฐเซ‚ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡, เชคเซ‡ Gateway=Discord เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ‡ เช›เซ‡, เชเชŸเชฒเซ‡ เช•เซ‡, เชธเช‚เชฆเซ‡เชถ เชชเชฐ เชชเซเชฐเชคเชฟเช•เซเชฐเชฟเชฏเชพ เช†เชชเซ‡ เช›เซ‡:

เช…เชฎเซ‡ Dota 2014 เชฎเชพเชŸเซ‡ เชฎเซ‡เชšเชฎเซ‡เช•เชฟเช‚เช— เชฒเช–เซ€ เชฐเชนเซเชฏเชพ เช›เซ€เช

3) เช† เช—เซ‡เชŸเชตเซ‡ RoomService เชชเชฐ เชœเชพเชฏ เช›เซ‡ เช…เชจเซ‡ เช•เชนเซ‡ เช›เซ‡ เช•เซ‡ "เชตเชฟเชตเชพเชฆเชฎเชพเช‚เชฅเซ€ เชตเชชเชฐเชพเชถเช•เชฐเซเชคเชพ เช•เชคเชพเชฐเชฎเชพเช‚ เชฆเชพเช–เชฒ เชฅเชตเชพ เชฎเชพเช‚เช—เซ‡ เช›เซ‡, เชฎเซ‹เชก: เช…เชจเชฐเซ‡เชŸเซ‡เชก เช—เซ‡เชฎ."

4) เชฐเซ‚เชฎเชธเชฐเซเชตเชฟเชธ เช—เซ‡เชŸเชตเซ‡เชจเซ€ เชตเชฟเชจเช‚เชคเซ€ เชธเซเชตเซ€เช•เชพเชฐเซ‡ เช›เซ‡ เช…เชจเซ‡ เชตเชชเชฐเชพเชถเช•เชฐเซเชคเชพ (เชตเชงเซ เชธเซเชชเชทเซเชŸ เชฐเซ€เชคเซ‡, เชตเชชเชฐเชพเชถเช•เชฐเซเชคเชพ เชœเซ‚เชฅ) เชจเซ‡ เช‡เชšเซเช›เชฟเชค เช•เชคเชพเชฐเชฎเชพเช‚ เชงเช•เซ‡เชฒเซ‡ เช›เซ‡.

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) เชคเซ‡เชฅเซ€ เช…เชฎเซ‡ "เช‰เชšเซเชš" เชธเชคเซเชคเชพ - เชตเชฐเซเช— เชธเซเชงเซ€ เชชเชนเซ‹เช‚เชšเซเชฏเชพ เชฌเซ‹เชŸ. เชธเชพเชฎเชพเชจเซเชฏ เชฐเซ€เชคเซ‡, เชคเซ‡ เช—เซ‡เชŸเชตเซ‡ เชตเชšเซเชšเซ‡เชจเชพ เชœเซ‹เชกเชพเชฃ เชธเชพเชฅเซ‡ เชตเซเชฏเชตเชนเชพเชฐ เช•เชฐเซ‡ เช›เซ‡ (เชนเซเช‚ เชธเชฎเชœเซ€ เชถเช•เชคเซ‹ เชจเชฅเซ€ เช•เซ‡ เชคเซ‡ เชฐเชถเชฟเชฏเชจเชฎเชพเช‚ เช•เซ‡เชŸเชฒเซเช‚ เชฐเชฎเซเชœเซ€ เชฒเชพเช—เซ‡ เช›เซ‡) เช…เชจเซ‡ เชฎเซ‡เชšเชฎเซ‡เช•เชฟเช‚เช—เชจเชพ เชตเซเชฏเชตเชธเชพเชฏเชฟเช• เชคเชฐเซเช•. เชฌเซ‰เชŸ เช‡เชตเซ‡เชจเซเชŸเชจเซ‡ เชธเชพเช‚เชญเชณเซ‡ เช›เซ‡ เช…เชจเซ‡ เชคเชฎเชพเชฎ เชตเชชเชฐเชพเชถเช•เชฐเซเชคเชพเช“เชจเซ‡ เชฐเซ‡เชกเซ€เชจเซ‡เชธ เชšเซ‡เช• เชฎเซ‹เช•เชฒเชตเชพ เชฎเชพเชŸเซ‡ DiscordGateway เชจเซ‡ เช†เชฆเซ‡เชถ เช†เชชเซ‡ เช›เซ‡.

เช…เชฎเซ‡ 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

เชเช• เชŸเชฟเชชเซเชชเชฃเซ€ เช‰เชฎเซ‡เชฐเซ‹