Библиотека сайта rus-linux.net
Фреймворк Telepathy
Глава 20 из книги "Архитектура приложений с открытым исходным кодом", том 1.
Оригинал: Telepathy
Автор: Danielle Madeley
Перевод: Н.Ромоданов
20.3.4. Клиентские программы
Клиентские программы обрабатывают или наблюдают за входящими и исходящими коммуникационными каналами. Клиентской программой может быть все, что угодно, что зарегистрировано диспетчером каналов. Существует три вида клиентских приложений (хотя одно и то же клиентское приложение может, по желанию разработчика, относиться к двум или ко всем трем видам клиентских приложений):
- Наблюдатели (Observers): Наблюдают за каналами, не взаимодействуя с ними. Наблюдатели обычно используются для журналирования чатов и текущей деятельности (например, входящих и исходящих звонков VoIP).
- Согласователи (Approvers): Ответственны за предоставление пользователям возможности принимать или отклонять решение об использовании входящих каналов.
- Обработчики (Handlers): Выполняют действительное взаимодействие с каналом. Это может быть подтверждение о получении текстового сообщения или отправка сообщений, отправка или получение файлов, и т.д. Обработчик, как правило, связан с пользовательским интерфейсом.
Клиентским программам предоставляются сервисы D-Bus с одним, двумя или тремя следующими интерфейсами: Client.Observer
, Client.Approver
и Client.Handler
. В каждом интерфейсе есть метод, который может вызваться диспетчером каналов для того, чтобы проинформаровать клиентскую программу о канале, за которым осуществляется наблюдение (т. е. будут выполнены операции, реализуемые с помощью клиентской программы типа Observer), относительно которого принимается решение о подтверждении или отклонения с ним работы(т. е. будут выполнены операции, реализуемые с помощью клиентской программы типаApprover) и который будет обрабатываться (т. е. будут выполнены операции, реализуемые с помощью клиентской программы типа Handler).
Диспетчер каналов, в свою очередь, осуществляет распределение канала по всем группам клиентских приложений. Сначала канал распределяется по всем соответствующим наблюдателям (клиентским программам типа Observer). После того, как поступят все ответы, канал будет распределен по всем соответствующим согласователям (клиентским программам типа Approver). После того, как первый согласователь одобрит или отклонит использование канала, об этом будут проинформированы все другие согласователи и канал, наконец, будет отправлен обработчику (клиентской программе типа Handler). Диспетчеризация канала происходит поэтапно, поскольку прежде, обработчик начнет изменять состояние канала, программам-наблюдателям может потребоваться время с тем, чтобы выполнить некоторые настройки.
У клиентских программ есть свойство — свойство фильтра канала, в котором перечисляются фильтры, считываемые диспетчером каналов с тем, чтобы знать, какие каналы интересуют данное клиентское приложение. В фильтре должны быть указаны, как минимум, тип канала и тип целевого хэндла (например, контакт или чат-комната), которые интересуют клиентскую программу, но в нем также можно указывать и другие свойства. Сравнение с неизменяемыми свойствами канала выполняется с помощью простой операции сравнения. В таблице 20.5 показан фильтр, который без всяких изменений должен присутствовать во всех каналах текстовых сообщений.
Рис.20.5: Пример фильтра канала
Свойство | Значение |
ofdT.Channel.ChannelType | Channel.Type.Text |
ofdT.Channel.TargetHandleType | Handle_Type_Contact (1) |
Поиск клиентских приложений осуществляется через шину D-Bus, поскольку они публикуют сервисы, имя которых начинается с хорошо известного префикса ofdT.Client
(например, ofdT.Client.Empathy.Chat
). Они также могут установить файл, из которого диспетчер каналов прочитает фильтры. Это позволит диспетчеру каналов запустить клиентское приложение в случае, если оно еще не запущено. То, что клиентские приложения можно искать таким образом, позволяет делать пользовательский интерфейс настраиваемым, который можно изменять в любой момент, не заменяя при этом каких-либо других частей фреймворка Telepathy.
Всё или ничего
Есть возможность задать фильтр, указывающий, что вам интересны все каналы, но на практике это используется только в качестве примера наблюдения за каналами. В реально существующих клиентских приложениях есть участки кода, которые специально предназначены для определенных типов каналов.
Пустой фильтр означает, что обработчика не интересуют никакие каналы. Не смотря на это, есть возможность передать канал такому обработчику, если вы сделаете это, указав имя обработчика. Такие фильтры используются во временно создаваемых обработчиках, которые создаются по запросу.
Продолжение статьи: Роль привязок к языкам программирования.