Задать вопрос
@awenn2015
Веб-программист самоучка

Как сделать рассылку n-ым подключенным клиентам?

Учу nodejs и решил попробовать себя в реализации простой онлайн игры (крестики-нолики), знаю про socket.io но было интересно можно ли подобное реализовать на EventEmitter.

Создание игр и подключение к ним я сделал но вот столкнулся с вопросом как отправить событие только двум игрокам в комнате (активной игре), сначала решил что можно двоих забивать в массив и хранить их объект Response но потом после ошибок решил что такое не прокатит так как resp закрывается после того как отработает, сейчас предполагаю что можно взять объект socket (видел в свойствах) но сомневаюсь, нужна ваша помощь, заранее благодарю
  • Вопрос задан
  • 39 просмотров
Подписаться 1 Простой 1 комментарий
Решения вопроса 1
@awenn2015 Автор вопроса
Веб-программист самоучка
Все оказалось куда проще, решение такого, при каждом подключении сохраняю uuid пользователя в массив, при отключении соответственно удаляю, так как слушатели это простой массив то список uuid будет работать так же как и список слушателей, то есть они по идее должны быть синхронизированы по индексам, соответственно вот сама реализация рассылки

public broadcast(type: string, receivers: string[], msg?: any) {
    const events = this.emitter.eventNames()

    if (!events.includes(type)) {
      console.warn('Предупреждение: такое событие не добавлено!')
      return
    }

    const list = receivers.map(id => this._players.indexOf(id))
    const listeners = this.emitter.listeners(type)

    for (const index of list) {
      const fn = listeners[index]

      if (typeof fn === 'function')
        fn(msg)
      else
        console.error(`Ошибка, под индексом ${index} нет слушателя!`)
    }
  }
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы