Skip to content

Socket.IO: подключение и ответы ​

Network использует Socket.IO с Engine.IO path /socket и транспортом WebSocket без polling. Path и namespace являются разными настройками. Список обработчиков: события, JSON.

Пространства имён Network ​

NamespaceКлиентAuth
/clientПанель сотрудников .webauth.token: personal RS256 panel scope с точными pid/sid или legacy scoped token
/frontКабинет/публичный frontend с аккаунтомauth.token, предусмотренный аккаунтный/сетевой токен; это не гарантированный anonymous socket

Namespace / не является запасным публичным API. Для пользовательского подключения проверяются проект, сервер, действующая сессия, права и подписка.

Пример клиента панели ​

Пример для socket.io-client 4.x после получения действительного scoped token. networkOrigin и panelToken предоставляет ваш штатный auth flow, они не записываются в исходники:

js
import { io } from 'socket.io-client'

const socket = io(`${networkOrigin}/client`, {
  path: '/socket',
  transports: ['websocket'],
  auth: { token: panelToken }
})

socket.on('connected', async () => {
  try {
    const result = await socket.timeout(10000).emitWithAck('server.getConfig', {})
    if (result.status !== 'success') {
      showError(result.error?.name, result.error?.message)
      return
    }
    applyConfig(result.response)
  } catch {
    showConnectionTimeout()
  }
})

Функции отображения/применения являются функциями приложения, не частью ozProtect SDK. Регистрируйте listeners один раз; при переподключении не добавляйте второй обработчик поверх прежнего. Источник параметров клиента: Socket.IO client options, ack API.

Ответ на запрос ​

Обычный запрос клиента в обработчик Network получает ACK:

json
{"status":"success","response":{}}
json
{"status":"error","error":{"name":"access_denied","message":"..."}}

Событие приложения connected означает готовый пользовательский контекст после проверок. Транспортный connect сам по себе не подтверждает готовность панели.

Большие идентификаторы и повторы ​

Minecraft player ID всегда передаётся строкой из 19 цифр. Не используйте Number, parseInt или обычный JSON parser, уже потерявший точность входного numeric literal. Backend умеет bigint-safe разбор предусмотренного raw payload; отправитель всё равно должен сохранять строковый тип.

Не повторяйте наказание или upload после неопределённого ACK автоматически. Сначала прочитайте состояние/историю; потеря ответа не отменяет запись. Внутри одного кластера Redis adapter поддерживает ACK, между регионами global notify не гарантирует ответ.

Публикуется только разрешённый пользовательский интерфейс панели и кабинета. Внутренние протоколы приложений здесь не описываются.

Разработано с ❤️ от ozLiginus