![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
![]() |
SuperMax |
![]() ![]()
Сообщение
#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 оно будет не только явно открыто, но и выложена тестовая игра с данным фукнционалом. -------------------- Живы будем - Не помрем !
|
SuperMax |
![]()
Сообщение
#2
|
![]() Администратор ![]() ![]() ![]() ![]() ![]() Группа: Root Admin Сообщений: 6 344 Регистрация: 7.1.2006 Из: Красноярск Пользователь №: 1 ![]() |
Демонстрация работы сетевого функционала "Hall of Fame" на серии контроллеров AZ, в данном случае используется дисассемблированная версия игры тетрис (точнее пентикс или что-то подобное) в которую интегрировано API Hall of Fame. В данном случае игра общается с сервером, регистрируется, проверяет возможность логона пользователем и если пользователь не найден - предлагает быструю регистрацию. Далее показан процесс регистрации рекорда и получение таблицы рекордов с сервера. -------------------- Живы будем - Не помрем !
|
SuperMax |
![]()
Сообщение
#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
|
![]() Администратор ![]() ![]() ![]() ![]() ![]() Группа: Root Admin Сообщений: 6 344 Регистрация: 7.1.2006 Из: Красноярск Пользователь №: 1 ![]() |
Пример имплементации cетевого API в игру
в поставке: - среда для сборки (Macro11) - исходники - собранный файл ![]() версия - с ачивками ![]() новая версия - добавлен функционал переиспользования сессии ![]() -------------------- Живы будем - Не помрем !
|
![]() ![]() |
Текстовая версия | Сейчас: 29.7.2025, 2:26 |