TeamWox SDK Настройка на среда за потребителски модули - Част 1
Вероятно сте забелязали, че потребителският интерфейс на всички модули от стандартната дистрибуция на TeamWox е направен в същия стил. Всички модули имат подобни контроли, които в крайна сметка добавят усещане за цялост на системата.
От материалите на предишните статии вече сте натрупали известен опит в областта на разработването на персонализирани модули. В тази статия ще говорим за това как правилно да конфигурирате средата на вашите модули за тяхното последващо разпространение, включително на платена основа. Като пример ще използваме същия обучителен модул Hello World.
По-специално, ще научите как се използва информационната структура на модула, как се обработват шаблони и файлове с ресурси, как да създавате правилно помощни файлове, как да добавяте команди на главната страница. Във втората част на статията ще говорим за джаджи и системния модул Съвети.
1. Настройка на средата
DLL на всеки модул на TeamWox трябва да експортира следните методи:
ModuleGetInfo(int индекс, ModuleInfo *info) . Този метод получава информация за модула чрез попълване на структурата ModuleInfo. Тази информация ще се използва при добавяне и регистриране на нов модул в системата TeamWox.
ModuleGetInterface(int id, int server_api_version, IModule **module) . Този метод връща интерфейса на IModule, така че сървърът да може да взаимодейства с модула.
1.1. Получаване на информация за модул
Нека разгледаме от какво се състои тази структура, съдържаща цялата необходима информация за модула.
Полетата id, name, icon_url, home_site и reserved обикновено не се променят по време на разработката на модула и се задават веднъж. При разработването на модул компилацията иbuild_date, както и периодично version_api, когато се пускат нови версии на сървъра TeamWox (и съответно TeamWox SDK, който включва TeamWox API).
За модула Hello World структурата ModuleInfo се попълва в метода CHelloWorldModule::InfoGet(ModuleInfo *info).
Името на модула (поле за име) се използва при формиране на пътя в реда за HTTP заявка.

Логото на модула се показва, след като е активирано в интерфейса на модула за управление в раздела Модули,
а също и в потребителския профил в раздела Подреждане на разделите.
Флаговете от изброяването пряко влияят върху показването на модула в потребителския интерфейс.
1.2. Получаване на модулни интерфейси
Сега, когато имаме информация за модула, втората стъпка е да получим интерфейсите на модула. Класът на всеки модул, за да работи в системата, трябва да реализира интерфейса IModule. Това е основният интерфейс, чрез който сървърът взаимодейства с модула.
Методите, наследени от модула от интерфейса IModule, се извикват от TeamWox сървъра в определен ред.
1. Инициализация - Initialize(class IServer *server,int prev_build).Могат да бъдат заявени само интерфейси на сървъра и сървърните модули. За да се гарантира правилната работа на системата, на този етап няма взаимодействие с други модули.
2. Пост-инициализация - PostInitialize().Всички модули са заредени и сега можете да поискате интерфейсите на други модули.
3. Работа в системата.Това е основният етап, в който взаимодействието със сървъра се осъществява през потребителския интерфейс на страниците.
- Обработка на заявка - Процес(const Context *context).За всеки модул в системата TeamWox са запазени 2 части от URL адреса, които е препоръчително да се използват в HTTPмолби:
- /module_name/index – Пренасочване към главната страница на модула.
- /module_name/left – Показване на левия прозорец. При такава заявка в потребителския интерфейс на модула се създава допълнителен кадър (с разделител), в който се показва резултатът от тази заявка. В потребителския интерфейс на левия панел можете да използвате всякакви контроли, но е препоръчително да използвате контролата List - тя се използва в модули от стандартната дистрибуция на TeamWox.

4. Деинициализация - PrepareDestroy(). Сървърът спира всички обработки в подготовка за изключване.
5. Освобождаване на ресурси - Release(). Изключване при изключване или рестартиране на сървъра.
В допълнение към тези основни методи, интерфейсът IModule предоставя няколко помощни метода, които могат да се използват за получаване на допълнителна информация за модул,
както и да управлява правата за достъп до модула.
2. Ресурси и шаблони
В допълнение към компилирания изходен код под формата на DLL, модулът включва ресурси (помощ, изображения, скриптове, таблици със стилове и т.н.), както и шаблони на страници, които дефинират потребителския интерфейс.
2.1. Ресурси
За всеки модул трябва да конфигурирате достъпа до неговите ресурси. Обработката на HTTP заявки за файлове със статични ресурси е реализирана в самия сървър и не е необходимо да се прилага за всеки модул поотделно. Сървърът осигурява ефективна обработка на заявки за статични файлове - кешира ги в паметта за бързо връщане.
За да може сървърът да обработва HTTP заявки за ресурси, на първия етап от инициализацията на модула (IModule::Initialize) е необходимо да регистрирате URL адреса и пътя до файловете с помощта на метода IServer::VirtualPathRegister.
VirtualPathRegister(const wchar_t *path_virtual,const wchar_t *path_real,int флагове)