Поделиться через


Маршрутизация событий

С помощью функции lineSetTerminal приложение может контролировать или подавлять маршрутизацию указанных низкоуровневых событий (передаваемых между коммутатором и станцией) на устройство. С помощью lineSetTerminal приложение указывает устройство терминала, на которое направляются эти события (например, события потоковой передачи данных из строки, адреса или вызова).

Маршрутизацией различных классов событий можно управлять по отдельности, что позволяет указать отдельные терминалы для каждого класса событий. Классы событий включают лампы, кнопки, дисплей, звонок, перехватчик и поток мультимедиа.

Например, поток мультимедиа звонка (например, голосовой) может быть отправлен на любое устройство преобразователя, если поставщик услуг и оборудование могут это сделать. Как правило, преобразователь означает то же, что и устройство-перехватчик в TAPI, которое имеет микрофон и динамик. События звонка из переключателя на телефон могут быть сопоставлены с визуальным оповещением на экране компьютера или перенаправлены на телефонное устройство. События лампы и события отображения могут игнорироваться или направляться на телефонное устройство (которое, как представляется, ведет себя как обычный набор телефонов). Наконец, нажатия кнопок на телефонном устройстве могут быть переданы в строку. В любом случае такая маршрутизация низкоуровневых сигналов из линии не влияет на работу линейной части TAPI, которая всегда сопоставляет события низкого уровня с их функциональным эквивалентом. Чтобы определить доступные терминалы для линейного устройства (и их возможности), обратитесь к возможностям устройства линии с помощью lineGetDevCaps.

Изначально предположим, что приложение подавило маршрутизацию всех событий (с помощью lineSetTerminal), и пользователь выбирает гарнитуру в качестве текущего устройства ввода-вывода. При входящем вызове отправляется LINE_CALLSTATE сообщение и LINE_LINEDEVSTATE сообщение с сигнальным сигналом. Так как маршрутизация всех событий подавляется, события звонка не направляются на телефон, поэтому звонок подавляется. Вместо этого приложение уведомляет пользователя о всплывающем диалоговом окне и системном звуковом сигнале на гарнитуре.

Пользователь решает ответить на звонок. Так как текущее устройство ввода-вывода пользователя является гарнитурой, приложение телефонии вызывает lineSetTerminal во время входящего звонка, чтобы направить носитель звонка на гарнитуру и ответить на звонок. Приложение также может вызывать lineSetTerminal для маршрутизации лампы и отображения информационных событий в наборе телефонов, чтобы он работал как обычно.

Во втором примере предположим, что входящий звонок оповещает на компьютере пользователя. Вместо выбора варианта ответа с помощью мыши пользователь решает просто взять трубку телефона, чтобы ответить на звонок. Состояние отключения на телефоне отправляет сообщение в приложение. Приложение может интерпретировать это состояние как запрос пользователя на выбор телефона для ведения беседы. Затем приложение вызывает lineSetTerminal для маршрутизации голосовых данных при вызове в набор телефонов.