Обмен данными между Beast

В первичной стадии 0, до рождения, происходит заполнение базовых настроек. При этом для ускорения процесса набивки данных предусмотрена процедура обмена.

Однако просто так нельзя подменить файлы данных от одного Beast к другому потому, что у каждой особи формируются свои идентификаторы записей, коды которых могут совпадать, но означать совершенно разное. Кроме того, у них могут отличаться кол-во базовых параметров, стилей, что означает уже принципиальную несовместимость схем. Поэтому обмен подразумевает специальные проверки перед импортом.

Так же необходимы предварительные настройки сервиса обмена:

  1. Заводится общий каталог (OSPanel\domains\update), в который будут выводиться данные Beast в виде структурированных файлов, которыми они хотят обменяться. Имя файла должно быть в формате: имя Beast_имя файла. Например: bot1_update_phrase_tree.txt. Такие файлы формируются автоматически при экспорте.
  2. В каталоге проекта memory_save создается файл каталога обмена update_dir.txt, в котором указывается список файлов для обновления в виде строк в формате: 1|bot2|update_phrase_tree|2022-07-12 09:40:48|200|1
Файлы обмена должны указываться в определенной последовательности, так как это влияет на синхронизацию:

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.