Помощь - Поиск - Пользователи - Календарь
Полная версия: Hall of Fame
MAXIOL > Техника > DEC hardware / software > AZ controller for PDP-11
SuperMax
Проект Hall of Fame является вполне резонным развитием сетевого функционала ибо ассортимент сетевых возможностей на PDP-11 сильно ограничен относительно небольшой производительностью младших машин.

Идея - всегда лежала на поверхности: сделать сетевую таблицу рекордов !
дабы рекорд был не локален, а глобален и виден всем игрокам!

Также в современных играх есть "достижения" они же "ачивки" (образовано от ACHIVMENT)

Соответственно к сетевым рекордам легко добавляются и "ачивки"

Минимальная прошивка которая будет поддерживать фукнционал Hall of Fame (далее HOF) это v16. Прошивки будут выпущены в конце 2024ого года.

Для облегчения имплементации API HOF для PDP-11 оно будет не только явно открыто, но и выложена тестовая игра с данным фукнционалом.

SuperMax

Демонстрация работы сетевого функционала "Hall of Fame" на серии контроллеров AZ, в данном случае используется дисассемблированная версия игры тетрис (точнее пентикс или что-то подобное) в которую интегрировано API Hall of Fame. В данном случае игра общается с сервером, регистрируется, проверяет возможность логона пользователем и если пользователь не найден - предлагает быструю регистрацию. Далее показан процесс регистрации рекорда и получение таблицы рекордов с сервера.

SuperMax
API

обмен в виде запросов с ответами отправляемых со стороны STM32
формат - JSON

организация обмена - типовая последовательность
1. #023 принять с шины в буфер данные - те загоняем данные (кроме инициализации - тут содержимое буфера не имеет значения)
2. #025 инициализация (или #026 - обмен)
3. #022 отдать на шину считанный блок из буфера


последовательность
1. инициализация
включает в себя
- резолвинг домена с back-end-ом - dns имя back.hof.maxiol.com
- установка первоначального соединения с сервером, прокачка шифра, получение номера(хеша) сессии

результатом является такой JSON
Код
{"SID":"хеш сессии","RESULT":"OK"}

или ошибка
Код
{"RESULT":"ERROR","DESCRIPTION":"SERVER_ERROR"}
{"RESULT":"ERROR","DESCRIPTION":"CONNECTION_ERROR"}

технически сессия будет с солью дабы не раскрутить

2. авторизация игры
технически это отправка JSON
Код
{"SID":"хеш сессии","CMD":"AUTH_GAME","GID":"хеш игры","SERNUM":"1234567890","UTC":"420"}

где
SERNUM - серийный номер игры (для игр ретейл поставки)
UTC - часовой пояс игрока, число в минутах, брать из AZ.INI

ответ тоже JSON
Код
{"SID":"хеш сессии","RESULT":"OK"}

или
Код
{"SID":"хеш сессии","RESULT":"ERROR","DESCRIPTION":"GAME_NOT_FOUND"}
{"SID":"хеш сессии","RESULT":"ERROR","DESCRIPTION":"SERVER_ERROR"}
{"SID":"хеш сессии","RESULT":"ERROR","DESCRIPTION":"SESSION_NOT_EXISTS_OR_EXPIRED"}



3. регистрация пользователя
технически это отправка JSON
{"SID":"хеш сессии","CMD":"REG_USER","NICKNAME":"никнейм пользователя","PASSWORD":"пароль пользователя","EMAIL":"email пользователя"}

все поля обязательные!

ответ тоже JSON
{"SID":"хеш сессии","RESULT":"OK"}
или
Код
{"SID":"хеш сессии","RESULT":"ERROR","DESCRIPTION":"NO_ALL_DATA"}  - какое-то поле NULL
{"SID":"хеш сессии","RESULT":"ERROR","DESCRIPTION":"EMAIL_ALREADY_USED"}
{"SID":"хеш сессии","RESULT":"ERROR","DESCRIPTION":"NICKNAME_TAKEN"}
{"SID":"хеш сессии","RESULT":"ERROR","DESCRIPTION":"NOT_VALID_EMAIL"}
{"SID":"хеш сессии","RESULT":"ERROR","DESCRIPTION":"NOT_VALID_NICKNAME"}
{"SID":"хеш сессии","RESULT":"ERROR","DESCRIPTION":"NOT_VALID_PASSWORD"}
{"SID":"хеш сессии","RESULT":"ERROR","DESCRIPTION":"SERVER_ERROR"}
{"SID":"хеш сессии","RESULT":"ERROR","DESCRIPTION":"SESSION_NOT_EXISTS_OR_EXPIRED"}



4. авторизация пользователя
технически это отправка JSON
{"SID":"хеш сессии","CMD":"AUTH_USER","NICKNAME":"никнейм пользователя","PASSWORD":"пароль пользователя"}

ответ тоже JSON
Код
{"SID":"хеш сессии","RESULT":"OK"}

или
Код
{"SID":"хеш сессии","RESULT":"ERROR","DESCRIPTION":"USER_NOT_FOUND_OR_WRONG_PASSWORD"}
{"SID":"хеш сессии","RESULT":"ERROR","DESCRIPTION":"SERVER_ERROR"}
{"SID":"хеш сессии","RESULT":"ERROR","DESCRIPTION":"SESSION_NOT_EXISTS_OR_EXPIRED"}


5. регистрация ачивмента
технически это отправка JSON
Код
{"SID":"хеш сессии","CMD":"REG_ACHIEVEMENT","ACHIEVEMENT":"id aчивмента"}


ответ тоже JSON
Код
{"SID":"хеш сессии","RESULT":"OK"}

или
Код
{"SID":"хеш сессии","RESULT":"ERROR","DESCRIPTION":"ACHIEVEMENT_NOT_EXISTS"}
{"SID":"хеш сессии","RESULT":"ERROR","DESCRIPTION":"ACHIEVEMENT_ALREADY_TAKEN"}
{"SID":"хеш сессии","RESULT":"ERROR","DESCRIPTION":"SERVER_ERROR"}
{"SID":"хеш сессии","RESULT":"ERROR","DESCRIPTION":"USER_AUTHORIZATION_REQUIRED"}
{"SID":"хеш сессии","RESULT":"ERROR","DESCRIPTION":"GAME_AUTHORIZATION_REQUIRED"}
{"SID":"хеш сессии","RESULT":"ERROR","DESCRIPTION":"SESSION_NOT_EXISTS_OR_EXPIRED"}


6. регистрация рекорда игры
технически это отправка JSON
Код
{"SID":"хеш сессии","CMD":"REG_SCORE","SCORE":"число"}


ответ тоже JSON
Код
{"SID":"хеш сессии","RESULT":"OK"}
или
{"SID":"хеш сессии","RESULT":"ERROR","DESCRIPTION":"SERVER_ERROR"}
{"SID":"хеш сессии","RESULT":"ERROR","DESCRIPTION":"USER_AUTHORIZATION_REQUIRED"}
{"SID":"хеш сессии","RESULT":"ERROR","DESCRIPTION":"GAME_AUTHORIZATION_REQUIRED"}
{"SID":"хеш сессии","RESULT":"ERROR","DESCRIPTION":"SESSION_NOT_EXISTS_OR_EXPIRED"}



7. продление сессии
технически это отправка JSON
Код
{"SID":"хеш сессии","CMD":"NOP"}


ответ тоже JSON
Код
{"SID":"хеш сессии","RESULT":"OK"}

или
Код
{"SID":"хеш сессии","RESULT":"ERROR","DESCRIPTION":"SERVER_ERROR"}



8. трекинг кастомной информации
технически это отправка JSON
Код
{"SID":"хеш сессии","CMD":"TRACKING","PARAMETER":"имя параметра","VALUE":"значение параметра"}


ответ тоже JSON
Код
{"SID":"хеш сессии","RESULT":"OK"}

или
Код
{"SID":"хеш сессии","RESULT":"ERROR","DESCRIPTION":"SERVER_ERROR"}


команда предназначена для трекинга какой-то своей информации в игре

9. завершение сессии
технически это отправка JSON
Код
{"SID":"хеш сессии","CMD":"CLOSE_SESSION"}


ответ тоже JSON
Код
{"SID":"хеш сессии","RESULT":"OK"}

или
Код
{"SID":"хеш сессии","RESULT":"ERROR","DESCRIPTION":"SERVER_ERROR"}




10. Получение таблицы рекордов

технически это отправка JSON
Код
{"SID":"хеш сессии","CMD":"GET_SCORE","COUNT":"количество строк","DETAILS":"уровень детализации"}


уровень детализации определяет набор возвращаемых полей и форматов

ответ тоже JSON - отличается форматами, возможно добавление новых форматов по заказу

DETAILS=1
Код
{"SID":"хеш       сессии","RESULT":"OK","COUNT":9,"SCORES":[["1","TEST","1328"],["2","TEST5","1321"],["3","TEST","1195"],["4","TEST","704"],["5","TEST","672"],["6","TEST","541"],["7","TEST4","519"],["8","TEST","432"],["9","TEST","400"]]}<p><p>{"SID":"BKBHKLBBKBKJBBK","RESULT":"OK","COUNT":9,"SCORES":{"Peter":5,"Ben":37,"Joe":43}}



DETAILS=2
Код

{"SID":"хеш  сессии","RESULT":"OK","COUNT":9,"SCORES":[["  1","TEST            ","    1328"],
["  2","TEST5            ","    1321"],["  3","TEST            ","    1195"],["  4","TEST            ","      704"],
["  5","TEST            ","      672"],["  6","TEST            ","      541"],[" 7","TEST4            ","      519"],["  8","TEST            ","      432"],["  9","TEST            ","      400"]]}


DETAILS=3
Код

{"SID":"хеш  сессии","RESULT":"OK","COUNT":9,"SCORES":[["  1|TEST            |    1328"],["  2|TEST5             |    1321"],["  3|TEST            |    1195"],["  4|TEST            |      704"],["  5|TEST            |     672"],["  6|TEST            |      541"],["  7|TEST4           |     519"],["  8|TEST            |      432"],["  9|TEST            |     400"]]}



DETAILS=4
тут добавлена короткая дата
Код

{"SID":"хеш       сессии","RESULT":"OK","COUNT":9,"SCORES":[["1","TEST","1328","2024-12-02"],["2","TEST5","1321","2024-12-03"],["3","TEST","1195","2024-12-02"],["4","TEST","704","2024-12-02"],["5","TEST","672","2024-12-02"],["6","TEST","541","2024-12-02"],["7","TEST4","519","2024-12-02"],["8","TEST","432","2024-12-03"],["9","TEST","400","2024-12-02"]]}



DETAILS=5
тут добавлена дата + время
Код

{"SID":"хеш       сессии","RESULT":"OK","COUNT":9,"SCORES":[["1","TEST","1328","2024-12-02  17:02"],["2","TEST5","1321","2024-12-03  14:51"],["3","TEST","1195","2024-12-02  17:01"],["4","TEST","704","2024-12-02  16:52"],["5","TEST","672","2024-12-02  16:59"],["6","TEST","541","2024-12-02  17:04"],["7","TEST4","519","2024-12-02  17:10"],["8","TEST","432","2024-12-03  14:50"],["9","TEST","400","2024-12-02  16:52"]]}


DETAILS=6 на тему 3й формы добавлена дата
Код

{"SID":"BKBHKLBBKBKJBBK","RESULT":"OK","COUNT":9,"SCORES":[["  1|TEST            |2024-12-02|    1328"],
["  2|TEST5            |2024-12-03|    1321"],["  3|TEST            |2024-12-02|    1195"],["  4|TEST            |2024-12-02|      704"],
["  5|TEST            |2024-12-02|      672"],["  6|TEST            |2024-12-02|      541"],["  7|TEST4            |2024-12-02|      519"],
["  8|TEST            |2024-12-03|      432"],["  9|TEST            |2024-12-02|      400"]]}


DETAILS=7 на тему 3й формы добавлена дата + время
важный момент - помним про ограничение на длину строки - 480 байт
соответственно в этом формате надо запрашивать не более 7 строк
Код

{"SID":"BKBHKLBBKBKJBBK","RESULT":"OK","COUNT":9,"SCORES":[["  1|TEST            |2024-12-02  17:02|    1328"],["  2|TEST5            |
2024-12-03  14:51|    1321"],["  3|TEST            |2024-12-02  17:01|    1195"],["  4|TEST            |2024-12-02  16:52|      704"],["  5|TEST            |
2024-12-02  16:59|      672"],["  6|TEST            |2024-12-02 17:04|      541"],["  7|TEST4            |2024-12-02 17:10|      519"],["  8|TEST            |2024-12-03  14:50|      432"],["  9|TEST            |2024-12-02 16:52|     400"]]}




или
Код
{"SID":"хеш сессии","RESULT":"ERROR","DESCRIPTION":"SERVER_ERROR"}



11. получение статуса сессии
технически это отправка JSON
Код
{"SID":"хеш сессии","CMD":"STATUS_SESSION"}


ответ тоже JSON

если пользователь авторизован в этой сессии
Код

{"SID":"хеш сессии","RESULT":"OK","NICKNAME"="никнейм пользователя прошедшего авторизацию"}

если еще авторизована игра
Код

{"SID":"хеш сессии","RESULT":"OK","NICKNAME"="никнейм пользователя прошедшего авторизацию","GID":"хеш игры"}


или если нет ничего
Код

{"SID":"хеш сессии","RESULT":"OK", }


или ошибки
Код

{"SID":"хеш сессии","RESULT":"ERROR","DESCRIPTION":"SESSION_NOT_EXISTS_OR_EXPIRED"}
{"SID":"хеш сессии","RESULT":"ERROR","DESCRIPTION":"SERVER_ERROR"}


Команда предназначена для исключения повторной авторизации пользователя или игры
а также для приветственного приглашения пользователя


ограничения
1. применяется кодировка ASCII - те только латиница, для полной унификации
2. длина NICKNAME - от 3х до 16 символов,
3. длина EMAIL - до 32 символов
4. длина PASSWORD - от 8 до 16 символов
5. ACHIEVEMENT - это его числовой идентификатор в системе (смотрим на сайте)
6. длина SCORE - от 1х до 16 цифр
7. количество получаемых записей рекордов от 1 до 10
8. время жизни сессии игры - 4 часа
9. имя параметра - от 1ого до 32 символов
10. значение параметра - от 1ого до 32 символов





SuperMax
Пример имплементации cетевого API в игру
в поставке:
- среда для сборки (Macro11)
- исходники
- собранный файл


Нажмите для просмотра прикрепленного файла

версия - с ачивками
Нажмите для просмотра прикрепленного файла

новая версия - добавлен функционал переиспользования сессии
Нажмите для просмотра прикрепленного файла
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.
Русская версия Invision Power Board © 2001-2025 Invision Power Services, Inc.