Palma
BANNED | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору mai62 Код: Архитектура: Plug-in manager -> Plug-in Registry -> Plug-in interface (multiple Plug-ins) 1. Plug-in manager 1.1. Библиотека (отдельная DLL) для обработки плагинов (DLL для облегчения процесса обновления менеджера, простота в отладке, разные сборки для совместимости со старым версиями интерфейса) 1.2. Функций 1.2.1. Инициализация интерфейса Plug-in-а 1.2.2. Загрузка и выгрузка функций интерфейса Plug-in-а 1.2.3. Обработка ошибок интерфейса Plug-in-а 1.2.4. Управление настройками (Property pages) интерфейса Plug-in-а 1.2.5. Деструкция интерфейса Plug-in-а 1.2.6. Сортировка и обработка фильтров по приоритетной системе 2. Plug-in Registry 2.1. Библиотека (отдельная DLL) для первичной загрузки Plug-in-а (DLL для разделения обязанностей с Plug-in manager-ом, см. выше) 2.2. Функций 2.2.1. Поиск Plug-ins в заданной директории (и/или заданных) 2.2.2. Проверка на Plug-in interface 2.2.3. Проверка совместимости 2.2.4. Выбор сборки (для разных версий одного плагина), 2.2.5. Загрузки и выгрузка DLL 2.2.6. Создание учетной записи 2.2.7. Передача дескриптора Plug-in manager-у 2.2.8. Загрузка языкового файла 2.2.9. Опционально: кэширование найденных Plug-in-ов 3. Plug-in interface 3.1. Библиотека (DLL) с интерфейсом Plug-in-а, я предлагаю остановиться на native function (простой экспорт функций, мое объяснение ниже). Главной задачей интерфейса передача фильтров (обработчиков) 3.2. Интерфейс 3.2.1. Функция инициализаций (получение и передача первичных данных) 3.2.2. Функция деструкций (сборка мусора и т.д.) 3.2.3. Функция передачи настроек в Plug-in manager-а 3.2.4. Функция получение настроек из Plug-in manager-а 3.2.5. Функция установки фильтров (обработчиков) 3.2.6. Далее расширение интерфейса по мере необходимости *** по поводу native function, “Если размер вещего exe-шника меньше одного мегабайта, то пора вам изучать новые технологий”, по этому обойдемся без COM, ATL, отдельных сервисов, готовых Framework, для простоты и во избежание захламление кода, и наращивание размеров. Структура каталога Plugins /Plugins/ /Plugins/Plugin Dir/ /Plugins/Plugin Dir/Plugin.dll /Plugins/Plugin Dir/Plugin.cfg /Plugins/Plugin Dir/Plugin.state (Статистика работы фильтра) /Plugins/Plugin Dir/Lang Dir/ /Plugins/Plugin Dir/Lang Dir/lang_code.langfile /Plugins/Plugin Dir/Lang Dir/lang_code2.langfile /Plugins/Plugin Dir/Lang Dir/lang_code_etc.langfile Наброски интерфейса LN_ID : INT32, Идентификатор в языковом файле BYTE : INT8 STRING : Array of BYTE BOOL : Boolean (BYTE) Pointer : Указатель (32 или 64 bit) Function Initialization-> Parameters: InterfaceInfo OUT Structure Pointer ResultInfo OUT Structure Pointer ###### Function Destructor-> Parameters: None ###### Function GetPropertys-> Parameters: PropertItems IN OUT Pointer Array of Pointers PropertItemsCount IN OUT Pointer INT32 ResultInfo OUT Structure Pointer ###### Function SetPropertys-> Parameters: PropertItem IN Pointer Array of Structures PropertItemsCount IN INT32 ResultInfo OUT Structure Pointer ###### Function GetFilters-> Parameters: FilterItem IN OUT Pointer Array of Structures FilterItemsCount IN OUT INT32 ResultInfo OUT Structure Pointer ###### Structure InterfaceInfo-> Members: {Обязательный заголовок для всех версий интерфейса} Id STRING[4] Version INT32 VersionRequirement INT32 Name LN_ID Description LN_ID ..... ###### Structure PropertItem-> Members: ID INT32 Type BYTE (Тип Number, String, Radio, CheckBox, Для формирования GUI настроек) LabelID LN_ID DescriptionID LN_ID Value Pointer (В зависимости от типа) ValueSize Pointer INT32 Handler Pointer to Fucntion (Обработчик правильности вводимых данных) ###### Structure ResultInfo-> Members: IsOK BOOL IsCritical BOOL (завершить работу плагина, критическая ошибка) ErrorCode INT32 ErrorStringId LN_ID Parameters Pointer Structure of String[256] (Параметры для заполнения форматированного кода ошибки (sprintf, %s) ) ###### Structure FilterItem-> Members: ID INT32 Direction BYTE (0=IN, 1=OUT) Type BYTE (0=Header, 1=Content, 2=URL, 3=FILE NAME, 4=Clean Cache, etc, с возможностью комбинации этих значений ) NameId LN_ID Description LN_ID Priority BYTE Access BYTE (0=WRITE, 1=READ, 2=READ-WRITE) Handler Pointer to Function ###### Function FilterItem Handler-> Parameters: Data INT OUT Pointer (Гибкая структура в зависимости от типа фильтров) DataSize INT OUT INT32 FilterResult OUT Structure Pointer Structure FilterResult-> Members: Status INT32 (Результат работы фильтра) ToDo INT32 (Дальнейшие действие системы в ответ на результат работы фильтра) ToDoStringID LN_ID ErrorCode INT32 ErrorStringId LN_ID Parameters Pointer Structure of String[256] (Параметры для заполнения форматированного кода ошибки или положительного действия(sprintf, %s) ) ###### Так сказать ООчень черный черновик для обсуждение Некоторые мои взгляды на логику работы 1. находим плагины 2. проверяем 3. загружаем (плагин, языковый файл) 4. создаем файл настроек 5. инициализация настроек 6. загрузка фильтров (выставляем приоритет по типу фильтра, по типу доступа, и далее по приоритету фильтра) 7. запускаем фильтры (при определенных действиях) 8. обрабатываем результаты фильтра 9. записываем статистику 10. etc А еще, нужно будить добавить библиотеки для работы с HTTP headers, HTML parser и т.д., для разгрузки кода плагинов | -- DiGiTaL ChAuS | Всего записей: 65 | Зарегистр. 02-06-2001 | Отправлено: 22:34 21-06-2006 | Исправлено: Palma, 22:38 21-06-2006 |
|