IPB

Здравствуйте, гость ( Вход | Регистрация )

> Hall of Fame, новый сетевой функционал в контроллерах серии AZ
SuperMax
сообщение 2.12.2024, 17:42
Сообщение #1


Администратор
*****

Группа: Root Admin
Сообщений: 6 344
Регистрация: 7.1.2006
Из: Красноярск
Пользователь №: 1



Проект Hall of Fame является вполне резонным развитием сетевого функционала ибо ассортимент сетевых возможностей на PDP-11 сильно ограничен относительно небольшой производительностью младших машин.

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

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

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

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

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



--------------------
Живы будем - Не помрем !
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
 
Ответить в эту темуОткрыть новую тему
Ответов(1 - 3)
SuperMax
сообщение 4.12.2024, 9:59
Сообщение #2


Администратор
*****

Группа: Root Admin
Сообщений: 6 344
Регистрация: 7.1.2006
Из: Красноярск
Пользователь №: 1



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



--------------------
Живы будем - Не помрем !
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
SuperMax
сообщение 4.12.2024, 10:23
Сообщение #3


Администратор
*****

Группа: Root Admin
Сообщений: 6 344
Регистрация: 7.1.2006
Из: Красноярск
Пользователь №: 1



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
сообщение 4.12.2024, 10:39
Сообщение #4


Администратор
*****

Группа: Root Admin
Сообщений: 6 344
Регистрация: 7.1.2006
Из: Красноярск
Пользователь №: 1



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


Прикрепленный файл  TET2_2024_12_04__3.RAR ( 567.12 килобайт ) Кол-во скачиваний: 97


версия - с ачивками
Прикрепленный файл  TET2_2024_12_05__1.RAR ( 569.43 килобайт ) Кол-во скачиваний: 90


новая версия - добавлен функционал переиспользования сессии
Прикрепленный файл  TET2_2024_12_18__1.RAR ( 570.24 килобайт ) Кол-во скачиваний: 96



--------------------
Живы будем - Не помрем !
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения

Ответить в эту темуОткрыть новую тему
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 



Текстовая версия Сейчас: 29.7.2025, 2:26