Socket.IO: подключение и ответы
Network использует Socket.IO с Engine.IO path /socket и транспортом WebSocket без polling. Path и namespace являются разными настройками. Список обработчиков: события, JSON.
Пространства имён Network
| Namespace | Клиент | Auth |
|---|---|---|
/client | Панель сотрудников .web | auth.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, они не записываются в исходники:
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:
{"status":"success","response":{}}{"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 не гарантирует ответ.
Публикуется только разрешённый пользовательский интерфейс панели и кабинета. Внутренние протоколы приложений здесь не описываются.
