MandaGram MandaGram

Горячая перезагрузка (Hot-Reload)

4 мин чтения 3 раздела

Механика горячей перезагрузки

MandaGram включает файловый монитор каталога plugins/. Когда вы перекомпилируете свой плагин, операционная система уведомляет клиент о записи нового файла. Клиент выполняет цикл перезагрузки:

  1. Вызывается функция деинициализации текущего плагина (если экспортирован mandagram_plugin_deinit).
  2. Снимаются все зарегистрированные хуки методов JVM и перехватчики сообщений TDLib.
  3. Выгружается предыдущая динамическая библиотека.
  4. Загружается новая версия, проверяются метаданные и вызывается mandagram_plugin_init.

Теневые копии и блокировки файлов

В Windows загруженная через LoadLibrary DLL блокируется операционной системой от перезаписи компилятором. Чтобы обойти это ограничение, MandaGram использует теневое копирование:

При обнаружении plugins/my_plugin.dll клиент копирует файл в plugins/.cache/my_plugin_<hash>.dll и загружает именно эту копию. Исходный файл в plugins/ всегда остаётся свободным для перезаписи компилятором или IDE.

Жизненный цикл плагина

Время полного цикла перезагрузки плагина составляет в среднем 10–15 миллисекунд, что позволяет тестировать изменения прямо во время живой переписки в чате.