IPB

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

> Сетевое API для AZ*
SuperMax
сообщение 15.3.2024, 15:20
Сообщение #1


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

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



Идея:
разработать различное API для работы с сетью Интернет

Задача 1. Таблица рекордов
в общих штрихах

серверная часть: сервер БД
WEB интерфейс
- регистрация пользователя логин-пароль (дабы таблицы рекордов были персонализированными)
- регистрация игры и получение уникального ID игры
- просмотр рекордов/статистики игр итд итп
API для AZБК
- авторизация игры
- авторизация пользователя
- добавление рекорда

клиентская часть на AZ*
- авторизация игры
- авторизация пользователя
- добавление рекорда


Задача 2. Сетевые диски
возможность подключения в режиме R/O или R/W образа дисков на сервере



UPD 2024-03-17
разрисовываю детально и начинаю делать


UPD 2024-03-24
планируется такой пакет команд AZ
60 авторизация продукта по хешу
61 авторизация пользователя по хешу
62 регистрация пользователя
63 передача параметров из буфера на сервер
64 считывание таблицы рекордов с сервера в файл на карточке


начал делать команды

UPD 2024-03-25
долго не хотел этим заниматься, но видимо пришло время
сделаю сетевой сервер дисков
иначе говоря будет возможность цеплять любые сетевые диски как устройства AZ
или будет отдельный драйвер - еще не решил
но суть именно такая - блочное сетевое устройство
начал писать сервер - демон на сях


UPD 2024-12-02

итого API HOF реализовано в полной мере
в "тетрис" имплементировано API HOF успешно работает
- аутентификация игры
- аутентификация пользователя
- регистрация пользователя
- регистрация игры
осталось прикрутить ачивки и вывод таблицы рекордов
видео выложено тут https://t.me/pdp11_az/15708/21177



UPD 2025-01-04


проект сетевых дисков "получил время" на разработку - хоть я и начал думать на демоном, но реально начал писать только в конце декабря
а сейчас, соответственно я хорошо продвинулся в этом направлении
прямо сейчас уже работает демон обслуживающий монтирование R/O любых образов дисков из архива https://mirrors.pdp-11.ru/
максимальное количество одновременно открытых файлов для работы - 20тысяч
демон способен обслужить до 5k запросов в секунду
полный набор команд демона, я еще не реализовал и не прикрутил средства борьбы с DDOS [у меня есть опыт и готовые модули для этого тоже есть]

теперь можно очертить проект сетевых дисков более четко:
1. диски из архива можно монтировать прямо при помощи API
2. максимальная длина пути - 384 символа (самый длинный путь в архиве сейчас 366, соответственно точно хватит )
3. все диски из архива монтируются только R/O режиме
4. пользователи смогут заводить свои персональные зоны с дисками которые можно будет монтировать в монопольном RW режиме (он будет по-умолчанию)
иначе говоря это будут "персональные облака типа one drive" [TODO]
5. для авторизации будет использовать функционал HOF - иначе говоря это будет единая учетка и для рекордов и для своих облачных дисков
6. ограничений на количество ваших AZ контроллеров работающих под одной учеткой не будет.
7. будет реализована полностью сетевая загрузка с сетевых дисков - иначе говоря можно будет вообще не хранить свои образа на карточке [TODO]

UPD 2025-01-06

1. будет 4 пространства сетевых дисков
N:/ - это архив в текущем виде - те все что угодно можно монтировать
R:/ репозиторий - буду формировать внятный набор дисков - прошу коллег подключаться к этому процессу
P:/ - персональное облако, будет доступно и на запись
но доступ только для себя
S:/ - shared - облако для возможности делится с кем-то дисками и доступом к ним
досутп будет управляемый

————-
по времени реализации
N: и R: - будут сейчас
P: и S: - позднее тк это надо дописать авторизацию и прочее в демоне
ибо сейчас он просто сетевой сервер




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


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

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



Сетевое API - AZSERVER
редакция от 2025-01-11

Концепция сетевых дисков:
1. Технически это блочный интерфейс к любому файлу расположенному в пространстве имен.
2. На данный момент поддержаны 2 пространства имен N:\ и R:\
3. Пространство N: - сетевой диск из архива - те любой образ c https://mirrors.pdp-11.ru/
данный путь считается корнем
соответственно для монтирования диска OVERKIL.IMG
расположенного по пути
https://mirrors.pdp-11.ru/_bk0010-11-11m/so...collection/IMG/

надо указать следующее имя файла
N:/_bk0010-11-11m/soft/SuperMax_collection/IMG/OVERKIL.IMG
4. Форматы запросов и ответов (упакованные структуры) указаны ниже.


Лицензирование
В связи с тем, что сетевое API создается в расчете на все ретроплатформы, API является открытым решением, единственным условием использования которого в своих решениях является обязательное указание
MAXIOL Landisk technology ®
это должно быть указано и в документации на Ваше решение и при использовании данной функции на стороне ретроплатформы.


Данные для подключения:
DNS name - landisk.maxiol.com
TCP Port - 34162

Структуры
Код

// структура пакета запроса
typedef __packed struct landisk_reqest
{  
    unsigned int          num_block;    // номер блока    (32 бита)
    unsigned short int    command;      // команда
    unsigned char         reserved[32]; // зарезервировано
    unsigned char         data[512];    // данные - если они отправляются
    char                  path[386];    // путь до диска
    unsigned short int    crc;          // CRC команды
} landisk_reqest_t;


при открытии файла блок данных (data) рассматривается как пакет информации
Код

// структура пакета открытия файла, информационные параметры
typedef __packed struct landisk_reqest_status
{
    unsigned long           timestamp;  // локальное время контроллера (unix-time)
    unsigned long           uptime;     // аптайм в секундах
    unsigned long           ip_addr;    // локальный ip адрес контроллера
    unsigned long           dns_srv1;   // ip адреса DNS-серверов
    unsigned long           dns_srv2;
    unsigned short int      tzone;      // таймзона в минутах    
    unsigned short int      platform;   // номер платформы
    unsigned short int      controller; // тип контроллера
    unsigned short int      version;    // версия прошивки контроллера
    char                    build[32];  // дата билда прошивки контроллера    
    char                    url[64];    // URL производителя контроллера
} landisk_reqest_status_t;

пакет информации настоятельно рекомендуется заполнять полностью

// номер платформы
1 - PDP-11 - БК 10/11M
2 - PDP-11 - остальные - те ДВК Э60 УКНЦ оригинальные машины итд
3 - MSX

если вашей платформы нет в списке - пишите мне

// тип контроллера
1 - AZБК
2 - AZ - для всех остальных PDP-11 машин
3 - Carnivore2+

для добавления в список Вашего контроллера - пишите мне.


Код

// команды
#define LANDISK_CMD_OPEN        1  // в ответ успешность/ошибка, и если успешно - размер диска
#define LANDISK_CMD_READ        2  // чтение блока
#define LANDISK_CMD_WRITE       3  // запись блока
#define LANDISK_CMD_CLOSE       4  // закрытие файла
#define LANDISK_CMD_OPENDIR     5  // открыть оглавление по указанному пути
#define LANDISK_CMD_READDIR     6  // прочитать одну запись оглавления в буфер
#define LANDISK_CMD_SEARCH_REQ  7  // послать запрос поиска
#define LANDISK_CMD_READ_SREQ   8  // прочитать одну запись результата поиска в буфер


Код

// структура пакета ответа с данными
typedef __packed struct landisk_answer
{
    unsigned short int  result;    // результат
    unsigned char       data[512]; // принятые данные
    unsigned short int  crc;       // CRC ответа
} landisk_answer_t;



Код

// структура пакета ответа статуса файла
typedef __packed struct landisk_answer_status
{
    unsigned char         fattr; // File attribute
    unsigned short int    fdate; // Fat date
    unsigned short int    ftime; // Fat time
    unsigned int          fsize; // File size
} landisk_answer_status_t;

это стандартный набор информации о файле-образе в FATформате.


Код

// ответы
#define LANDISK_ANS_OK            0x0000 // команда выполнена успешно
#define LANDISK_ANS_ERROR         0x0001 // флаг ошибки, устанавливается при любой ошибке
#define LANDISK_ANS_ACCESS_DENIED 0x0002 // нет доступа, устанавливается при любой ошибке доступа
#define LANDISK_ANS_NEED_REG      0x0004 // нет доступа - нужна регистрация
#define LANDISK_ANS_RO_ONLY       0x0008 // нет доступа на запись- данный диск только для чтения
#define LANDISK_ANS_NOT_EXISTS    0x0010 // нет данного образа - неверный путь до файла образа или директории


Для расчета CRC используется ф-я
Прикрепленный файл  crc.rar ( 856 байт ) Кол-во скачиваний: 166



Стратегия работы
1. первая команда должна быть открытие файла (LANDISK_CMD_OPEN)
при запросе на открытие надо указать блок параметров (landisk_reqest_status_t)
в ответ будет прислан блок landisk_answer_t но data[512] надо рассматривать как landisk_answer_status_t
2. далее можно посылать команды чтения
3. на данный момент поддержаны команды LANDISK_CMD_OPEN, LANDISK_CMD_READ, LANDISK_CMD_WRITE, LANDISK_CMD_CLOSE
4. В конце работы желательно (но не обязательно) послать команды закрытия дисков.

Ограничения:
1. не более 100 запросов в секунду с одного IP (иначе сработает блок анти-DDOS и забанит данный IP на некоторое время)
2. не более 10ти "висящих" соединений на IP.




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

Сообщений в этой теме


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

 



Текстовая версия Сейчас: 20.6.2025, 17:54