Наработки по всякой страйкбольной электронной фигне

Разговоры, связанные со страйкболом

Модератор: Боеслав

Ответить
Аватара пользователя
@!!ex
Сообщения: 1331
Зарегистрирован: 23 авг 2010, 18:43
В игре с: 2010
Команда: Нет с 2014 года
и/н ССК: Нет

Наработки по всякой страйкбольной электронной фигне

Сообщение @!!ex »

В связи с моим уходом из страйкбола выкладываю наработки, которые функционируют. Может кому для тестов пригодится.
Исходники "Тактического планшета" выкладывать не буду, не потому что жалко, а потому что дикий говнокод и проще с нуля написать, чем разбираться.

https://www.dropbox.com/s/lrvgzv2kzvjsz ... e.rar?dl=0
Сервер тактического планшета(Tactics_server). Важный момент - этот сервер не завязан на тактический планшет. Это просто сервер БД, который умеет простую авторизацию и умеет работать по определенному протоколу.
Висит на портах TCP:44050 UDP:44048
Основные принципы работа сервера тут: https://docs.google.com/document/d/1V74 ... sp=sharing
Протокол обмена данными тут:
https://docs.google.com/document/d/1wNS ... l4kEo/edit
Формат поля Data. В принципе, этот формат рекомендательный. Он использовался в тактическом планшете. Сервер может работать с любыми текстовыми данными в поле Data.
https://docs.google.com/document/d/1ZYS ... Kc5sA/edit
Сервер может быть интересен тем, кто хочет сделать некие устройства которые отдают свое состояние на сервер, чтобы это состояние потом можно было получить.

Создание карт для тактического планшета(TMFWizard).
Эта прога создавалась чтобы создавать карты для тактического планшета.
Понятно, что в текущей ситуации карты такие не нужны.
Но у нее есть приятный момент - возможность после привязки карты узнать GPS координаты углов карты.
Создаете карту, привязываете по любым двум точкам, переходите в режим тестирования и вводите GPS так, чтобы тестовые точки встали в угол. После этого можно использовать полученные координаты, чтобы привязать карту в MAP21, например.

Сервер для подсчета очков и захвата точек(Counter_server)
Это прога, которая по команде меняет владельца точки и каждую секунду считает очки.
Сначала как ей вообще пользоваться:
Сразу после запуска указываем UID и PASSWORD:
Главное чтобы они были уникальными. Пароль не оставляем пустым! А UID не оставляем нулем! Это важно!
Дальше можно настраивать.
Alias - это собственно привязка точки к определенному номеру телефона.
NAME - название точки.
Phone - номер телефона.
Cost - сколько очков точка приносит владельцу в минуту
Use modificators - указывает, влияют ли на точку модификаторы.
Add/Edit Alias - ищет в списке точку с указанным именем. Если находит - меняет у нее настройки. Если не находит - создает новую с указанными настройками.

Set SIDE - вручную меняет сторону у выбранной в списке точки.

Info - список зарегстрированных сторон.

Modificators - это модификаторы стороны. Задаются через Side, Factor, Time
Точки стороны Side в течении времени Time приносят Factor количество очков.
Если модификатор Side:GREEN Time:60 Factor:2 а в обычном режиме сторона GREEN получает 10 очков, то пока действует модификатор будет получать 20 очков.

Теперь по протоколу.
Сервер висит на UDP: 5574
Получает сообщения вида:
SIDE:PHONE
Например:
GREEN:+79286971919

Если стороны GREEN не существует, то он ее создает и добавляет в Info.
После чего точке, у которого номер указан +79286971919 устанавливает владельцем сторону GREEN.

Каждые 10 секунд сервер сохраняет текуещее состояние в каталог backup и также в файл last.dta
Соответственно, если прогу перезапустить - она продолжит с последнего сохраненного состояния.
Чтобы откатиться на какое-то состояние - надо взять файла из каталога backup, переименовать его в last.dta и подсунуть проге.

Также раз в 10 секунд состояние отправляет на центральный сервер по HTTP протоколу.
ОТправляется в виде простого GET запроса вида: uid=UID&password=PASSWORD&data=DATA
где DATA - это переменная из следующего кода:
StringList.Add(IntToStr(Length(Sides)));
for i := 0 to Length(Sides)-1 do begin
StringList.Add(Sides.name);
StringList.Add(FloatToStr(trunc(Sides.points*1000)/1000));
end;

StringList.Add(IntToStr(Length(Aliases)));
for i := 0 to Length(Aliases)-1 do begin
StringList.Add(Aliases.name);
StringList.Add(FloatToStr(trunc(Aliases.CostPerSecond*60*1000)/1000));
StringList.Add(IntToStr(Aliases.CurrentOwner));
end;

DATA:=StringList.Strings[0];
for i := 1 to StringList.Count-1 do
DATA:=DATA+'~'+StringList.Strings;


Сервер проверяет авторизацию и тупо сохраняет данные в файл.
Этот файл потом можно забрать и распарсить. Как это дело разбирать - писать не буду.
Пример на Java Script уже есть и работает. Посмотреть можно тут:
http://sol-online.org/airsoft/counter/viewer.html

Конвертер данных dta(Counter_data_converter)
Примитивная програмка, которой нужно указать первый файл из backup счетчика.
Прога соберет все данные за день начиная с выбранного файла и сформирует из них несколько табличек.

Комутатор для захвата точек(Counter_comutator)
Это прога для Андроид телефона.
Ее задача - принимать звонки на телефон, сбрасывать их и отправлять пакет вида:
SIDE:PHONE
Например:
GREEN:+79286971919
на указанный сервер.
Каждый комутатор рулит одной стороной.
Прога pаточена под Fly ERA Nano 9 (IQ436i)
На других телефонах может не работать. А именно - не сбрасывать трубку. А может и работать. Как повезет. Это связано с тем, что в новых андроидах можно трубку сбрасывать только всякими хаками. И эти хаки не всегда корректно работают.


Вот как-то так. Ничего еще особо интересного у меня вроде бы нет.
Ответить

Вернуться в «Казарма»