рд╣рдо Dota 2014 рдХреЗ рд▓рд┐рдП рдореИрдЪрдореЗрдХрд┐рдВрдЧ рд▓рд┐рдЦ рд░рд╣реЗ рд╣реИрдВ

рдирдорд╕реНрдХрд╛рд░.

рдЗрд╕ рд╡рд╕рдВрдд рдореЗрдВ рдореБрдЭреЗ рдПрдХ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдорд┐рд▓рд╛ рдЬрд┐рд╕рдореЗрдВ рд▓реЛрдЧреЛрдВ рдиреЗ рд╕реАрдЦрд╛ рдХрд┐ Dota 2 рд╕рд░реНрд╡рд░ рд╕рдВрд╕реНрдХрд░рдг 2014 рдХреИрд╕реЗ рдЪрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░, рддрджрдиреБрд╕рд╛рд░, рдЙрд╕ рдкрд░ рдЦреЗрд▓рд╛ рдЬрд╛рддрд╛ рд╣реИред рдореИрдВ рдЗрд╕ рдЦреЗрд▓ рдХрд╛ рдмрд╣реБрдд рдмрдбрд╝рд╛ рдкреНрд░рд╢рдВрд╕рдХ рд╣реВрдВ, рдФрд░ рдореИрдВ рдЕрдкрдиреЗ рдмрдЪрдкрди рдореЗрдВ рдбреВрдмрдиреЗ рдХрд╛ рдпрд╣ рдЕрдиреВрдард╛ рдЕрд╡рд╕рд░ рдирд╣реАрдВ рдЫреЛрдбрд╝ рд╕рдХрддрд╛ред

рдореИрдВрдиреЗ рдмрд╣реБрдд рдЧрд╣рд░рд╛рдИ рд╕реЗ рд╡рд┐рдЪрд╛рд░ рдХрд┐рдпрд╛, рдФрд░ рдРрд╕рд╛ рд╣реБрдЖ рдХрд┐ рдореИрдВрдиреЗ рдПрдХ рдбрд┐рд╕реНрдХреЙрд░реНрдб рдмреЙрдЯ рд▓рд┐рдЦрд╛ рдЬреЛ рд▓рдЧрднрдЧ рд╕рднреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЬрд╝рд┐рдореНрдореЗрджрд╛рд░ рд╣реИ рдЬреЛ рдЧреЗрдо рдХреЗ рдкреБрд░рд╛рдиреЗ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рд╕рдорд░реНрдерд┐рдд рдирд╣реАрдВ рд╣реИ, рдЕрд░реНрдерд╛рддреН рдореИрдЪрдореЗрдХрд┐рдВрдЧред
рдмреЙрдЯ рдХреЗ рд╕рд╛рде рд╕рднреА рдирд╡рд╛рдЪрд╛рд░реЛрдВ рд╕реЗ рдкрд╣рд▓реЗ, рд▓реЙрдмреА рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдмрдирд╛рдИ рдЧрдИ рдереАред рд╣рдордиреЗ рдПрдХ рд╕рдВрджреЗрд╢ рдкрд░ 10 рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдПрдВ рдПрдХрддреНрд░ рдХреАрдВ рдФрд░ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдПрдХ рд╕рд░реНрд╡рд░ рдЗрдХрдЯреНрдард╛ рдХрд┐рдпрд╛, рдпрд╛ рдПрдХ рд╕реНрдерд╛рдиреАрдп рд▓реЙрдмреА рдХреА рдореЗрдЬрдмрд╛рдиреА рдХреАред

рд╣рдо Dota 2014 рдХреЗ рд▓рд┐рдП рдореИрдЪрдореЗрдХрд┐рдВрдЧ рд▓рд┐рдЦ рд░рд╣реЗ рд╣реИрдВ

рдПрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЗ рд░реВрдк рдореЗрдВ рдореЗрд░рд╛ рд╕реНрд╡рднрд╛рд╡ рдЗрддрдиреЗ рд╕рд╛рд░реЗ рдореИрдиреНрдпреБрдЕрд▓ рдХрд╛рдо рдХрд╛ рд╕рд╛рдордирд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрд╛, рдФрд░ рд░рд╛рдд рднрд░ рдореЗрдВ рдореИрдВрдиреЗ рдмреЙрдЯ рдХрд╛ рд╕рдмрд╕реЗ рд╕рд░рд▓ рд╕рдВрд╕реНрдХрд░рдг рддреИрдпрд╛рд░ рдХрд┐рдпрд╛, рдЬреЛ 10 рд▓реЛрдЧреЛрдВ рдХреЗ рд╣реЛрдиреЗ рдкрд░ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд╕рд░реНрд╡рд░ рдХреЛ рдКрдкрд░ рдЙрдард╛ рджреЗрддрд╛ рдерд╛ред

рдореИрдВрдиреЗ рддреБрд░рдВрдд рдиреЛрдбрдЬ рдореЗрдВ рд▓рд┐рдЦрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛, рдХреНрдпреЛрдВрдХрд┐ рдореБрдЭреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкрд╛рдпрдерди рдкрд╕рдВрдж рдирд╣реАрдВ рд╣реИ, рдФрд░ рдореИрдВ рдЗрд╕ рдорд╛рд╣реМрд▓ рдореЗрдВ рдЕрдзрд┐рдХ рд╕рд╣рдЬ рдорд╣рд╕реВрд╕ рдХрд░рддрд╛ рд╣реВрдВред

рдбрд┐рд╕реНрдХреЛрд░реНрдб рдХреЗ рд▓рд┐рдП рдмреЙрдЯ рд▓рд┐рдЦрдиреЗ рдХрд╛ рдпрд╣ рдореЗрд░рд╛ рдкрд╣рд▓рд╛ рдЕрдиреБрднрд╡ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдмрд╣реБрдд рд╕рд░рд▓ рдирд┐рдХрд▓рд╛ред рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдПрдирдкреАрдПрдо рдореЙрдбреНрдпреВрд▓ 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) рдпрд╣ рдЧреЗрдЯрд╡реЗ рд░реВрдорд╕рд░реНрд╡рд┐рд╕ рдкрд░ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдХрд╣рддрд╛ рд╣реИ, "рдбрд┐рд╕реНрдХреЙрд░реНрдб рд╕реЗ рдПрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрддрд╛рд░ рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ, рдореЛрдб: рдЕрдирд░реЗрдЯреЗрдб рдЧреЗрдоред"

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) рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣рдо "рд╕рд░реНрд╡реЛрдЪреНрдЪ" рдЕрдзрд┐рдХрд╛рд░реА - рд╡рд░реНрдЧ рддрдХ рдкрд╣реБрдБрдЪ рдЧрдпреЗ рдмреАрдУрдЯреА. рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рд╡рд╣ рдЧреЗрдЯрд╡реЗ (рдореИрдВ рд╕рдордЭ рдирд╣реАрдВ рдкрд╛рддрд╛ рдХрд┐ рдпрд╣ рд░реВрд╕реА рдореЗрдВ рдХрд┐рддрдирд╛ рдЕрдЬреАрдм рд▓рдЧрддрд╛ рд╣реИ) рдФрд░ рдореИрдЪрдореЗрдХрд┐рдВрдЧ рдХреЗ рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рддрд░реНрдХ рдХреЗ рдмреАрдЪ рд╕рдВрдмрдВрдз рд╕реЗ рдирд┐рдкрдЯрддрд╛ рд╣реИред рдмреЙрдЯ рдШрдЯрдирд╛ рдХреЛ рд╕реБрдирддрд╛ рд╣реИ рдФрд░ рдбрд┐рд╕реНрдХреЙрд░реНрдбрдЧреЗрдЯрд╡реЗ рдХреЛ рд╕рднреА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рддрддреНрдкрд░рддрд╛ рдЬрд╛рдВрдЪ рднреЗрдЬрдиреЗ рдХрд╛ рдЖрджреЗрд╢ рджреЗрддрд╛ рд╣реИред

рд╣рдо Dota 2014 рдХреЗ рд▓рд┐рдП рдореИрдЪрдореЗрдХрд┐рдВрдЧ рд▓рд┐рдЦ рд░рд╣реЗ рд╣реИрдВ

8) рдпрджрд┐ рдХреЛрдИ 3 рдорд┐рдирдЯ рдХреЗ рднреАрддрд░ рдЦреЗрд▓ рдХреЛ рдЕрд╕реНрд╡реАрдХрд╛рд░ рдХрд░ рджреЗрддрд╛ рд╣реИ рдпрд╛ рд╕реНрд╡реАрдХрд╛рд░ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рддреЛ рд╣рдо рдЙрдиреНрд╣реЗрдВ рдХрддрд╛рд░ рдореЗрдВ рд╡рд╛рдкрд╕ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред рд╣рдо рдмрд╛рдХреА рд╕рднреА рдХреЛ рдХрддрд╛рд░ рдореЗрдВ рд▓реМрдЯрд╛рддреЗ рд╣реИрдВ рдФрд░ рддрдм рддрдХ рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рддреЗ рд╣реИрдВ рдЬрдм рддрдХ рдХрд┐ рдлрд┐рд░ рд╕реЗ 10 рд▓реЛрдЧ рди рдЖ рдЬрд╛рдПрдБред рдпрджрд┐ рд╕рднреА рдЦрд┐рд▓рд╛рдбрд╝рд┐рдпреЛрдВ рдиреЗ рдЦреЗрд▓ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░ рд▓рд┐рдпрд╛ рд╣реИ, рддреЛ рджрд┐рд▓рдЪрд╕реНрдк рд╣рд┐рд╕реНрд╕рд╛ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИред

рд╕рдорд░реНрдкрд┐рдд рд╕рд░реНрд╡рд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди

рд╣рдорд╛рд░реЗ рдЧреЗрдо рд╡рд┐рдВрдбреЛрдЬ рд╕рд░реНрд╡рд░ 2012 рдХреЗ рд╕рд╛рде рд╡реАрдбреАрдПрд╕ рдкрд░ рд╣реЛрд╕реНрдЯ рдХрд┐рдП рдЧрдП рд╣реИрдВред рдЗрд╕рд╕реЗ рд╣рдо рдХрдИ рдирд┐рд╖реНрдХрд░реНрд╖ рдирд┐рдХрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВ:

  1. рдЗрд╕ рдкрд░ рдХреЛрдИ рдбреЙрдХрдЯрд░ рдирд╣реАрдВ рд╣реИ, рдЬреЛ рдореЗрд░реЗ рджрд┐рд▓ рдкрд░ рд▓рдЧрд╛
  2. рд╣рдо рдХрд┐рд░рд╛рдП рдкрд░ рдмрдЪрдд рдХрд░рддреЗ рд╣реИрдВ

рдХрд╛рд░реНрдп Linux рдкрд░ VPS рд╕реЗ VDS рдкрд░ рдПрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЪрд▓рд╛рдирд╛ рд╣реИред рдореИрдВрдиреЗ рдлреНрд▓рд╛рд╕реНрдХ рдореЗрдВ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рд╕рд░реНрд╡рд░ рд▓рд┐рдЦрд╛ред рд╣рд╛рдВ, рдореБрдЭреЗ рдкрд╛рдпрдерди рдкрд╕рдВрдж рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдк рдХреНрдпрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ? рдЗрд╕ рд╕рд░реНрд╡рд░ рдкрд░ рдЗрд╕ рд╕рд░реНрд╡рд░ рдХреЛ рд▓рд┐рдЦрдирд╛ рддреЗрдЬрд╝ рдФрд░ рдЖрд╕рд╛рди рд╣реИред

рдпрд╣ 3 рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИ:

  1. рдПрдХ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рд╕рд╛рде рдПрдХ рд╕рд░реНрд╡рд░ рд╢реБрд░реВ рдХрд░рдирд╛ - рдПрдХ рдорд╛рдирдЪрд┐рддреНрд░ рдХрд╛ рдЪрдпрди рдХрд░рдирд╛, рдЧреЗрдо рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЦрд┐рд▓рд╛рдбрд╝рд┐рдпреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдФрд░ рдкреНрд▓рдЧрдЗрдиреНрд╕ рдХрд╛ рдПрдХ рд╕реЗрдЯред рдореИрдВ рдЕрдм рдкреНрд▓рдЧрдЗрдиреНрд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рд▓рд┐рдЦреВрдВрдЧрд╛ - рд░рд╛рдд рдореЗрдВ рдЖрдВрд╕реБрдУрдВ рдФрд░ рдлрдЯреЗ рдмрд╛рд▓реЛрдВ рдХреЗ рд╕рд╛рде рдорд┐рд▓реА рд▓реАрдЯрд░ рдХреЙрдлреА рдХреА рдпрд╣ рдПрдХ рдЕрд▓рдЧ рдХрд╣рд╛рдиреА рд╣реИред
  2. рдЕрд╕рдлрд▓ рдХрдиреЗрдХреНрд╢рди рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рд╕рд░реНрд╡рд░ рдХреЛ рд░реЛрдХрдирд╛/рдкреБрдирдГ рдЖрд░рдВрдн рдХрд░рдирд╛, рдЬрд┐рд╕реЗ рд╣рдо рдХреЗрд╡рд▓ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рд╕рдВрднрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВред

рдпрд╣рд╛рдВ рд╕рдм рдХреБрдЫ рд╕рд░рд▓ рд╣реИ, рдХреЛрдб рдЙрджрд╛рд╣рд░рдг рднреА рдЙрдкрдпреБрдХреНрдд рдирд╣реАрдВ рд╣реИрдВред 100 рд▓рд╛рдЗрди рдХреА рд╕реНрдХреНрд░рд┐рдкреНрдЯ

рдЗрд╕рд▓рд┐рдП, рдЬрдм 10 рд▓реЛрдЧ рдПрдХрддреНрд░ рд╣реБрдП рдФрд░ рдЧреЗрдо рд╕реНрд╡реАрдХрд╛рд░ рдХрд┐рдпрд╛, рддреЛ рд╕рд░реНрд╡рд░ рд▓реЙрдиреНрдЪ рд╣реБрдЖ рдФрд░ рд╣рд░ рдХреЛрдИ рдЦреЗрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрддреНрд╕реБрдХ рдерд╛, рдЧреЗрдо рд╕реЗ рдЬреБрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд▓рд┐рдВрдХ рдирд┐рдЬреА рд╕рдВрджреЗрд╢реЛрдВ рдореЗрдВ рднреЗрдЬрд╛ рдЧрдпрд╛ рдерд╛ред

рд╣рдо Dota 2014 рдХреЗ рд▓рд┐рдП рдореИрдЪрдореЗрдХрд┐рдВрдЧ рд▓рд┐рдЦ рд░рд╣реЗ рд╣реИрдВ

рд▓рд┐рдВрдХ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдХреЗ, рдкреНрд▓реЗрдпрд░ рдЧреЗрдо рд╕рд░реНрд╡рд░ рд╕реЗ рдХрдиреЗрдХреНрдЯ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдмрд╕ рдЗрддрдирд╛ рд╣реАред ~25 рдорд┐рдирдЯ рдХреЗ рдмрд╛рдж, рдЦрд┐рд▓рд╛рдбрд╝рд┐рдпреЛрдВ рд╡рд╛рд▓рд╛ рдЖрднрд╛рд╕реА "рдХрдорд░рд╛" рд╕рд╛рдлрд╝ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред

рдореИрдВ рд▓реЗрдЦ рдХреА рдЕрдЬреАрдмрддрд╛ рдХреЗ рд▓рд┐рдП рдкрд╣рд▓реЗ рд╕реЗ рдорд╛рдлреА рдорд╛рдВрдЧрддрд╛ рд╣реВрдВ, рдореИрдВрдиреЗ рдпрд╣рд╛рдВ рд▓рдВрдмреЗ рд╕рдордп рд╕реЗ рдирд╣реАрдВ рд▓рд┐рдЦрд╛ рд╣реИ, рдФрд░ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЕрдиреБрднрд╛рдЧреЛрдВ рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЕрдзрд┐рдХ рдХреЛрдб рд╣реИред рдиреВрдбрд▓реНрд╕, рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВред

рдпрджрд┐ рдореБрдЭреЗ рд╡рд┐рд╖рдп рдореЗрдВ рд░реБрдЪрд┐ рджрд┐рдЦрд╛рдИ рджреЗрддреА рд╣реИ, рддреЛ рджреВрд╕рд░рд╛ рднрд╛рдЧ рд╣реЛрдЧрд╛ - рдЗрд╕рдореЗрдВ srcds (рд╕реНрд░реЛрдд рд╕рдорд░реНрдкрд┐рдд рд╕рд░реНрд╡рд░) рдХреЗ рд▓рд┐рдП рдкреНрд▓рдЧрдЗрдиреНрд╕ рдХреЗ рд╕рд╛рде рдореЗрд░реА рдкреАрдбрд╝рд╛ рд╢рд╛рдорд┐рд▓ рд╣реЛрдЧреА, рдФрд░, рд╢рд╛рдпрдж, рдПрдХ рд░реЗрдЯрд┐рдВрдЧ рдкреНрд░рдгрд╛рд▓реА рдФрд░ рдорд┐рдиреА-рдбреЙрдЯрдмрдл, рдЧреЗрдо рдЖрдВрдХрдбрд╝реЛрдВ рд╡рд╛рд▓реА рдПрдХ рд╕рд╛рдЗрдЯ рд╣реЛрдЧреАред

рдХреБрдЫ рд▓рд┐рдВрдХ:

  1. рд╣рдорд╛рд░реА рд╡реЗрдмрд╕рд╛рдЗрдЯ (рд╕рд╛рдВрдЦреНрдпрд┐рдХреА, рд▓реАрдбрд░рдмреЛрд░реНрдб, рдЫреЛрдЯрд╛ рд▓реИрдВрдбрд┐рдВрдЧ рдкреГрд╖реНрда рдФрд░ рдХреНрд▓рд╛рдЗрдВрдЯ рдбрд╛рдЙрдирд▓реЛрдб)
  2. рдХрд▓рд╣ рд╕рд░реНрд╡рд░

рд╕реНрд░реЛрдд: www.habr.com

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╝реЗрдВ