@VovaVist

Что значит этот код?

Имеется бот для игры хотел бы узнать значение кода в одном из файлов. Сам бот работает с несколькими node модулями и один из них это puppeteer, может кто знает, как его можно запустить или просто объяснить что именно делает именно этот код. Локальный сервер с портом 9977 я создавал, и запускал файл в корне папки бота через node, ничего не происходило.

const WebSocket = require('ws');
const router = require('./event-router');

class RegistryClient {
  options = {
    server: process.env.REGISTRY_SERVER || 'ws://localhost:9977'
  }

  ws;
  onClose = noop;

  constructor(options = null) {
    if (options) {
      this.options = { ...this.options, ...options };
    }

    this.ws = new WebSocket(this.options.server);
    this.ws.on('open', () => {
      this.ws.on('message', message => this.handleMessage(message));
    });

    this.ws.on('close', () => {
      this.onClose();
    });
  }

  handleMessage(message) {
    console.log('>', message)
    try {
      message = JSON.parse(message);
      const { event, payload } = message;
      return router(event, payload, (event, payload) => this.sendEvent(event, payload), this.ws);
    } catch (ignore) {
      console.warn('Invalid message', message);
    }
  }

  sendEvent(event, payload) {
    const message = JSON.stringify({ event, payload });
    console.log('<', message);
    this.ws.send(message)
  }
}

function noop() {}

module.exports = RegistryClient;
  • Вопрос задан
  • 199 просмотров
Решения вопроса 1
@Konf
Редактирую ответы на 2 + 2 по 4 раза
tl;dr Распределяет события клиент <--> сервер

Класс создаёт websocket сервер по адресу
process.env.REGISTRY_SERVER || 'ws://localhost:9977'
и обрабатывает все входящие сообщения следующим образом: JSON.parse(message) --> const { event, payload } = message, что значит что входящие сообщения (от клиента) должны иметь формат { event: "someEventName", payload: { ... } }. Потом это сообщение уже в виде объекта идёт в какой-то обработчик событий, который, скорее всего, распределяет этот объект по функциям-подписчикам (listeners), объявленным в других файлах. Эти функции там что-то делают с этими сообщениями, и вызывают callback sendEvent с какими-то новыми event и payload.

То есть, если это игра, то от клиента может прийти что-то такое:
{ event: "userInput", payload: { type: "keyPress", value: "f3" } }
Затем это через router будет передано в какую-то функцию, которая, например, выяснит что персонаж сейчас стоит на клетке, которая при нажатии ф3 должна телепортировать игрока. Ещё какая-нибудь функция сделает это, и, в конце концов, будет вызван callback sendEvent, который отправит на клиент игрока сообщение
{ event: "characterMove", payload: { x: 123, y: 532 } }
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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