Патент на изобретение №2225027
|
||||||||||||||||||||||||||
(54) СИСТЕМА И СПОСОБ КОМБИНИРОВАНИЯ ЛОКАЛЬНЫХ И УДАЛЕННЫХ ОКОН В ЕДИНУЮ СРЕДУ ДЛЯ РАБОЧЕГО СТОЛА
(57) Реферат: Изобретение относится к системам и способам отображения информации на удаленных компьютерах. Технический результат заключается в создании системы, позволяющей поддерживать комбинирование данных от различных источников в единое отображение. Устройство содержит локальный узел, имеющий среду для рабочего стола, включающую локальное окно, локального агента, первый удаленный узел, имеющий первую удаленную среду для рабочего стола, включающую первое удаленное окно, второй удаленный узел, имеющий вторую удаленную среду для рабочего стола, включающую второе удаленное окно, первого удаленного агента, осуществляющего мониторинг указанной первой удаленной среды для рабочего стола и коммуникацию с указанным локальным агентом. 5 c. и 17 з.п. ф-лы, 6 ил. Область техники, к которой относится изобретение Настоящее изобретение относится к отображению информации на удаленных компьютерах и, более конкретно, к системе и способу комбинирования отображаемых данных, полученных от различных удаленных источников, в единое локальное отображение. Уровень техники Системы клиент-сервер, в которых пользователь на узле-клиенте в типичном случае удален от сервера, осуществляющего работу с приложением или доступ к файлам и другим ресурсам, являются и удобными и экономически эффективными. Узлы-клиенты, как правило, имеют меньшую стоимость, чем серверы, и, поскольку один сервер оказывает услуги более чем одному клиенту, достигается снижение суммарной стоимости системы. Кроме того, системы клиент-сервер позволяют предприятию или организации принимать решения в отношении размещения определенных ресурсов системы (таких как приложения) по ситуационному принципу. Например, некоторые приложения могут быть размещены исключительно у клиентов или исключительно на определенных серверах, или же может быть использована любая комбинация указанных вариантов, за счет чего достигается повышение эффективности системы в целом. Однако до настоящего времени попытки скомбинировать выходные данные от различных источников в единое отображение не достигали успеха. Например, в начальный период были предприняты попытки заставить приложения, работающие на сервере, записывать данные непосредственно в локальных окнах. Хотя данный метод позволяет отобразить выходные данные приложений от различных серверов на единственном дисплее, он не позволяет разместить окна у клиента в соответствии с порядком расположения окон по оси z (z-упорядочиванием) на каждом индивидуальном сервере. Так например, если сервер размещает новое окно в верхней части своего рабочего стола, у пользователя на узле-клиенте соответствующего изменения не произойдет. Далее, в типичном случае известные системы не могут поддерживать комбинирование данных от различных источников в единое отображение без модифицирования приложений, генерирующих выходные данные. Это происходит потому, что большинство предприятий для генерирования данных предпочитает пользоваться стандартным программным обеспечением, а такое обеспечение не поддерживает комбинирование выходных данных. Это составляет реальную проблему, потому что переписывание подобных приложений таким образом, чтобы они поддерживали указанное комбинирование, как правило, запрещено изготовителем данного программного обеспечения. Если же оно не запрещено, то может оказаться весьма дорогостоящим. Сущность изобретения Настоящее изобретение относится к системе, в которой множество отображений данных может быть представлено в виде связанного, объединенного, единого отображения, без какого-либо вмешательства со стороны пользователя и без необходимости какого-либо модифицирования приложений, генерирующих отображаемые выходные данные. Система позволяет пользователю взаимодействовать с отображаемыми окнами, не зная источника этих окон, причем изменения, вносимые в окна либо локально, либо дистанционно, отображаются на соответствующем дисплее сервера или клиента. В одном своем аспекте настоящее изобретение относится к системе для встраивания окон от удаленной среды для рабочего стола в локальную среду для рабочего стола. Система содержит локальный узел, локальное приложение-агент (далее называемое локальный агентом), первый удаленный узел и первое удаленное приложение-агент (удаленный агент). Первый удаленный узел обеспечивает создание первой удаленной среды для рабочего стола, а первый удаленный агент обеспечивает мониторинг первой удаленной среды для рабочего стола в отношении изменений этой среды. Первый удаленный узел передает локальному агенту сообщения, указывающие на изменения в первой удаленной среде для рабочего стола. Локальный агент принимает переданные сообщения и выдает команду локальному узлу на модифицирование вида первого удаленного окна, которое составляет часть локальной среды для рабочего стола. Локальный агент осуществляет также мониторинг локальной среды для рабочего стола и передает удаленному агенту сообщения, указывающие на изменения в локальной среде для рабочего стола. В некоторых конкретных вариантах локальный узел обеспечивает формирование локальной среды для рабочего стола. В другом своем аспекте настоящее изобретение относится к способу встраивания окон от удаленных сред для рабочего стола в локальную среду для рабочего стола. Способ включает операции: обеспечения локального узла, на котором имеется локальный агент; получения локальным агентом сообщения, указывающего на изменения в окнах, включенных в удаленную среду для рабочего стола; выдачи локальным агентом команды локальному узлу произвести соответствующее изменение в локальной среде для рабочего стола; осуществление мониторинга локальным агентом локальной среды для рабочего стола; и передачи локальным узлом сообщений удаленному узлу, указывающих на изменение в локальной среде для рабочего стола. Данный способ может быть воплощен в материальном изделии. Еще в одном своем аспекте настоящее изобретение относится к агенту, который встраивает окна от удаленной среды для рабочего стола в локальную среду для рабочего стола. Агент включает в себя процесс принятия сообщения, способный получать сообщения, указывающие на изменение, которое произошло в удаленной среде для рабочего стола. Процесс выдачи команд в ответ на сообщения, принятые процессом принятия сообщений, вносит изменения в локальную среду для рабочего стола. Процесс мониторинга осуществляет мониторинг событий на локальном рабочем столе. Данный агент может быть воплощен в материальном изделии. В своем следующем аспекте настоящее изобретение относится к системе для встраивания окон из удаленной среды для рабочего стола в локальную среду для рабочего стола. Система содержит локальный узел и удаленный узел, соединенные линией связи. Линия связи включает в себя первый виртуальный канал и второй виртуальный канал. По первому виртуальному каналу узлы обмениваются информацией о рабочем столе, такой как положение окна, размер окна, z-упорядочение окон на рабочем столе. По второму виртуальному каналу узлы обмениваются графической информацией. В некоторых вариантах первый и второй виртуальные каналы могут быть выполнены в виде единого виртуального канала. Перечень фигур чертежей Настоящее изобретение будет охарактеризовано в прилагаемой формуле изобретения. Отмеченные, а также прочие преимущества изобретения станут более понятными из нижеследующего описания, которое следует рассматривать совместно с прилагаемыми чертежами. На фиг.1 представлена функциональная блок-схема одного из вариантов системы клиент-сервер. На фиг.2 приведена функциональная блок-схема узла-клиента, связанного с двумя отдельными узлами-серверами. На фиг. 3 представлена блок-схема последовательности операций, которые выполняются, когда агент сервера обнаруживает изменения в ассоциированной среде для рабочего стола. На фиг.4 изображена блок-схема последовательности операций, которые выполняются, когда агент клиента обнаруживает изменения в ассоциированной среде для рабочего стола. На фиг.5 приведена блок-схема последовательности операций, которые выполняются для того, чтобы открыть виртуальный канал между агентом клиента и агентом сервера. На фиг.6 изображена блок-схема агента. Сведения, подтверждающие возможность осуществления изобретения На фиг. 1 показана система клиент-сервер, в которой узел-сервер 20 предоставляет услуги одному или нескольким узлам-клиентам 10. Узлы-клиенты могут общаться с узлом-сервером 20 посредством множества стандартизированных коммуникационных протоколов, которые включают следующие протоколы: TCP/IP, IPX/SPX, NetBEUI или последовательные протоколы, – но не исчерпываются ими. Альтернативно, узлы-клиенты 10 могут соединяться с узлом-сервером 20, используя протоколы обмена данных, составляющие собственность отдельных фирм, таких как протокол ICA, принадлежащей фирме Ситрикс Системз, Инк. (Citrix Systems Inc. , заявитель настоящего изобретения) или протокол RDP фирмы Майкрософт. Физическое соединение между узлами-клиентами 10 и узлом-сервером 20 может быть реализовано посредством кабеля или бесконтактной связи, например, на основе ИК-излучения. На фиг. 2 представлена система, в которой единственный узел-клиент 10 соединен с более чем одним узлом-сервером 20, 20′. Как видно из фиг.2, с узлом 10 ассоциирован дисплей 12. Дисплей 12 может быть использован для отображения одного или более компонентов графического пользовательского интерфейса, такого как окна или меню. Набор компонентов графического пользовательского интерфейса, отображаемого дисплеем 12 для восприятия пользователем, обычно называется “рабочим столом”. Как показано на фиг.2, локальный узел 10 отображает локальную среду 14 для рабочего стола для восприятия пользователем. Локальный узел 10 может обеспечивать (формировать), по меньшей мере, часть локальной среды 14 для рабочего стола; альтернативно, локальный узел 10 может просто отображать различные компоненты рабочего стола, полученные от других источников, таких как узлы-серверы 20. Как видно из фиг. 2, каждый узел-сервер 20, 20′ имеет ассоциированный с ним дисплей 22, 22′, который также отображает среду 23, 24′ для рабочего стола. Следует отметить, что дисплеи 22, 22′ необязательно должны представлять собой видеомониторы. Например, любой дисплей 22, 22′ может представлять собой группу оперативных ЗУ (RAM), в которые приложения записывают выходные данные по вызовам графической процедуры. На фиг.2 представлен вариант системы, в которой каждый дисплей 22, 22′ узла-сервера отображает одно окно 26, 27′ пользовательского интерфейса. Каждый сервер 20, 20′ имеет, по меньшей мере, одного агента 30, 30′. В предпочтительных вариантах каждый сервер 20, 20′ имеет по одному агенту 30, 30′ для каждого клиента 10, подключенного к серверу 20, 20′. Узел-клиент 10 также может иметь агента 40. В некоторых вариантах осуществления изобретения узел-клиент 10 имеет отдельного агента 40 для каждого сервера, с которым связан узел-клиент 10. В других вариантах узел-клиент 10 имеет единственного агента 40, который действует как менеджер соединений с множеством узлов-серверов 20. Каждый из агентов 30, 30′, 40 может осуществлять мониторинг ассоциированной среды 24, 24′ для рабочего стола в отношении окон, которые: изменяют положение; открываются; закрываются; изменяют размеры; минимизируются; максимизируются; выводятся на переднюю позицию, т.е. в отношении окон, которые раньше не были в фокусе, а теперь оказываются в фокусе. Каждый агент 30, 30′, 40 передает сообщения, указывающие на изменения на ассоциированных рабочих столах 24, 24′, 14, другим агентам. Например, локальный агент 40 может получать сообщения, передаваемые от агентов 30, 30′ узлов-серверов. Локальный агент 40 выдает команду узлу-клиенту 10 модифицировать локальную среду 14; иначе говоря, локальный агент 40 выдает команду узлу-клиенту 10 привести локальную среду 14 для рабочего стола в соответствие со средой 24 для рабочего стола сервера. Согласно другим вариантам агенты 30, 30′ узла-сервера получают сообщения от локального агента 40 и выдают команды серверам 20, 20′ модифицировать среды 24, 24′ для рабочего стола в ответ на сообщения, полученные от локального агента 40. В одном из вариантов агенты 30, 40 осуществляют мониторинг изменений в ассоциированных с ними средах 24, 24′ для рабочего стола, периодически выдавая один или более наборов команд, вырабатываемых операционной системой, которая позволяет определять детали графического пользовательского интерфейса рабочего стола. В вариантах, в которых агенты 30, 40 находятся на узлах, выполняющих одну из версий операционной системы Windows, эти агенты могут периодически выдавать операционной системе Windows команду EnumWindows, которая возвращает перечень всех окон, присутствующих на рабочем столе, вместе с информацией, относящейся к этим окнам. Агенты 30, 40 могут выдавать команду EnumWindows каждые 50 мс, каждые 100 мс, каждые 500 мс или с любой другой периодичностью, которая позволяет агенту 30, 40 быстро определить, когда произошли изменения в ассоциированной с ним среде для рабочего стола без создания существенной вычислительной нагрузки на узел. В данном варианте агент 30, 40 сохраняет структуру данных для хранения информации об окнах рабочего стола и сравнивает эту структуру со значениями, возвращенными командой EnumWindows, для того, чтобы выявить изменения. Информация, определяемая и сохраняемая агентом 30, 30′, может включать в себя строку заголовка, ассоциированную с каждым окном в среде 20, 24′ для рабочего стола, положение каждого окна в среде 20, 24′ для рабочего стола, размер каждого окна и его позицию в среде 24, 24′ по оси z. В другом варианте агент 30, 30′, 40 осуществляет мониторинг внутренней очереди графических сообщений для того, чтобы определить изменения в ассоциированной с ней среде для рабочего стола. Агенты 30, 30′ сервера осуществляют мониторинг внутренней очереди сообщений на сервере, а локальный агент 40 – на узле-клиенте. В этом варианте изменения среды 24, 24′ производятся посредством сообщений, посылаемых на графическую подсистему от системных приложений или от самой операционной системы. Так, приложение, выполняемое сервером 20, 20′, будет посылать сообщение на графический процессор, имеющийся на сервере 20, 20′, для того, чтобы изменить среду для рабочего стола сервера 24, 24′. Другие команды, которые будут возвращать данные для графического пользовательского интерфейса, должны быть очевидны для специалистов в данной области. В вариантах, в которых агенты 30, 40, находятся на узлах, выполняющих версию операционной системы WINDOWS, агенты 30, 40 осуществляют мониторинг программы Windows Message Queue в отношении сообщений, оказывающих влияние на среду для рабочего стола, ассоциированную с узлом, для которого агент является резидентным. Примеры подобных сообщений включают сообщения: WM_SETFOCUS, указывающее, какое сообщение будет в фокусе (т.е. окажется “наверху” на рабочем столе); WM_KILLFOCUS, снимающее фокус с указанного окна, и WM_WINDOWPOSCHANGING, указывающее на изменение позиции окна. Другие сообщения, которые могут быть включены в Windows Message Queue, хорошо известны специалистам в данной области. На фиг.3 показаны операции, выполняемые в случае события, инициируемого сервером. Агент 30 сервера обнаруживает изменение в ассоциированной с ним среде (шаг 302). Агент 30 может сделать это путем обнаружения в очереди сообщений на сервере события, связанного с окном. Альтернативно, агент 30 может обнаружить изменение на рабочем столе путем сравнивания результатов, возвращенных командами, последовательно выдаваемыми операционной системой, как это было описано ранее. Агент 30 сервера посылает агенту 40 клиента сообщение, указывающее на изменение на рабочем столе 24 сервера (шаг 304). Например, если фокус был передан новому окну, агент 30 сервера может передать агенту 40 клиента сообщение, содержащее идентификацию нового “верхнего” окна. В одном из вариантов агент 30 сервера распространяет свое сообщение, т. е. передает его всем агентам 40 клиента, которые имеются в системе. В альтернативном варианте агент 30 сервера может передать свое сообщение только заранее определенному подмножеству агентов 40 клиента. Например, когда клиент 10 устанавливает связь с сервером 20, агент 40 клиента может зарегистрироваться у агента 30 сервера. В данном варианте агент 30 сервера будет передавать сообщения об изменениях только тем агентам клиента, которые зарегистрировались на сервере. Агент 40 клиента получает переданное сообщение (шаг 306). В вариантах, согласно которым сервер передает команды на более чем один удаленный узел, агент 40 клиента должен располагать каким-то механизмом для определения того, влияет ли переданная команда на ассоциированный с ним рабочий стол 12. Например, агент 40 клиента может поддерживать список серверов, с которыми он связан. В подобных вариантах агент 40 клиента реагирует на сообщения, распространяемые любым сервером, присутствующим в его списке. Для вариантов, в которых агент 30 сервера не передает команды, наличие какого-то механизма данного типа не требуется. Агент 40 клиента осуществляет изменение на ассоциированным с ним рабочем столе 14 в ответ на полученное сообщение (шаг 308). Агент 40 клиента может обеспечить это путем непосредственной выдачи графических команд Программного Интерфейса Приложения (Application Programming Interface), которые заставят клиента 10 изменить отображение на ассоциированном с ним рабочем столе 14. Согласно другим вариантам агент 40 клиента выдает непосредственно системе команды, реализованные либо аппаратно, либо программно, ответственные за отображение графической информации на узле-клиенте 10. На фиг.4 показаны операции, выполняемые, когда изменение рабочего стола инициируется клиентом. Агент 40 клиента обнаруживает изменение на ассоциированном рабочем столе 14 (шаг 402). Как уже отмечалось, это может быть сделано на основе событийного управления или путем опроса операционной системы, работающей на узле-клиенте 10. Агент 40 клиента определяет, какому серверу принадлежит затронутое окно (шаг 404). Чтобы облегчить этот процесс, агент 40 клиента может поддерживать список, который ассоциирует удаленные окна с конкретным сервером 20. Затем агент 40 клиента посылает на идентифицированный сервер 20 сообщение, указывающее на изменение на своем рабочем столе 14 (шаг 406). Альтернативно, агент 40 клиента может полностью опустить шаг 404 и передать свое сообщение об изменении всем серверам 20. Агент сервера принимает сообщение (шаг 408) и осуществляет изменение на ассоциированном рабочем столе (шаг 410), как это было описано выше. В одном конкретном варианте узел-клиент 10 и узел-сервер 29 связываются с использованием протокола ICA, причем узел-клиент 10 и узел-сервер 20 выполняют версию операционной системы WINDOWS. Узел-клиент 10 располагает локальным агентом 40, который может быть выполнен, как динамически связанный библиотечный модуль. Узел-сервер 20 располагает локальным агентом 40, который может быть выполнен, как отдельный поток (подпроцесс). Согласно данному варианту локальный агент 40 и агент 30 сервера обмениваются графическими данными, т.е. данными, реально отображаемыми в каждом окне на рабочем столе, через первый виртуальный канал ICA. Информация о позициях окна, размерах окна, порядковый номер окна в z-упорядочении и другая подобная информация передается между узлом-клиентом 10 и узлом-сервером 20 по второму виртуальному каналу ICA. Далее в данном описании в случае, когда узел-клиент 10 и узел-сервер 20 активно обмениваются информацией по второму виртуальному каналу ICA, узел-клиент будет описываться как находящийся в “режиме безразрывных окон”. Процесс, обеспечивающий поддержание режима безразрывных окон между локальным агентом 40 и агентом 30 сервера, иллюстрируется фиг.5. В рассматриваемом варианте все общение между агентом сервера и агентом клиента происходит в форме пакетов и осуществляется по выделенному виртуальному каналу ICA, что делает функционирование агентов 30, 40 независимым от базового коммуникационного протокола. Все пакеты начинаются с указания типа пакета (1 бит), за которым следуют сведения о длине пакета (2 байта, могут равняться нулю) и данные (могут отсутствовать). Агенты 30, 40 будут пытаться послать в одном пакете как можно больше данных, но все посылаемые пакеты будут полными. Другими словами, размер виртуальных пакетов безразрывных окон никогда не превышает допустимый размер ICA-пакета. Управление потоком пакетов и подтверждение доставки обеспечиваются транспортным уровнем протокола ICA. Отдельные пакеты выполняются немедленно по получении. Агент 40 клиента ожидает получения начального пакета от агента 30 сервера. Агент 30 сервера запускается после ввода сигнала logon пользователя (шаг 504). Агент сервера отправляет агенту 40 клиента пакет TWI_PACKET_START, который включает некоторую существенную информацию о среде для рабочего стола сервера (разрешение рабочего стола, размер рабочего стола, номер версии протокола ICA, поддерживаемой сервером, и т.д.) (шаг 506). Этот пакет посылается агентом 30 сервера при первоначальном соединении или при возобновлении соединения и используется для того, чтобы: (1) установить возможности клиента в отношении безразрывных окон; (2) затребовать базовую информацию о клиенте. Агент клиента получает пакет TWI_PACKET_START (шаг 507) и отвечает пакетом TWI_ PACKET_C2H_STARTACK, подтверждающим получение пакета TWI_PACKET_ START и несущим информацию об имеющейся версии и возможностях клиента (шаг 508). Этот пакет посылается агентом 40 клиента для того, чтобы подтвердить прием пакета TWI_ PACKET_ START и переслать базовую информацию о клиенте агенту 30 сервера. При отсутствии ответа от агента 40 клиента (шаг 509) агент 30 принимает, что клиент неспособен войти в режим безразрывных окон и узел 20 сервера не использует виртуальный канал безразрывных окон для передачи информации об окнах. В этом случае узел-сервер 20 продолжает передавать графические данные на узел-клиент 10 по другому виртуальному каналу, а рабочий стол клиента отображает рабочий стол сервера без включения окон от других узлов. Агент 40 клиента использует информацию, посланную агентом 30 сервера на шаге 506, для того, чтобы определить, может ли быть установлен сеанс связи в режиме безразрывных окон между агентом 30 сервера и агентом 40 клиента. Согласно одному из вариантов для этого агент 40 клиента сравнивает информацию, относящуюся к версии протокола виртуального канала, поддерживаемой агентом 30 сервера. Если агент 40 клиента определит, что запуск режима безразрывных окон возможен (шаг 510), агент 40 клиента отправляет агенту 30 сервера пакет TWI_PACKET_C2H_OPEN (шаг 511). Этот пакет требует, чтобы агент 30 сервера запустил режим безразрывных окон. По получении пакета TWI_PACKET_C2H_OPEN (шаг 512) агент 30 сервера: (1) устанавливает свои внутренние структуры данных в исходное состояние; (2) отсылает агенту 40 клиента пакет TWI_PACKET_SYSINFO, чтобы передать агенту 40 клиента некоторую общую информацию, относящуюся к настройке узла-сервера 20; (3) отправляет агенту 40 клиента пакет TWI_PACKET_OPEN (шаг 514), указывающий на установление режима безразрывных окон; и (4) запускает свой главный цикл опроса (шаг 516), который будет производить опрос операционной системы на узле-сервере в отношении изменений рабочего стола. Если агент 40 клиента и агент 30 сервера не поддерживают одну и ту же версию протокола безразрывных окон, агент 30 сервера игнорирует пакет TWI_PACKET_C2H_OPEN. По получении пакета TWI_ PACKET_OPEN (шаг 520) агент 40 клиента устанавливает свои внутренние структуры данных в исходное состояние (шаг 522), при этом между агентом 40 клиента и агентом 30 сервера устанавливается режим безразрывных окон. В течение сеанса в режиме безразрывных окон агент 30 сервера будет посылать информацию об окнах, в том числе данные о позициях, размерах, стилях окон, текст в окнах и т.д. по всем активным окнам на узле сервера. Кроме того, высылается информация об окне переднего плана, т.е. о том, какое окно на рабочем столе узла сервера находится в позиции переднего плана. В соответствии с этой информацией агент 40 клиента создает на рабочем столе узла-клиента окна с такими же размерами и позициями, как у окон на узле-сервере. В некоторых вариантах элементы окон передаются с узла-сервера 20 в виде битового образа (растра). Примеры пакетов, отправляемых агентом 30 сервера, включают: TWI_ PACKET_ CLOSE, который посылается для того, чтобы вывести агента 40 клиента из режима безразрывных окон и вернуть его в обычный, или полноэкранный режим, т.е. узел-клиент 10 возвращается к отображению рабочего стола узла-сервера, без встраивания в него окон из других сред для рабочего стола; TWI_ PACKET_ CREATEW, который посылается для того, чтобы создать на узле-клиенте 10 новые окна; TWI_ PACKET_ DELETEW, который посылается для того, чтобы удалить окно на узле-клиенте 10; TWI_ PACKET_CHANGEW, который посылается для того, чтобы изменить окно на узле-клиенте 10; TWI_PACKET_SYSINFO, который посылается для того, чтобы передать системные настройки узла-сервера 20, – обычно он посылается только один раз, но может быть послан и множество раз; TWI_ PACKET_FOREGROUNDW, который посылается во время работы в нормальном режиме безразрывных окон для того, чтобы изменить окно переднего плана; TWI_PACKET_SETTOPW, который посылается во время работы в нормальном режиме безразрывных окон для того, чтобы изменить окно, находящееся наверху, т. е. поместить наверху другое окно; TWI_ PACKET_ SETFOCUS, который посылается во время работы в нормальном режиме безразрывных окон для того, чтобы изменить фокусное окно; TWI_ PACKET_ FOCUSACK, который посылается в ответ на TWI_PACKET_C2H_SETFOCUS (см. ниже) и приводит результат попытки выполнить операцию установки фокуса (SetFocus); и TWI_PACKET_SPA_STATUS, который посылается в ответ на TWI_PACKET_C2H_START_PUBLICAPP (см. ниже) и используется для передачи результата затребованной операции. Примеры пакетов, отправляемых агентом 40 клиента агенту 30 сервера, включают: TWI_ PACKET_ C2H_PAUSE, который посылается для того, чтобы приостановить работу агента 30 сервера, т.е. при этом агент 30 сервера перестанет посылать информацию об окнах, очистит свою внутреннюю структуру данных и отправит пакет TWI_PACKET_CLOSE (см. выше); TWI_ PACKET_ C2H_ RESUME, который посылается для того, чтобы возобновить работу агента 30 сервера, т. е. при этом агент 30 сервера очистит свою внутреннюю структуру данных и отправит пакет TWI_PACKET_OPEN (см. выше); TWI_ PACKET_ C2H_SETPOS, который посылается для того, чтобы уведомить об изменении размера/позиции окна на узле-клиенте; TWI_PACKET_C2H_SETFOCUS, который посылается для того, чтобы уведомить об изменении в фокусном окне на узле-клиенте; TWI_ PACKET_ C2H_RESTORE, который посылается для того, чтобы затребовать восстановления минимизированного окна; TWI_PACKET_C2H_TERMINATE, который посылается для того, чтобы затребовать завершения программы, выполняемой на узле-сервере 20; TWI_ PACKET_ C2H_ STARTAPP, который посылается для того, чтобы запустить новое приложение на узле-сервере 20; TWI_ PACKET_ C2H_ LOGOUT, который посылается для того, чтобы закончить текущий сеанс; TWI_ PACKET_ C2H_START_PUBLICAPP, который посылается для того, чтобы запустить новое опубликованное приложение на узле-сервере; и TWI_ PACKET_C2H_CLIENTINFO, который посылается для того, чтобы уведомить агент 30 сервера об установках рабочего стола клиента – этот пакет обычно пересылается при запуске, но может быть также использован во время сеанса безразрывных окон. Агент 40 клиента будет пытаться выполнить некоторые операции (такие, как перемещение и изменение размеров окна) локально, отсылая после этого обновленную информацию обратно на узел-сервер 20. Правильное поведение окна эмулируется перехватом сообщения WM_NCHITTEST для окон, созданных клиентом. Изменения окна переднего плана могут иметь место как на узле-клиенте, так и на узле-сервере, так что клиент и сервер будут согласовывать и балансировать действительные изменения окна переднего плана. Например, если узел-сервер 20 изменяет свое окно переднего плана, это изменение должно быть должным образом представлено на рабочем столе клиента. Агент 30 сервера посылает информацию по новому окну переднего плана агенту 40 клиента, используя пакет TWI_PACKET_FOREGROUNDW. Аналогично, если агент 40 клиента обнаружит изменение окна переднего плана на рабочем столе клиента, агент 40 клиента посылает информацию об изменении агенту 30 сервера, и агент 30 сервера воспроизводит это изменение на рабочем столе сервера. Когда фокус снимается с окна, представляющего окна сервера, и передается окну локального клиента, клиент уведомляет об изменении сервер и сервер передает фокус невидимому окну. Для вариантов, в которых узел-клиент 10 соединен с двумя узлами-серверами 20 и фокус переходит от окна, представляющего окно от первого сервера, и передается окну, представляющему окно от второго сервера, клиент посылает пакет, информирующий текущий сервер о том, что его окно больше не является фокусным. Как только сервер отвечает тем, что передает фокус невидимому окну, агент 40 клиента инструктирует второй сервер о том, что теперь его окно является фокусным на локальном рабочем столе. В некоторых вариантах желательно несколько усложнить главный цикл опроса, выполняемый агентом, чтобы сократить сетевой трафик. В этих вариантах главный цикл опроса включает сопоставление текущего окна переднего плана и идентификацию окна, в отношении которого поступило последнее требование сделать его окном переднего плана. Если текущее окно переднего плана совпадает с окном, идентифицированным таким образом, то у агента нет необходимости посылать информацию, подтверждающую проведенное изменение. Этот прием полезен как для агента 30 сервера, так и для агента 40 клиента. Z-упорядочение окон у клиента всегда является набором более высокого порядка, чем аналогичный набор на сервере (у клиента всегда будет больше окон, чем у главного компьютера, или хоста). Z-упорядочение окон на сервере воспроизводится у клиента путем воспроизведения отношения окно-“хозяин”/собственное окно и флажка TOP MOST в стиле окна. Отношение окно-“хозяин”/собственное окно применимо к окнам, которые являются “потомками” других окон, например, к диалоговым окнам, ассоциированным с окнами приложений. Считается, что диалоговое окно является собственным окном окна приложения, и диалоговое окно всегда будет появляться “наверху” рабочего стола, как, например, строка текущего состояния в WINDOWS 95. Когда пользователь отключается, агент 30 сервера переводит себя в нерабочее состояние и не посылает больше информацию агенту 40 клиента. При повторном соединении агент 30 сервера посылает пакет TWI_PACKET_START, указывая Состояние Агента Хоста (HostAgentState), как “уже работает, повторное соединение”. С учетом номера версии протокола, поддерживаемого сервером, клиент решит, возможен ли запуск режима безразрывных окон (с точки зрения возможностей клиента). Если переключение в режим безразрывных окон возможно, агент 40 клиента пошлет пакет TWI_PACKET_C2H_OPEN, запрашивающий агента 30 сервера о запуске режима безразрывных окон. Каждый агент, обеспечивающий мониторинг ассоциированного рабочего стола, может быть реализован, как автономная программная процедура (типа исполняемого файла в системах на базе DOS), подпрограмма динамически подсоединяемой библиотеки (DLL) или как интегральная составляющая операционной системы. В кратком изложении, со ссылкой на фиг.6, каждый агент включает в себя средство 602 приема сообщения, командное средство 604, средство 606 мониторинга и средство 608 передачи сообщения. Связь агент-агент является дуплексной, т.е. агенты могут передавать и принимать сообщения одновременно. Таким образом, каждое из названных средств может быть реализовано в виде отдельно функционирующего сегмента кода, который функционирует независимо от других средств. Например, средство 602 приема сообщения и командное средство 604 могут быть реализованы как отдельные потоки (подпроцессы), которые общаются друг с другом посредством именованного канала или совместно используемой памяти. Привлечение совместно используемых данных позволяет синхронизовать средство 602 приема сообщения и средство 608 передачи сообщения. Средство 602 приема сообщения получает сообщения от других агентов с указанием изменений в средах для рабочего стола, ассоциированных с этими агентами. Средство 602 приема сообщения может связываться непосредственно с физическим слоем коммуникационного протокола, который используется агентами для осуществления связи. Альтернативно, средство 602 приема сообщения может работать на более высоком уровне протокола за счет взаимодействия с одной или несколькими подсистемами коммуникаций. Для вариантов, в которых агенты распространяют сообщения по нескольким адресам, средство 602 приема сообщения располагает каким-либо механизмом определения того, предназначено ли ему распространенное сообщение. Например, средство 602 приема сообщения может хранить список окон, которые отображаются на ассоциированном с ним рабочем столе. При этом средство 602 приема сообщения будет сравнивать с этим списком окон целевой объект любого принятого сообщения с тем, чтобы определить, следует ли выполнить какое-либо по приеме данного сообщения. Средство приема сообщений может быть реализовано как блокирующая функция. Альтернативно, оно может быть реализовано как функция обратного вызова, запускаемая передачей по виртуальному каналу протокола IСА. После того как средство 602 приема сообщения установило, что принятое сообщение предназначено для его рабочего стола, вызывается командное средство, которое должно произвести указанное в сообщении изменение на ассоциированном рабочем столе. Командное средство 604 может получить информацию от средства 602 приема сообщения; альтернативно, средство 602 приема сообщения может произвести обработку сообщения до того, как установит связь с командным средством 604. Командное средство 604 может осуществить требуемое изменение рабочего стола путем выдачи команд GDI (Graphic Device Interface – интерфейс графических устройств). Согласно другим вариантам командное средство 604 может выдавать команды непосредственно на графическую подсистему или выдавать другие команды API (Application Programming Interface – программный интерфейс приложения). Во время сеанса безразрывных окон с одним узлом-клиентом ассоциируется множество рабочих столов – рабочий стол самого клиента и по одному рабочему столу на каждый узел-сервер 20, с которым соединился узел-клиент 10. Агент 40 клиента, совместно с агентами 30, 30′ сервера создает объединенный список окон, поддерживающий z-упорядочение для всех рабочих столов. Все участвующие рабочие столы “соединены” вместе агентами 40 клиента и агентами 30, 30′ сервера, и любое изменение в z-упорядочении на любых рабочих столах будет распространено на все рабочие столы. В одном из вариантов каждый сервер знает только графическое представление своего собственного рабочего стола и рабочие столы серверов представляются у клиента индивидуально. Дисплей клиента обновляется за счет комбинирования изображений рабочих столов всех серверов и клиента в единое изображение дисплея, основанное на информации об окнах, которая была получено агентом 40 клиента от каждого узла-сервера 20, 20′. Результирующее изображение отображается на узле-клиенте 10. Процесс комбинирования включает построение объединенного списка окон, основанного на информации об окнах, обмен которой производится со всеми агентами. На основе объединенного списка окон производится отсечение и слияние графических данных рабочего стола для отображения на узле-клиенте 10. На этом узле воспроизводятся окна после отсечения на основе команд, выданных командным средством 604. Соответствующие функции “отсечения” хорошо известны специалистам в данной области техники. Однако в некоторых вариантах командное средство 604 поддерживает теневой битовый образ отсеченных окон. Другими словами, командное устройство сохраняет битовый образ окон, которые закрыты другими окнами. Это позволяет агенту изменять ассоциированный с ним рабочий стол без необходимости загрузки от соответствующего источника изображения закрытого окна. В других вариантах узел определяет, является ли графическая информация “перекрытой” в момент ее получения. Если это так, то узел игнорирует полученные графические данные. Если нет, узел отображает данные. Узел определяет, являются ли данные закрытыми, путем использования функций отсечения. Средство 606 мониторинга осуществляет мониторинг рабочего стола, ассоциированного с агентом. Средство 606 мониторинга может выполнять мониторинг рабочего стола путем периодической выдачи команд, обеспечиваемых операционной системой, функционирующей на узле, которые возвращают информацию о рабочем столе узла. В качестве альтернативы средство 606 мониторинга может следить за сообщениями, устанавливаемыми во внутреннюю очередь сообщений. Как уже указывалось, один из конкретных вариантов средства 606 мониторинга осуществляет мониторинг программы Windows Message Queue. Как только обнаружено изменение на рабочем столе, средство 608 передачи сообщения передает сообщение, указывающее на произошедшее изменение. В некоторых вариантах средство 608 передачи сообщения распространяет уведомление об изменении на несколько узлов. Согласно одному из вариантов средство 608 передачи сообщения может быть реализовано в форме неблокирующей функции, которая может вызываться из любой оконной процедуры. Если функция не может отправить пакет данных немедленно (например, подсистема коммуникаций не имеет буферного пространства), будет включен таймер и повторные попытки будут выполняться до тех пор, пока передача не произойдет. Согласно настоящему изобретению могут быть предусмотрены одна или более компьютерно-читаемых программ, реализованных в одном или нескольких материальных изделиях (носителях). Таким материальным изделием может быть дискета, жесткий диск, лазерный диск (CD ROM), карта с флэш-памятью, программируемое постоянное запоминающее устройство (PROM), оперативное запоминающее устройство (RAM), постоянное запоминающее устройство (ROM) или магнитная лента. В общем случае компьютерно-читаемые программы могут быть написаны на любом языке программирования. В качестве некоторых примеров возможных языков можно указать С, C++ или JAVA. Программы могут храниться на или в одном или в нескольких материальных изделиях в виде объектного кода. Из приведенного описания определенных вариантов осуществления изобретения специалистам в данной области техники должно быть очевидно, что могут быть использованы и другие варианты, реализующие принципы настоящего изобретения. Следовательно, изобретение не следует ограничивать конкретными вариантами осуществления; оно должно определяться содержанием и объемом прилагаемой формулы изобретения. Формула изобретения 1. Система для встраивания окон из удаленных сред для рабочего стола в локальную среду для рабочего стола, содержащая локальный узел, имеющий среду для рабочего стола, включающую локальное окно; локального агента, первый удаленный узел, имеющий первую удаленную среду для рабочего стола, включающую первое удаленное окно, второй удаленный узел, имеющий вторую удаленную среду для рабочего стола, включающую второе удаленное окно, первого удаленного агента, осуществляющего мониторинг указанной первой удаленной среды для рабочего стола и коммуникацию с указанным локальным агентом, причем указанный первый удаленный агент передает указанному локальному агенту первое сообщение, указывающее один или более атрибутов указанного первого удаленного окна относительно указанной первой удаленной среды для рабочего стола, второго удаленного агента, осуществляющего мониторинг указанной второй удаленной среды для рабочего стола и коммуникацию с указанным локальным агентом, причем указанный второй удаленный агент передает указанному локальному агенту второе сообщение, указывающее один или более атрибутов указанного второго удаленного окна относительно указанной второй удаленной среды для рабочего стола, при этом указанный локальный агент реагирует на указанное первое сообщение и указанное второе сообщение путем выдачи команды указанному локальному узлу сформировать представление указанного первого удаленного окна и указанного второго удаленного окна как части указанной локальной среды для рабочего стола, и объединенный список окон, размещенный на локальном узле и основанный на указанных первом и втором сообщениях, причем указанный объединенный список окон поддерживает z-упорядочение указанного локального окна и указанных первого и второго удаленных окон, и изменение в z-упорядочении любой из указанных сред отражается в указанной локальной среде для рабочего стола. 2. Система по п.1, отличающаяся тем, что указанный локальный узел обеспечивает формирование указанной среды для рабочего стола, а указанный локальный агент осуществляет мониторинг указанной локальной среды для рабочего стола, причем указанный локальный агент принимает первое сообщение, переданное указанным первым удаленным агентом, и, реагируя на принятое сообщение, выдает команду указанному локальному узлу модифицировать представление указанного первого удаленного окна как части указанной локальной среды для рабочего стола. 3. Система по п.1, отличающаяся тем, что указанный первый удаленный агент передает указанное первое сообщение, указывающее, что указанное первое удаленное окно изменило позицию, причем указанный локальный агент принимает указанное первое сообщение, переданное указанным первым удаленным агентом, и выдает команду указанному локальному узлу изменить позицию указанного представления указанного первого удаленного окна как части указанной локальной среды для рабочего стола. 4. Система по п.1, отличающаяся тем, что указанный первый удаленный агент передает указанное первое сообщение, указывающее, что указанное первое удаленное окно было закрыто, причем указанный локальный агент принимает указанное первое сообщение, переданное указанным первым удаленным агентом, и выдает команду указанному локальному узлу закрыть указанное представление указанного первого удаленного окна как части указанной локальной среды для рабочего стола. 5. Система по п.1, отличающаяся тем, что указанный первый удаленный агент передает указанное первое сообщение, указывающее, что указанное первое удаленное окно изменило размеры, причем указанный локальный агент принимает указанное первое сообщение, переданное указанным первым удаленным агентом, и выдает команду указанному локальному узлу изменить размеры указанного представления указанного первого удаленного окна как части указанной локальной среды для рабочего стола. 6. Система по п.1, отличающаяся тем, что указанный первый удаленный агент осуществляет мониторинг указанной первой удаленной среды путем мониторинга внутренней очереди сообщений. 7. Система по п.1, отличающаяся тем, что указанный локальный узел обеспечивает формирование указанной среды для рабочего стола, а указанный локальный агент осуществляет мониторинг указанной локальной среды для рабочего стола. 8. Система по п.7, отличающаяся тем, что указанный локальный узел передает сообщение, указывающее на локально сформированное изменение указанного представления указанного первого удаленного окна, на более чем один удаленный узел. 9. Система по п.1, отличающаяся тем, что указанный первый удаленный узел передает указанное первое сообщение, указывающее на изменение указанного первого удаленного окна, на более чем один удаленный узел. 10. Система по п.1, отличающаяся тем, что указанный локальный узел выполняет функции отсечения применительно к указанному представлению указанного первого удаленного окна, которое закрыто локальными окнами или другими удаленными окнами. 11. Способ встраивания окон из удаленных сред для рабочего стола в локальную среду для рабочего стола, включающий операции (а) обеспечения локального узла, являющегося хостом для локального агента и локальной среды для рабочего стола, включающей локальное окно, (б) обеспечения первого удаленного узла, являющегося хостом для первого удаленного агента и первой удаленной среды для рабочего стола, включающей, по меньшей мере, одно первое удаленное окно, (в) обеспечения второго удаленного узла, являющегося хостом для второго удаленного агента и второй удаленной среды для рабочего стола, включающей, по меньшей мере, одно второе удаленное окно, (г) мониторинга первым удаленным агентом первой удаленной среды для рабочего стола и передачи локальному агенту первого сообщения, указывающего один или более атрибутов указанного первого удаленного окна относительно указанной первой удаленной среды для рабочего стола, (д) мониторинга вторым удаленным агентом второй удаленной среды для рабочего стола и передачи локальному агенту второго сообщения, указывающего один или более атрибутов указанного второго удаленного окна относительно указанной второй удаленной среды для рабочего стола, (е) выдачи локальным агентом команды локальному узлу сформировать соответствующие окна в локальной среде для рабочего стола, обладающие атрибутами относительно локальной среды для рабочего стола, по существу, аналогичными атрибутам окон в удаленных средах для рабочего стола относительно удаленных сред для рабочего стола, и (ж) поддержания z-упорядочения, соответствующего локальной, первой и второй удаленным средам для рабочего стола в объединенном списке окон, причем изменение в z-упорядочении любой из сред отражается в локальной среде для рабочего стола. 12. Способ по п.11, отличающийся тем, что дополнительно включает операции получения локальным агентом первого сообщения, указывающего, что первое удаленное окно, включенное в первую удаленную среду, изменило позицию, и выдачи локальным агентом команды локальному узлу изменить позицию соответствующего окна, ассоциированного с первым удаленным окном в локальной среде для рабочего стола. 13. Способ по п.11, отличающийся тем, что дополнительно включает операции получения локальным агентом первого сообщения, указывающего, что первое удаленное окно, включенное в первую удаленную среду, было закрыто, и выдачи локальным агентом команды локальному узлу закрыть соответствующее окно, ассоциированное с первым удаленным окном в локальной среде для рабочего стола. 14. Способ по п.11, отличающийся тем, что дополнительно включает операции получения локальным агентом первого сообщения, указывающего, что первое удаленное окно, включенное в первую удаленную среду, изменило размеры, и выдачи локальным агентом команды локальному узлу изменить размеры соответствующего окна, ассоциированного с первым удаленным окном в локальной среде для рабочего стола. 15. Локальный узел системы клиент-сервер, обеспечивающий встраивание окон из удаленных сред для рабочего стола в локальную среду для рабочего стола и являющийся хостом для процесса принятия сообщений, способного осуществлять принятие сообщений, указывающих на изменение в атрибутах окон в удаленных средах для рабочего стола, процесса выдачи команд, способного в результате получения сообщений производить изменения локальной среды для рабочего стола; процесса мониторинга, способного осуществлять мониторинг событий на локальном рабочем столе, и процесса передачи, способного осуществлять передачу сообщений, характеризующих события на локальном рабочем столе. 16. Локальный узел по п.15, отличающийся тем, что указанный процесс передачи обеспечивает передачу сообщений, характеризующих события на локальном рабочем столе, на более чем один удаленный узел. 17. Локальный узел по п.15, отличающийся тем, что указанный процесс выдачи команд выдает в результате получения сообщений команды графического пользовательского интерфейса на внесение изменений в локальную среду для рабочего стола. 18. Носитель информации в виде дискеты, или жесткого диска, или лазерного диска (CD ROM), или карты с флэш-памятью, или программируемого постоянного запоминающего устройства (PROM), или оперативного запоминающего устройства (RAM), или постоянного запоминающего устройства (ROM), или магнитной ленты, на котором хранится информация о процессах, для которых хостом является локальный узел, заявленный в п.15. 19. Система для встраивания окон из удаленных сред для рабочего стола в локальную среду для рабочего стола, причем каждая среда включает в себя, по меньшей мере, одно окно, отображающее графические данные, содержащая линию связи, содержащую первый виртуальный канал и второй виртуальный канал, локальный узел, удаленный узел, причем указанный локальный узел и указанный удаленный узел обмениваются информацией об окнах по указанному первому виртуальному каналу указанной линии связи и графической информацией по указанному второму виртуальному каналу указанной линии связи, при этом указанная информация об окнах обеспечивает возможность окнам, отображаемым на указанном локальном узле, иметь атрибуты относительно локальной среды для рабочего стола, по существу, аналогичные атрибутам указанного окна (указанных окон), отображаемого (отображаемых) на указанном удаленном узле, относительно указанной удаленной среды для рабочего стола, и объединенный список окон, поддерживающий z-упорядочение указанных локальной и удаленной сред для рабочего стола, причем изменение в z-упорядочении любой из указанных сред отражается в указанной локальной среде для рабочего стола. 20. Система по п.19, отличающаяся тем, что первый виртуальный канал и второй виртуальный канал содержат один и тот же виртуальный канал. 21. Способ по п.11, отличающийся тем, что дополнительно включает операции мониторинга локальным агентом локальной среды для рабочего стола, обнаружение локальным агентом того, что пользователь локальной средой произвел изменения, по меньшей мере, в одном из соответствующих окон, и передачи локальным агентом сообщения, указывающего на изменение, удаленному агенту удаленной среды, окно которой имеет атрибуты, аналогичные атрибутам указанного одного из соответствующих окон. 22. Система по п.1, отличающаяся тем, что указанные представления имеют атрибуты относительно указанной локальной среды для рабочего стола, по существу, аналогичные атрибутам указанного первого удаленного окна относительно указанной первой удаленной среды для рабочего стола и атрибутам указанного второго удаленного окна относительно указанной второй удаленной среды для рабочего стола. РИСУНКИ
|
||||||||||||||||||||||||||