Skip to content

Latest commit

 

History

History
149 lines (112 loc) · 3.99 KB

messages.md

File metadata and controls

149 lines (112 loc) · 3.99 KB

Сообщения (Message)

Message является единой точкой входа для отправки запросов клиентам. Базовый класс содержит название сообщения, которое является идентичным io-event'у, а так же DTO (Data transfer object) - тело сообщения.

Изменение тела сообщения должно происходить через вспомогательные методы, которые могут принимать в качестве аргументов классы сервера, конвертируя их в пригодный для передачи вид и прикладывая их к DTO (напр. withDamage)

Все сообщения хранятся в папке server/messages, и должны быть сгруппированы по сущностям либо по логическим структурам (напр. messages/player.js содержит все сообщения, относящиеся к сущности Player)

Пример

Отправка сообщения:

let PlayerMessages = require('../messages/player');

...

(new PlayerMessages.Connected()) // Создаем сообщение
            .withPlayer(playerEntity) // Добавляем информацию об игроке
            .withVector(playerEntity.position) // Передаем позицию
            .send(); // Не указываем сокет - броадкастим

Структура сообщения:

{ 
    Player: { 
      id: 1 
    }, 
    Vector: { 
      x: 0, 
      y: 0 
    } 
}

Можно расширять методы сообщения или добавлять свои, например:

    class DamagedMessage extends Message {
        constructor() {
            super('playerDamaged');
        }

        /*
         * Переопределяем этот метод, чтобы добавить в DTO
         * информацию о здоровье игрока
         */
        withPlayer(player) {
            super.withPlayer(player);

            // Включить информацию о здоровье
            super.DTO.Player.health = player.health;

            return this;
        }
    },

Таким образом:

{ 
    Player: { 
      id: 1,
      health: 100
    }, 
    
    // ...
}

With

With - свойство тела сообщения, которое содержит базовую информацию о сущности, участвующую в сообщении.

Поля:

  • id - идентификатор сущности
  • entityClass - класс сущности
  • dimensions - размеры

Player

Player - свойство тела сообщения, содержащее информацию об игроке, участвующем в сообщении.

Поля:

  • id - идентификатор игрока

Vector

Vector - свойство тела сообщения, содержащее вектор, участвующий в сообщении (напр. позиция).

Структура:

{
  x: 5,
  y: 0
}

Damage

Содержит информацию о повреждениях, и сущности, которая их порождает.

Структура:

{
  Damage: 50,
  Damager: {
    id: 10,
    entityClass: 'effectspell'
  }
}

Missile

Содержит информацию о заклинании, которое скастовал игрок.

Структура:

{
  Speed: 10,
  Direction: {
    x: 1,
    y: 1
  }
}

Effect

Effect - свойство тела сообщения, содержащее информацию об эффекте, накладываемом на сущность.

Поля:

  • effectClass - класс эффекта
  • duration - длительность эффекта