Обмен данными между Beast
В первичной стадии 0, до рождения, происходит заполнение
базовых настроек. При этом для ускорения процесса набивки данных предусмотрена процедура обмена.
Однако просто так нельзя подменить файлы данных от
одного Beast к другому потому, что у каждой особи формируются свои идентификаторы записей, коды которых могут совпадать, но означать
совершенно разное. Кроме того, у них могут отличаться кол-во базовых параметров, стилей, что означает уже принципиальную
несовместимость схем. Поэтому обмен подразумевает специальные проверки перед импортом.
Так же необходимы предварительные настройки
сервиса обмена:
- Заводится общий каталог (OSPanel\domains\update), в который будут выводиться данные Beast в виде структурированных файлов,
которыми они хотят обменяться. Имя файла должно быть в формате: имя Beast_имя файла. Например: bot1_update_phrase_tree.txt.
Такие файлы формируются автоматически при экспорте.
- В каталоге проекта memory_save создается файл каталога обмена update_dir.txt, в котором указывается список файлов для обновления
в виде строк в формате: 1|bot2|update_phrase_tree|2022-07-12 09:40:48|200|1
- 1 - номер очередности загрузки
- bot2 - имя внешнего бота (C:\OSPanel\domains\go\common\linking_address.txt)
- update_phrase_tree - имя файла обмена (см. константы ниже)
- 2022-07-12 09:40:48 - дата/время, заполняется автоматом после успешного обновления
- 1 - статус блокировки записи: 0 - обмен заблокирован, 1 - обмен разрешен
- 200 - ID последней записи при экспорте
Файлы обмена должны указываться в определенной последовательности, так как это влияет на синхронизацию:
1|bot2|update_phrase_tree|2000-07-12 09:40:48|230|1
2|bot2|update_terminal_actons|2000-07-06 19:22:22|110|1
3|bot2|update_dnk_reflexes|2000-06-19 19:40:45|5500|1
4|bot2|update_trigger_stimuls_images|2000-06-19 19:40:45|200|1
5|bot2|update_condition_reflexes|2000-06-19 19:40:45|350|1
Каждый Beast следит за своим файлом, обновляя их, чужие только читает. При экспорте файлы подменяются на новые и в update_dir.txt
редактируются соответствующие строки с изменением даты/времени обмена на текущее.
При импорте смотрится дата/время последнего изменения файла в его свойствах, и если файл оказывается новее, запускается процедура
импорта. Если данные в файле определяются как несовместимые, то соответствующая запись в update_dir.txt меняет статус на 0 (заблокирован).
При экпорте фиксируется ID последней записи массива, и при следующем экспорте будут выводиться записи начианая с ID + 1.