FreePM : Workflow

Материал из OS8.

FreePM : Workflow

Материал из OS8.

Как все это работает

Сервер раздает ihab'ы и hwnd - индексы ниток и окон. Окна получают сообщения. Сообщения получаются либо из очередей, привязанных к ihab, либо напрямую, есле они посылаются(send) из той же нитки, либо ненапрямую, но без помещения в очередь, если они посылаются(send) из другой нитки процесса. Ненапрямую - значит оно вызывает процедуру окна внутри WinGetMsg. Если сообщение посылается другому процессу, оно посылается через сервер. Если send - то ждет ответа, если post, то пихается в очередь процесса, опять-таки внутрях WinGetMsg.

Сервер регистрирует публичные классы при старте, и приватные по WinRegisterClass.

Сервер по запросу клиента F_CMD_GET_IHAB выдает свободный ihab, и 'clientId'. 'clientId' - это ответ на запрос DosQueryNPipeInfo(Hpipe, 2L,…

Как писать программы

Берется исходник для PM. Исправляются инклуды с os2.h на F_OS2.hpp и дефайны с INCL_DOS, INCL_WIN на F_INCL_DOS, F_INCL_WIN добавляется #include “PM_FPM.h” и добавляем в проект клиентские библиотеки FreePM.

Имена функций.

Аналоги функций WinXXX - меняем названия на F_WinXXX; если функция внутренняя - используем префикс _F_.

Функции, специфические для сервера, имеют префикс Fs_ и _Fs_, функции, специфические для клиента - Fc_ и _Fc_

Имена файлов.

Файлы, специфические для сервера, имеют префикс Fs_ в имени, файлы, специфические для клиента - Fc_ Например, \FreePM\Server\Fs_main.cpp, \FreePM\Client\Fc_main.cpp

Общие файлы помещаем в \lib с префиксом F_ FreePM\lib\F_APIlib.cpp

Публичные инклуды (public headers) помещаем в \include

Обратная совместимость

Чтоб программа для FreePM могла работать под PM и чтоб не менять все вызовы F_xxx на WinXXX или GpiXXX добавляем в проект файл \FreePM\lib\PMcompat\PM_api.cpp