Техническое
развертывание системы WELCOM
Информационный документ
Содержание...................................................................................................................... 2
Результаты....................................................................................................................... 2
Обзор проекта................................................................................................................. 3
Стандарты видеоконференций........................................................................................... 4
Технологии........................................................................................................................... 4
Технические вопросы......................................................................................................... 4
Временной график и ресурсы..................................................................................... 6
Организационные процессы...................................................................................... 8
Дежурная служба................................................................................................................. 8
Группа технической поддержки.......................................................................................... 8
Персонал Всемирного экономического форума................................................................ 9
Функциональные и системные требования......................................................... 10
Требования по быстродействию и доступности.............................................................. 10
Пользовательский аудио- и видеоинтерфейс.................................................................. 10
Предложенное решение.............................................................................................. 11
Веб-узел............................................................................................................................. 11
Система для проведения аудио- и видеоконференций................................................... 12
Видеоконференции – технические требования................................................................ 14
Логическая архитектура..................................................................................................... 15
Архитектура приложения................................................................................................... 17
Безопасность................................................................................................................. 22
Реализация..................................................................................................................... 23
Использованные средства................................................................................................ 23
Использованные технологии............................................................................................ 23
Видеоконференции........................................................................................................... 24
Модульная структура......................................................................................................... 29
Приобретенный опыт.................................................................................................. 31
Направления развития................................................................................................ 32
Приложение A – примеры программ........................................................................ 34
Модули настройки............................................................................................................. 34
Страница Workspace.......................................................................................................... 39
Видеоконференции........................................................................................................... 44
События............................................................................................................................. 49
Модуль Directory................................................................................................................ 50
Загрузка файла на веб-узел.............................................................................................. 55
Всемирный экономический форум
Всемирный экономический форум (Женева, Швейцария) является некоммерческой организацией, активно помогающей своим членам в создании совместных предприятий, освоении новых областей деятельности и формировании долговременных партнерских отношений. Его члены представляют транснациональные корпорации, правительственные учреждения, научные и учебные заведения и средства массовой информации.
Всемирный экономический форум широко известен своими изданиями World Competitiveness Report и World Link, ежегодными 8-10 региональными экономическими саммитами и ежегодными встречами в Давосе, Швейцария. Опираясь на свои международные сети и связи, Всемирный экономический форум использует эти мероприятия для осуществления межотраслевых инициатив, например, либерализации финансовых услуг.
Мероприятия Всемирного экономического форума собирают ведущих представителей передовой мысли, но члены организации заметили, что продвижение проекта резко замедляется, как только они разъезжаются по своим странам. Для противодействия этой тенденции в 1995 году была создана первая версия системы WELCOM (World Electronic Community – Виртуальное электронное мировое сообщество), использующая технологию видеоконференций на основе настольных компьютеров. Эти начальные шаги первопроходцев, реализованные в ограниченном масштабе, показали, что подобное общение лицом к лицу является ключом к более тесному сотрудничеству участников из разных стран.
В 1997 году Всемирный экономический форум начал совместно с фирмой USWeb/CKS (Санта-Клара, штат Калифорния) совершенствовать систему WELCOM, преобразуя ее в систему видеоконференций и совместной работы на базе Интернета. Компания USWeb/CKS создала простой персонализированный интерфейс, позволяющий членам сообщества участвовать в аудио- и видеоконференциях, получать новости и публиковать информацию с помощью стандартного веб-обозревателя. Не требующая специальной подготовки система администрирования дает возможность персоналу Всемирного экономического форума легко управлять информационными ресурсами, добавлять и менять их из любого пункта.
С помощью технологий корпорации Майкрософт® компания USWeb/CKS помогла Всемирному экономическому форуму создать средство для совместной работы в режиме реального времени, средство безопасное и простое в использовании даже для новичка. Решение создано на базе отраслевых стандартов и благодаря этому является недорогим, легко адаптируемым и масштабируемым.
Система WELCOM выросла до системы совместной работы, поддерживающей одновременно до 500 пользователей. За первый год работы с помощью системы WELCOM было проведено более 600 конференций и еще больше личных встреч. Кроме того, возросла посещаемость региональных встреч, поскольку в них стало возможно участвовать по Интернету. Несколько тысяч членов WELCOM, перечисленных в каталоге этой системы, могут с помощью персонализированного веб-интерфейса получать доступ к следующим ресурсам.
Важнейшие новости, затрагивающие область интересов участника.
Каталог участников и их персональные профили.
Дискуссии в режиме реального времени с лидерами промышленности, государственными деятелями и экспертами из университетов и мозговых центров, находящимися в любой точке земного шара.
Список планируемых конференций WELCOM с указанием возможности участия в них через Интернет.
Мультимедийные библиотеки, содержащие видеозаписи конференций и встреч, программы саммитов и списки участников, пресс-релизы, исследовательские материалы и другие ресурсы.
Персонал, обслуживающий участников, который осуществляет видеоконференции, предоставляет информацию о других видах деятельности Всемирного экономического форума и распространяет отзывы и предложения членов форума среди его участников.
Система WELCOM была расширена добавлением следующих функций.
Проверка членства. Система WELCOM защищена от несанкционированного доступа путем запроса имени пользователя и пароля для доступа к веб-узлу. Каждая страница, изображение и ресурс в пределах веб-узла защищены с помощью этой модели проверки подлинности, основанной на модели Personalization & Membership (персонализация и членство) сервера Microsoft Site Server 3.0.
Централизованный каталог участников. С помощью этого каталога все пользователи могут вести поиск участников, выводить их профили и связываться с ними по телефону, по видеосвязи или по электронной почте. Ведение каталога членов Всемирного экономического форума основано на технологиях Microsoft SQL Server 6.5 и LDAP.
Управление профилями. Этот модуль дает возможность участникам обновлять свои профили, указывая контактную информацию, биографические данные, адреса, сферу деятельности, тип интересующих новостей, пароль и сведения о компьютере.
Рабочее пространство. После входа в систему участник входит на страницу Workspace (рабочее пространство), которая персонализирует информацию, собранную с остальных частей веб-узла. Эта страница разделена на три области: Headlines (Заголовки), Personal Directory (Личный каталог) и Events (События). Для формирования содержимого страницы в соответствии с профилем участника используются технологии ASP и LDAP.
Управление событиями. Модуль Event Management (Управление событиями) предоставляет участникам и администраторам событий удобный интерфейс, с помощью которого можно задавать события, управлять ими и регистрироваться для участия в событии посредством аудио- или видеоконференции. Администраторы создают событие с помощью средства на базе обозревателя, позволяя членам WELCOM регистрироваться для получения аудио- или видеослотов.
Аудио- и видеоконференции «точка-точка». Этот модуль (Point-to-Point Audio/Video Conferencing) позволяет участникам устанавливать аудио- и видеоконференции «точка-точка» щелчком имени участника в разделе каталога участников или в личном каталоге страницы Workspace. В нем используются как стандарт H.320 (ISDN), так и стандарт H.323 (TCP/IP).
Многоточечные аудио- и видеоконференции. Многоточечные конференции инициируются планированием события с помощью средства управления событиями Event Management. Когда событие начинается, всем участникам предлагается к нему присоединиться, для чего в этот момент надо щелкнуть ссылку «Join» (Присоединиться) в модуле управления событиями.
Мультимедийная библиотека. Эта библиотека позволяет участникам, не сумевшим принять участие в событии, просматривать архивы видеозаписей событий и участвовать в последующих обсуждениях. В ней также содержатся вспомогательные документы, такие как программы конференций, списки участников и пресс-релизы.
Система администрирования, предназначенная для персонала без специальной подготовки. Работники WELCOM, не имеющие специальной подготовки, с удаленных компьютеров создают и редактируют тексты с помощью административных средств, работающих на основе веб-обозревателя. Существуют также дополнительные средства пересылки файлов, с помощью которых можно отправлять на веб-узел файлы, созданные наиболее распространенными текстовыми процессорами, программами электронных таблиц, а также мультимедийные файлы.
Опыт Всемирного экономического форума показал, что видеосвязь играет в организации совместной работы очень важную роль, поскольку она передает интонацию и язык жестов, а потому в высшей степени приемлема в качестве средства связи участников системы WELCOM. Благодаря использованию экранов настольных компьютеров у участников создается впечатление личного разговора.
Оптимизация системы WELCOM основана на технологии Business Video Conferencing 4.0 (IBVC) компании Intel. Ведение многоточечных конференций можно выполнять голосом или администрировать их вручную. В качестве стандарта для передачи видео выбран стандарт ISDN (со средней скоростью от 12 до 15 кадров в секунду). Это связано с ограничениями пропускной способности, налагаемыми протоколом TCP/IP.
Использование в системе WELCOM отраслевых стандартов (HTTP, SMTP, POP, ODBC, LDAP, H.320 и H.323 для видео и T.120 для совместного использования данных) позволяет создать относительно недорогую систему видеоконференций на основе настольных компьютеров, доступную многим. Модульное построение этой системы повышает ее надежность и уменьшает расходы на эксплуатацию. Система является масштабируемой и может быть адаптирована для других организаций.
В данном решении используются системы Microsoft Windows NT® Server 4.0, Microsoft Internet Information Server 4.0, Microsoft Site Server 3.0 и BackOffice®, включая Microsoft SQL Server 6.5. Сервер Microsoft Site Server 3.0 обеспечивает возможность управления данными по членству и персонализации, которые хранятся в базе данных Microsoft SQL Server 6.5, и служит системой унификации профилей сеансов. Такая конфигурация позволяет использовать на веб-узле систему безопасности Microsoft Windows NT и протокол SSL (Secure Socket Layer), где это необходимо.
Система WELCOM работает (с меньшей надежностью) на менее дорогих аппаратных платформах видеоконференций, если на них поддерживаются стандарты видеоконференций H.320 и H.323 с использованием (предпочтительно) стандарта конференций для работы с данными T.120 (например, Microsoft NetMeeting®).
Наибольшими техническими проблемами, с которыми столкнулась компания USWeb/CKS, были следующие.
Поддержка различных веб-обозревателей, различных технологий видеоконференций и совместной работы.
Скрытие сложных технологий за простым и интуитивно понятным пользовательским интерфейсом.
Разработка модульных компонентов, облегчающих управление и настройку. Компоненты можно добавлять, изменять или удалять, и это никак не сказывается на работе других частей системы.
Проблемы, связанные с элементами управления ActiveX®. Клиенты часто отгорожены брандмауэрами и прокси-серверами, которые удаляют теги объектов ActiveX из файлов HTML.
Интеграция устройства для организации многоточечных конференций MCU (Multi-Conferencing Unit), что представляет большие сложности.
Планирование дальнейшего развития технологий.
Необходимость в технически несложном управлении информационными ресурсами Всемирного экономического форума.
Первая версия системы WELCOM для Всемирного экономического форума не нашла широкого применения среди его участников из-за сложного пользовательского интерфейса и низкого быстродействия. Группу разработчиков системы WELCOM попросили показать новый прототип через три недели на Азиатском экономическом саммите в октябре 1997 года. Ниже приведен график работы над прототипом и над последующими фазами I и II разработки системы WELCOM в течение1998 года.
Прототип (осень 1997 года). Трое разработчиков и один специалист по пользовательскому интерфейсу добавили в течение трех недель следующие компоненты.
Member Directory (Каталог участников) (SQL, LDAP).
Event Directory (Каталог событий), предлагающий три уникальных вида событий: «точка-точка», многоточечные и вещательные.
Улучшенный пользовательский интерфейс со значками, нейтральными по отношению к различным культурным традициям.
Concierge Services (Дежурная служба), обеспечивающая в режиме реального времени неавтоматизированную круглосуточную поддержку по рабочим дням.
Мультимедийная библиотека.
Фаза I (октябрь 1997- январь 1998). Двое разработчиков и один специалист по пользовательскому интерфейсу работали шесть недель над стабилизацией и улучшением кода, проведя следующие работы.
Изменение системы, которая стала управляться с помощью сервера Microsoft SQL Server 6.5 и технологии LDAP.
Полная реализация конференций «точка-точка» и многоточечных видеоконференций.
Добавление службы сообщений.
Улучшение службы каталогов.
Наполнение библиотеки данными, в том числе видеофайлами с предыдущих собраний форума.
Реализация средств администратора Event Management для управления событиями.
Фаза II (1998). Трое разработчиков, один специалист по пользовательскому интерфейсу и руководитель проекта затратили два месяца на создание модульной структуры для системы WELCOM и ее расширения, выполнив следующие работы.
Обновление системы до Microsoft Site Server 3.0 / IIS 4.0 с целью обеспечения персонализации.
Обновление системы до LDAP/AUO (Active User Object) для улучшения службы каталогов.
Улучшение пользовательского интерфейса для ускорения загрузки содержимого из Интернета.
Перенесение акцента на информационное наполнение, чтобы участники могли получить доступ к интересующей их информации.
Замена элементов управления ActiveX таблицами HTML для снижения требований к обозревателю.
Перемещение средств администратора в модули приложения.
Создание средства ведения видеоконференции с возможностями немедленной передачи сообщений, прекращения передачи информации определенными участниками конференции или полного их удаления из конференции.
Реализация многоуровневой системы безопасности для администрирования веб-узла. Пользователь системы имеет возможность обновить свой профиль. Специалисты технической поддержки имеют права администратора в модулях Events (События), Library (Библиотека) и Directory (Каталог). Наивысший уровень – администратор, имеющий полные права на всю систему.
Всемирному экономическому форуму для поддержки своих участников нужна сильная инфраструктура, укомплектованная людьми, готовыми немедленно откликнуться при возникновении любых технических проблем. Кроме того, необходимо наличие дружелюбной, профессиональной и знающей дежурной службы, готовой помочь в организации многоточечных событий, а также ответить на общие вопросы по системе WELCOM.
Участник одним щелчком мыши может связаться с дежурной службой, работающей с 7 до 23 часов по восточному поясному времени в рабочие дни, для получения помощи посредством аудио- или видеоконференции «точка-точка». Эта служба обеспечивает первый уровень технической поддержки и организует многоточечные события и совещания между участниками. За координацию конкретных конференций и сообщение всех сведений об участии в них отвечает определенный член дежурной службы.
Участники системы WELCOM могут использовать ее во время кризисных ситуаций путем координации с дежурной службой. Они могут обращаться друг к другу за поддержкой в моменты производственных кризисов, финансовых кризисов, политических волнений или природных катаклизмов. Дежурная служба – ключевая служба, гарантированная для членов системы WELCOM. При необходимости эта служба работает круглые сутки без выходных.
Дежурная служба отвечает за организацию сеансов, удовлетворение запросов участников и обновление каталогов. Эта служба передает вопросы об оборудовании, программном обеспечении, а также технические вопросы службе технической поддержки, укомплектованной специалистами компании USWeb/CKS. Работники дежурной службы проходят обучение у специалистов компании USWeb/CKS по основным вопросам установки, настройки и управления сеансами.
Недавно Всемирный экономический форум открыл систему WELCOM для всех своих членов. Для такого большого количества новых пользователей необходима группа технической поддержки.
Группа технической поддержки, укомплектованная сотрудниками USWeb/CKS, отличается глубоким знанием системы WELCOM и требований к конечным системам. Работники этой группы помогают участникам WELCOM в установке оборудования для видеоконференций и координируют процесс сертификации видеооборудования, что гарантирует должную и эффективную его работу с устройством MCU для конференций с несколькими участниками.
Всемирный экономический форум предоставляет своим членам доступ к системе WELCOM, чтобы активизировать их общение и обмен знаниями. Персонал Всемирного экономического форума занимается следующими вопросами: формирование информационных ресурсов, активизация работы участников системы WELCOM, содействие сетевому взаимодействию и управление им, организация сетевых встреч, привлечение к участию во встречах, управление службами библиотек и каталогов, интеграция сети WELCOM в международную деятельность форума, разработка новых услуг и привлечение партнеров для работы с информационными ресурсами.
Коллектив разработчиков, преодолев определенные трудности, создал комплексную, интегрированную и мощную систему совместной сетевой работы для международной группы требовательных и, в основном, неопытных в компьютерной области пользователей.
Система WELCOM доступна для всех 3000 членов форума.
Система обеспечивает широкие возможности доступа в Интернет и поддержку различных веб-обозревателей. Изначально система WELCOM была оптимизирована для клиентов Microsoft Internet Explorer версий 3.x и 4.x. В ближайшее время система будет полностью поддерживать клиентов Netscape.
Система WELCOM имеет удобный и интуитивно понятный пользовательский интерфейс.
Система WELCOM может работать с 500 пользователями одновременно.
Разработка пользовательского интерфейса системы WELCOM представляла собой интересную проектную задачу: создать сложную, всеобъемлющую и мощную систему совместной работы в сети для группы разноязычных, требовательных и, в основном, неопытных в компьютерной области пользователей. Система должна была быть удобной в работе и скрывать от пользователей сложности ее установки и работы.
Пользовательский интерфейс для фазы 2 системы WELCOM был полностью переписан в связи с проблемами, возникшими в уже существующем собственном приложении. Существующий пользовательский интерфейс с его графикой трехмерных комнат и переходами, управляемыми значками, оказался не настолько масштабируемым, насколько это было необходимо. Разработка визуальных метафор и сред для каждой дополнительной возможности системы создала бы лабиринт комнат и значков, в которых можно было заблудиться.
Кроме того, анализ требований пользователей показал, что интерфейс не обязан обладать языковой нейтральностью, поскольку все участники достаточно хорошо знают английский, чтобы пользоваться элементами управления с английскими обозначениями. К тому же многие пользователи, только недавно освоившие компьютер, сообщили проектировщикам, что им вполне удобны стандартные навигационные возможности Веба. В результате компания USWeb/CKS приняла решение заменить среду пользовательского интерфейса системы WELCOM более привычным веб-интерфейсом, который легко масштабируется и знаком пользователям, впервые обращающимся к системе.
Двумя главными компонентами предлагаемой физической архитектуры являются веб-узел HTTP и система для проведения аудио- и видеоконференций. Доступ к веб-узлу осуществляется по протоколу TCP/IP, а аудио- и видеоконференции проводятся по выделенным телефонным линиям ISDN.
На веб-узлах работают серверы Microsoft Internet Information Server (IIS) 4.0 и Microsoft Site Server 3.0 для проверки подлинности. Серверы базы данных работают под управлением системы Microsoft SQL Server 6.5 в конфигурации Microsoft Cluster Server. Веб-серверы имеют сдвоенные сетевые платы, которые позволяют веб-серверу обмениваться информацией с сервером кластера (в своей собственной сети) без прямого доступа к базе данных. Архивация на ленту выполняется автоматически с помощью процесса SQL Executive.
Архитектура сервера
Веб-серверы представляют собой двухпроцессорные компьютеры на базе процессоров PII 450 МГц с оперативной памятью 512 МБ и дисковой памятью 10 ГБ. Они содержат равноправно функционирующие реплицированные копии друг друга.
Коммутатор представляет собой устройство F5 Big IP, распределяющее трафик Веба между доступными веб-серверами с помощью базовой системы DNS по циклической схеме. Коммутатор программируется таким образом, что запросы к веб-серверу делятся между двумя компьютерами со службами IIS, а запросы на мультимедийное содержимое передаются непосредственно на сервер мультимедиа. Такая конфигурация балансирует нагрузку веб-серверов и обеспечивает отказоустойчивость в случае недоступности одного из серверов. Коммутатор также служит брандмауэром, допуская только запросы HTTP, HTTPS и потоковые запросы мультимедиа. При необходимости можно запрограммировать другие возможности фильтрации.
Сервер мультимедиа представляет собой двухпроцессорный компьютер на базе процессора PII 450 МГц с оперативной памятью 512 МБ и дисковой памятью 9,1 ГБ.
На сервере мультимедиа хранятся файлы в формате MPEG, размер которых лежит обычно в пределах 200-600 МБ. Файлы мультимедиа, занимающие меньше места (например, файлы PDF размера от 10 КБ до 10 МБ и файлы JPG размера от 10 КБ до 1 МБ), хранятся в базе данных приложения.
Серверы баз данных представляют собой двухпроцессорные компьютеры на базе процессоров PII 450 МГц с оперативной памятью 512 МБ, имеющие системный раздел размером 9 ГБ на дисковом массиве RAID 1 и логическую память на внешнем дисковом массиве RAID 5 размером 18,2 ГБ.
Серверная часть баз данных располагается на двух серверах, подключенных к единому дисковому массиву RAID 5. Все базы данных хранятся на дисковом массиве RAID. Запросы баз данных приложения обслуживает один компьютер, на котором установлен сервер Microsoft SQL Server 6.5. Второй компьютер обслуживает LDAP-запросы к базам данных. Сервер кластеров управляет событиями восстановления после отказа, когда все запросы баз данных обрабатывает один из компьютеров.
В основе веб-узла лежат средства проведения аудио- и видеоконференций, к которым можно обращаться при помощи веб-обозревателя. Эти средства реализованы для системы Intel Business Video Conferencing (IBVC) 4.0. Система WELCOM для осуществления аудио- и видеосвязи требует выделенной линии ISDN и совместимости с протоколом H.320. Связь «точка-точка» между двумя участниками может быть установлена непосредственно.
События и встречи с тремя и более участниками координируют специально выделенные сотрудники дежурной службы. Управление вызовами происходит с помощью устройства MCU (Multi-point Conferencing Unit). Программированием MCU занимается внешний поставщик. Когда событие определено, внешний поставщик передает дежурной службе необходимые линии и их номера телефонов. Сотрудник дежурной службы вводит в базу данных номер телефона для каждого слота события. В приложении автоматически набираются номера телефонов участников.
Система WELCOM оптимизирована для работы с обозревателями Microsoft Internet Explorer версий 3.x и 4.x и использует расширения HTML <Object> для обращения к элементам управления ActiveX, с помощью которых согласно технологии IBVC осуществляется управление видеоконференциями (подробнее см. ниже в разделе «Реализация»). Элементы управления ActiveX в приложении были удалены, чтобы сделать возможным использование обозревателя Netscape Navigator. Подробное обсуждение см. в следующем разделе «Видеоконференции – технические требования».
Многоточечные аудио- и видеоконференции
В модуле конференций «точка-точка» для связи с принимающим участником используется стандарт H.320 (предпочтительно) или H.323. Если стандарт H.320 (ISDN) недоступен, приложение для выполнения вызова возвращается к протоколу H.323 (TCP/IP). Модуль конференций «точка-точка» работает только с использованием технологии аудио- и видеоконференций Intel ProShare.
Аудио- и видеоконференции «точка-точка»
Система WELCOM поддерживает три уровня участия в видеоконференциях.
Уровень 1: полностью интегрированная настольная система, использующая технологию IBVC.
Уровень 2: независимая поддержка студийных и настольных видеоконференций.
Уровень 3: поддержка аудиоконференций.
Видеоконференции уровня 1 требуют возможности работы в Интернете без линии ISDN и используют объекты ActiveX (некоторые прокси-серверы этого не допускают) при помощи обозревателя Microsoft Internet Explorer 3.02 или 4.0. Необходимо иметь одну линию BRI ISDN (2 B-канала, настроенные как на голос, так и на данные, каждый 64 Кбит/с, итого 128 Кбит/с) и подключение к Интернету (28,8 Кбит/с, рекомендуется 128 Кбит/с).
У участников должна быть одна из следующих систем.
· Система IBVC (Intel Business Video Conferencing) с ProShare Technology 4.0. Комплект IBVC Kit включает в себя плату видеозаписи, плату ISDN, силовой видеокабель, телефонный кабель (RJ45), наушники Supra, комплект камеры, установочный компакт-диск и руководство по сборке (на пяти языках). Требования к персональному компьютеру следующие.
Процессор Intel Pentium 166 МГц или более мощный с применением технологии MMX (настоятельно рекомендуется процессор Intel Pentium II 233 МГц с применением технологии MMX).
32 МБ оперативной памяти и 70 МБ свободного места на жестком диске.
Гнездо ISA для платы ISDN и гнездо PCI для платы видеозаписи.
Дисковод для компакт-дисков.
Операционная система Microsoft Windows 95 или Microsoft Windows NT 4.0 Workstation.
Видеоадаптер с возможностями Microsoft DirectDraw для повышения быстродействия в полноэкранном режиме.
· Система Intel ProShare Video Conferencing System 500. Набор System 500 Kit включает в себя программное обеспечение видеоконференций Intel ProShare, интегрированное с приложениями Microsoft NetMeeting и PhotoExchange (с поддержкой пяти языков), одну плату аудио- и видеозаписи PCI-ISDN, наушники с микрофоном, полноцветную видеокамеру, подвесной микрофон, разъемы и кабели с цветной маркировкой, двойной кабель видеовхода, руководство по быстрой установке и NT-1 (не обязательно). Требования к персональному компьютеру следующие.
Процессор Intel® Pentium II с частотой 233 МГц (или выше) с кэшем 256 КБ L2.
32 МБ оперативной памяти в случае операционной системы Microsoft Windows* 95 (рекомендуется 64 МБ).
48 МБ оперативной памяти в случае операционной системы Microsoft Windows NT* (рекомендуется 64 МБ).
80 МБ свободного места на жестком диске (дополнительные 25 МБ для кэширования в локальном временном каталоге).
Одно свободное гнездо PCI и одно свободное прерывание IRQ для платы аудио- и видеозаписи ISDN.
Операционная система Microsoft Windows 95 или Microsoft Windows NT Workstation 4.0.
Видеоадаптер с возможностью Microsoft DirectDraw® и 16-разрядным цветом.
Пакет обновления 3 для Microsoft Windows NT.
На уровне 2 поддерживаются системы видеоконференций, отличные от тех, которые основаны на продуктах Intel ProShare. При организации сеансов «точка-точка» или многоточечных сеансов участники уровня 2 получают номер ISDN, используемый в программах их видеосистем. Техническим требованиям удовлетворяет любая система видеоконференций (студийная или настольная), совместимая со стандартом H.320, и технология Microsoft Internet Explorer или Netscape Navigator.
Уровень 3 предлагает решение для участников, не имеющих средств для проведения видеоконференций или возможностей ISDN. Такие участники могут присоединяться к многоточечным сеансам или связываться с другими перечисленными в каталоге участниками с помощью аудиосвязи. Минимальные технические требования – наличие телефона и обозревателя Интернета.
Обозреватель Microsoft Internet Explorer использует протокол HTTP для связи со страницами ASP (Active Server Pages), расположенными на веб-сервере (IIS 4.0). Страницы ASP используют объекты ADO (Active Data Objects) для обновления и чтения данных с сервера баз данных. Сервер Microsoft Site Server 3.0 проверяет подлинность запросов к веб-серверу.
Логическая архитектура
Сервер Microsoft Site Server 3.0 используется для проверки подлинности на веб-узле и доступа по протоколу LDAP. Фильтр проверки подлинности Microsoft Site Server 3.0 ISAPI защищает веб-узел от запросов к отмеченным страницам и перенаправляет эти запросы к форме входа в систему. Сервер Microsoft Site Server 3.0 настроен на использование только своей модели членства Membership. База данных LDAP настроена на хранение имени пользователя, пароля и групп на сервере Microsoft SQL Server 6.5.
Компании USWeb/CKS не потребовалось настраивать серверное программное обеспечение, и установка сервера IIS была выполнена по умолчанию. Это программное обеспечение находится на том же томе, что и операционная система Microsoft Windows NT.
Видеосодержимое хранится в структуре каталогов файловой системы NTFS на сервере Windows NT Server. Это видеосодержимое состоит из записанных сеансов WELCOM, которые поставщик MCU записывает, оцифровывает на компакт-диск и посылает по почте Всемирному экономическому форуму для загрузки на сервер по протоколу FTP.
Возможности поиска обеспечиваются запросами SQL, реализованными в виде хранимых процедур. Ключевые слова, хранимые в базе данных, используются для всего мультимедийного содержимого, как на сервере мультимедиа, так и в базе данных. Идентификаторы записи передаются в качестве параметров коду ASP для запросов к базе данных. Запросы на видеосодержимое перенаправляются по URL-адресам файлов.
Система находится в стадии освоения участниками. По мере роста использования предполагается некоторая подстройка, однако число изменений в системе Microsoft SQL Server 6.5 по отношению к умолчаниям невелико. Для улучшения быстродействия увеличены объем используемой памяти, размер базы данных TEMPDB и число подключений.
Разработчики обратили особое внимание на структуру базы данных, использование внешних ключей, индексов, ограничение использования курсоров или использование курсоров, предназначенных только для чтения, использование хранимых процедур для сложных запросов, использование простых запросов, денормализацию при необходимости и освобождение подключений после использования.
Приложение WELCOM имеет модульную структуру, что позволяет быстро производить изменения на веб-узле, а также разработку дополнительных модулей. Приложение WELCOM содержит восемь модулей.
Модуль Authorization (Проверка подлинности).
Шесть модулей, выполняемых на стороне клиента: Workspace (Рабочее пространство), News (Новости), Events (События), Directory (Каталог), Library (Библиотека) и Profile (Профиль).
Модуль Administration (Администрирование).
Проверка подлинности основана на модели членства Membership сервера Microsoft Site Server 3.0, в которой используется интерфейс LDAP к базе данных Microsoft SQL Server 6.5. Когда пользователь входит в систему, веб-узел его идентифицирует и предоставляет ему соответствующий доступ. Более подробные сведения см. в разделе «Реализация» в подразделе «Проверка подлинности».
Далее приложение задает переменные приложения и сеанса. В приложении широко используются объекты словаря сценариев IIS. Модули, строки и словари HTML, на основе которых строится модульная структура и производится настройка приложения, имеют особую важность. Каждый из модулей, выполняемых на стороне клиента, в папке которого содержится файл interface.txt, соответствует одному варианту динамически загружаемой навигационной панели. Этот файл необходим, чтобы модуль мог быть обнаружен и отображен. Какие возможности видны каждому пользователю, зависит от его уровня безопасности. Обсуждение этой методики см. в разделе «Реализация» в подразделе «Модульная структура».
Приложение содержит стандартный набор кадров, состоящий из заголовка вверху, навигационной панели (описанной выше) и тела. После загрузки набора кадров все страницы, которые приложение предоставляет клиенту, загружаются в кадр тела (и тоже могут содержать наборы кадров); заголовок и навигационные панели после загрузки уже не обновляются. В процессе инициализации загружаются три скрытых кадра и стандартный набор кадров. Эти кадры загружают клиентские JavaScript-модули для видеоконференций. Первой страницей, которая загружается после входа в систему и инициализации, является страница Workspace (Рабочее пространство).
Страница Workspace является домашней страницей системы WELCOM. Она дает персонализированную информацию в сгруппированном виде. Эта страница разделена на три области: News (Новости), Personal Directory (Личный каталог) и Events (События).
News (Новости). Участники получают статьи с последними новостями Всемирного экономического форума.
Personal Directory (Личный каталог). Участник может просматривать имена других участников, перечисленные в его личном каталоге. Участники, подключенные в данный момент к сети, указаны жирным шрифтом и отмечены галочкой.
Events (События). В этом разделе перечислены предстоящие события. С помощью ссылок участник может зарегистрироваться, отменить регистрацию или присоединиться к уже происходящему событию.
Страница Workspace также содержит приветствие в заголовке и ссылки «about WELCOM» (о системе WELCOM) внизу страницы, позволяющие получить дополнительную информацию. Каждая область помещена в ячейку таблицы одной страницы HTML. Подробности см. в разделе «Реализация» в подразделе «Workspace».
В этом модуле отображаются элементы управления, списки и краткие сведения об элементах, позволяющие участникам искать и просматривать информационные ресурсы. Вверху окна расположены элементы управления, с помощью которых пользователь может фильтровать новости по категориям, географическим признакам, по отрасли или по типу содержимого. В области списков выводятся выбранные статьи. Для каждой статьи указываются дата публикации, заглавие и автор. По умолчанию статьи отображаются в порядке убывания дат. Щелчком заголовка того или иного столбца пользователь может пересортировать список по соответствующему атрибуту. При выделении статьи в списке ее краткое содержание появляется в нижней части окна. Щелчком в окне краткого содержания вызывается полный текст статьи, отображаемый под элементами управления выбором.
Модуль Events (События) дает пользователю доступ к событиям WELCOM. Участник регистрируется для участия в событии прямо с экрана, выбирая значки для участия по телефону или по видеосвязи. После регистрации событие автоматически попадает в список данного участника «Your Events» (Ваши события), находящийся на странице Workspace. Когда событие начинается, участник щелкает ссылку «join» (присоединиться), чтобы включиться в работу видеоконференции. Пользователи, участвующие по телефону, по щелчку на ссылке «join» получают номер телефона, который надо набрать.
На экране конференции у каждого участника есть кнопка с надписью «Request Floor» (Прошу слова). По нажатию этой кнопки посылается сообщение ведущему конференции, который может предоставить участнику слово. Имя участника, которому предоставлено слово, отображается на главном экране видеоконференции.
Модуль событий использует профиль пользователя участника и объекты «cookie» на клиентском компьютере для настройки локального видеоустройства участника. Для управления сеансом и видео на клиентском компьютере приложение загружает в скрытые кадры три приложения JavaScript: Heartbeat, Video Manager и Video HAL. Подробные сведения см. в разделе «Реализация» в подразделе «Видеоконференции».
Каталог членов Всемирного экономического форума интегрирован в систему WELCOM с использованием сервера Microsoft SQL Server 6.5 и технологии LDAP. В этом каталоге можно найти всех пользователей. Для них указаны адреса электронной почты, IP-адреса, номера ISDN, а также возможности аудио- и видеосвязи. Участник также может добавить тех участников, с которыми часто общается, в свой личный каталог «Personal Directory».
Основные функции модуля включают возможности сортировки каталога по фамилии, названию организации или страны, фильтрацию по букве алфавита или выполнение простого поиска. Участник может просмотреть всех участников, участников из своего личного каталога или тех участников, которые в данный момент подключены к сети. Примеры соответствующих программ см. в Приложении А в подразделе «Модуль Directory».
Щелчок имени участника выводит на экран подробные данные об этом участнике. Эти данные включают обращение к участнику, его имена (если их несколько) и фамилию, должность, организацию, страну, биографические сведения и фотографию, если она есть.
На этом экране сведений пользователь может щелкнуть ссылку, чтобы послать данному участнику вызов на видеосвязь, письмо по электронной почте, а также добавить участника в свой личный каталог или удалить его из него.
В аудио- и видеоконференциях «точка-точка» используется модуль каталога. Для инициализации вызова «точка-точка» участник находит необходимого абонента в разделе каталога страницы Workspace или в личном каталоге и отмечает мышью его имя, чтобы вывести профиль этого участника. Меню профиля содержит ссылку на «Place a call» (Сделать вызов), которая выполняет дальнейший процесс автоматически. Вызвавший будет маршрутизирован к модулю конференций, который наберет номер вызываемого абонента (его компьютера).
В библиотеке могут размещаться все виды мультимедийных материалов, включая документы, фильмы и звукозаписи. Участники производят выбор либо просматривая содержимое в обозревателе, либо с помощью поиска по ключевым словам или по аннотации. Обнаружив необходимый материал, участник может выбрать средство воспроизведения для просмотра его содержимого.
В библиотеке хранится название, аннотация, дата присылки материала, имя приславшего, а также соответствующий материал, загруженный на веб-узел. Библиотека поддерживает загрузку от любого участника. Пример программы, иллюстрирующий применение программного обеспечения FileUp фирмы Software Artisan см. в Приложении А в подразделе «Загрузка файла на веб-узел». Все новые информационные ресурсы содержатся в испытательной области, пока они не утверждены администратором веб-узла. Весь материал подразделяется на категории с помощью словаря веб-узла. После утверждения материалы передаются в рабочую область веб-узла.
Этот модуль позволяет участникам обновлять свои профили. Заголовок модуля содержит четыре вкладки: Personal (Личные данные), Assistant (Помощник), Biography (Биография) и Computer (Компьютер).
Вкладка Personal дает участникам возможность обновлять свои портреты, личные данные (имя, адрес и данные об организации), выбор новостей (отрасль, география и вид статей) и основные данные рабочей станции (номер ISDN или адрес TCP/IP).
Вкладка Assistant дает участникам возможность добавлять и изменять сведения о своих личных помощниках.
Вкладка Biography дает участникам возможность добавлять и изменять сведения личного или профессионального характера.
Вкладка Computer дает участникам возможность изменять настройки своих рабочих станций. Такие изменения позволяют выбирать аппаратуру для совместной работы с обменом аудио- и видеоинформацией и вводить номера ISDN, города, страны и местные номера.
Средства администратора системы WELCOM созданы на основе языка HTML и рассчитаны на использование администраторами, не имеющими специальной подготовки. Эти средства интегрированы в модули WELCOM и требуют авторизованного доступа.
Администрирование новостей. Администраторы веб-узла добавляют и редактируют содержимое новостей. Новые материалы содержатся в испытательной области, пока они не утверждены для показа. С помощью средств администратора добавляются атрибуты к новым новостным материалам, в том числе URL-адреса на дополнительные материалы, мультимедийное вложение, срок действия, статус активности и ключевые слова. Администраторы управляют списками материалов, включая или исключая соответствующие элементы.
Администрирование событий. Администраторы веб-узла отвечают за планирование событий, отведение слотов для посещения событий и определение событий как широковещательных для всех участников, дискуссий для ограниченного числа участников или конфиденциальных закрытых событий.
Администрирование каталогов. Были разработаны средства для создания, удаления и изменения записей каталога об участниках и профилей участников. Эти средства позволяют администратору находить участника по имени, фамилии или по имени пользователя, по названию организации или страны или с помощью алфавитной панели.
Администратор может изменять данные профиля и перечень групп, к которым принадлежит участник, он должен регистрировать учетную запись нового пользователя (имя, пароль и группы) в базе данных членства, основанной на технологии LDAP, чтобы пользователь мог войти в систему и обновить свой профиль.
Система безопасности WELCOM описывается в соответствующих разделах данного документа. Ниже дается сводка этих данных.
Веб-серверы обрабатывают запросы HTTP, HTTPS и потоковые мультимедийные запросы на информационные ресурсы и услуги. В основе веб-узла лежит совместная работа участников, принадлежащих к избранной группе, для обеспечения безопасности необходима идентификации входящих в систему пользователей.
Устройство Big IP выполняет функции брандмауэра.
Веб-серверы со сдвоенными сетевыми платами изолируют сервер кластера.
Сервер Microsoft Site Server 3.0 обеспечивает проверку подлинности.
Права пользователей устанавливаются на основе модели пользователей и групп. Основные различия касаются администрирования веб-узла (пользователи – специалисты технической поддержки – администраторы). Пользователи системы могут обновлять основные данные в пределах своего профиля – такие как имя, должность, адрес, оборудование для видеоконференций и т.д. – и предоставлять их при помощи некоторой основной формы. Специалисты технической поддержки имеют дополнительные права, в том числе, права администрирования в модулях Events (События), Library (Библиотека) и Directory (Каталог). Пользователем высшего уровня является администратор – этот уровень дает все права на систему. Существуют следующие группы пользователей.
Public (Общая) – обычный пользовательский доступ к веб-узлу.
Concierge (Дежурный) – доступ технической поддержки включает управление в модулях Events (События), Library (Библиотека) и Directory (Каталог).
Editor (Редактор) – права редактирования и утверждения нового содержания.
Administrator (Администратор) – все права на веб-узел, включая применение всех административных средств.
Developer (Разработчик) – все права администратора, включая доступ к специальным отладочным модулям.
Компания USWeb/CKS, разработчик системы, столкнулась с двумя основными трудностями: 1) переход от системы на основе собственных стандартов к системе на основе открытых стандартов; 2) напряженный график работ, совпадающий с графиком главных событий форума. Чтобы их преодолеть, разработчики выбрали продукты корпорации Майкрософт, поддерживающие открытые стандарты и быструю разработку.
Применялись следующие средства разработки.
Microsoft Visual Interdev® 6.0 для разработок в среде HTML, DHTML, ASP и JavaScript.
Microsoft SQL Server 6.5 (SP 4.0) Enterprise Manager для реализации серверной части баз данных, хранимых процедур и триггеров.
Platinum ERWin Modeler для проектирования реляционной базы данных.
Visio Professional 5.0 для документирования системы.
Microsoft Visual Basic® 6.0 для разработки объектов ActiveX / COM.
Microsoft Internet Information Server 4.0 в качестве платформы веб-сервера.
Microsoft Site Server 3.0 (SP 1.0) для поддержки функций членства средствами технологии LDAP.
Microsoft Windows NT Server 4.0 (SP 3.0) в качестве операционной системы серверов.
Intel Business Video Conferencing для поддержки видеоконференций на основе открытых стандартов.
Программное обеспечение Artisans SA-Fileup 2.01 для функций загрузки файлов на веб-узел.
Блокнот Windows для общего редактирования текстов.
В решении WELCOM компания USWeb/CKS использовала различные технологии.
ASP (Active Server Pages 2.0).
ActiveX / COM (ADO, AOU, ADSI).
LDAP.
VBScript (Visual Basic Scripting Edition).
JavaScript.
DHTML.
Видеоконференции, совместимые со стандартами H.320 и H.323.
Стандарт конференций для работы с данными T.120.
Видеоконференции базируются на технологии IBVC (Intel’s Business Video Conferencing) компании Intel, в этой технологии был первоначально самостоятельно разработан компонент проведения видеоконференций.
Технология IBVC использует элементы управления ActiveX в качестве интерфейса оборудования. Это требует использования расширений <OBJECT> обозревателя Microsoft Internet Explorer для включения этих элементов в страницы HTML. Для реализации видеоконференций были разработаны три модуля на языке JavaScript®, выполняемые на стороне клиента.
Модуль Video Manager управляет сеансами видеоконференций с помощью передачи сообщений каждому модулю Video HAL независимо от типа используемого оборудования для конференций.
Модуль Video HAL (Video Hardware Abstraction Layer) обеспечивает интерфейс к элементам управления IBVC ActiveX. Для каждого типа устройств проведения конференций требуется свой модуль Video HAL.
Модуль Heartbeat реализует механизм опроса, который поддерживает активность сеанса в ходе широковещательных событий и опрашивает сообщения ведущего. Код модуля Heartbeat включает код VBScript, выполняющийся на сервере.
Примеры соответствующих программ для модулей Heartbeat, Video HAL и Video Manager см. в Приложении А в подразделе «Видеоконференции».
При входе участника в видеоконференцию модуль Video Manager получает идентификатор компьютера участника от объекта «cookie» на клиентском компьютере, загружает соответствующий модуль Video HAL и посылает сообщение для его инициализации. В случае успеха приложение продолжает нормальную работу и реализуется участие в видеоконференции. В случае отказа участник получает сообщение о том, что ему необходимо обновить свой профиль или проверить настройку оборудования.
Когда участник присоединяется к событию видеоконференции или покидает его, список участников события обновляется. Когда слово получает новый оратор и его выступление передается для других участников, элемент управления IBVC Remote Video посылает сообщение модулю Video Manager (через модуль Video HAL) о том, что участник изменился, и модуль Video Manager обновляет вывод профиля Video UI.
Модуль Video HAL (Hardware Abstraction Layer) представляет собой набор интерфейсных модулей, отделяющих управление видеоконференцией от ее реализации. Для устройств видеоконференций, использующих технологию IBVC, это управление реализовано с помощью объектов ActiveX и их опубликованных методов. Для поддержки других видеосистем могут быть разработаны дополнительные модули Video HAL без изменения структуры модуля Video Manager.
Профиль участника содержит тип его видеосистемы. Соответствующий модуль Video HAL для данного участника загружается, когда участник входит в сеть.
Модуль Heartbeat реализует простой механизм опроса и периодически сам себя перезагружает. Поскольку видеоконференции выполняются по линиям ISDN, продолжительные периоды бездействия веб-сервера могут привести к прекращению сеанса из-за истечения времени, что потребует повторного входа пользователя в систему. Модуль Heartbeat, выполняя опрос, поддерживает активность сеанса.
Кроме того, модуль Heartbeat также проверяет наличие сообщений. Код модуля Heartbeat содержит выполняемый на сервере сценарий VBScript, который запрашивает очередь сообщений при каждой своей загрузке. Далее этот сценарий VBScript проходит по всем новым сообщениям и строит в возвращенной странице код JavaScript, который выполняет вызов функций для каждого сообщения. Примеры сообщений включают элементы управления, с помощью которых ведущий события может выполнить операции Mute (Отключить звук), Unmute (Включить звук) и Hang-up (Приостановить), управляющие работой участников события (см. ниже раздел «События»).
На приведенной ниже схеме показана структура страницы вызова видеоконференции. Описание стандартного набора кадров системы WELCOM см. в разделе «Архитектура приложения» в подразделе «Модуль Authorization».
Модули Remote Video (Удаленное видео) и Local Video (Локальное видео) отображаются во встроенных кадрах. В кадре Remote Video отображаются участники разговора, в кадре Local Video отображается видеоизображение локального участника. Каждый из модулей Remote Video и Local Video содержит элемент управления ActiveX технологии IBVC и логически является частью модуля Video HAL. Модуль Video Manager обращается к модулю Video HAL для управления оборудованием конференции и к модулю Video UI для управления отображением.
Кнопки Call (Вызов), Mute (Отключить звук) и Volume (Громкость) являются частью главного кадра. Кнопка Call (Вызов) инициирует вызов на видеосвязь. Кнопка Mute (Отключить звук) останавливает передачу аудио- и видеоинформации. Элемент управления Volume (Громкость) задает громкость звука.
Структура страницы Video Call
Пример страницы Call Page
Сотрудник дежурной службы задает новое событие видеоконференции с помощью таблицы Events (События), содержащей код события, вид события, количество участников, типы участников, имя ведущего этого события и другие сведения описательного характера. Связанная с таблицей Events таблица Event_slots определяет слоты MCU на указанную дату, время и число участников. Компания, управляющая устройством MCU, предоставляет номер ISDN для каждого слота.
Таблицы Events и Event_slots управляются с помощью административных средств WELCOM. На приведенной ниже схеме показаны свойства и отношения.
Таблицы событий
Участникам, регистрирующимся со страницы Events (События), назначается следующий свободный слот для выбранного типа вызова (аудио или видео). Примеры соответствующих программ см. в Приложении А в подразделе «События».
Группа разработчиков решила применять проверку подлинности в масштабе веб-узла, чтобы пользователи не могли избежать процесса входа в систему. Модель Microsoft Site Server 3.0 Membership дает привлекательное решение интеграции веб-сервера и проверки подлинности вместо применения кода к каждой странице, на которую происходит перенаправление. При помощи сервера Microsoft Site Server 3.0 защищены все страницы, изображения и ресурсы в пределах веб-узла.
Для добавления и удаления участников разработчики применили обращения к базе данных LDAP. Из соображений быстродействия доступ был ограничен именем пользователя, паролем и группами.
Данные о профиле участника хранятся в таблицах Microsoft SQL Server 6.5, используемых после предоставления доступа. Профиль участника содержит как личную информацию, так и сведения о компьютере участника и может быть изменен согласно потребностям участника.
Участники событий имеют сведения о других участниках тех же событий. Участник может посмотреть, кто подключен к сети, и послать вызов. Участнику, принимающему вызов, видно, кто его вызывает. Участники, использующие не свои компьютеры с видеосредствами, могут перенаправить вызовы к своему временному местонахождению.
Данные профиля распределены между таблицами ldap_data (это база данных приложения, а не база данных LDAP) и machine_profile, хранящимися на сервере Microsoft SQL Server 6.5. Профиль компьютера включает в себя подмножество данных, включенных также в профиль участника.
В данной структуре профиль основного компьютера участника хранится вместе с профилем участника, кроме того, в нем содержится объект «cookie», содержащий код GUID компьютера, определяющий компьютер независимо от того, кто на нем работает. Это позволяет системе поддерживать перемещающихся пользователей. Чтобы дать возможность связаться с участником, находящимся не за своим компьютером, в приложении используется временный профиль входа (wholist) для отслеживания подключенных участников и их текущего профиля компьютера. Эти отношения показаны ниже.
Таблицы профилей
Таблица ldap_data содержит поле «lastVisit» (последнее посещение), используемое в рабочем пространстве «Welcome» (в строке приветствия). Примеры соответствующих программ см. в Приложении А в подразделе «Workspace».
Таблица wholist содержит поле «gmt_offset». Все данные хранятся в среднем времени по Гринвичу и для отображения пересчитываются в местное время компьютера. Этот пересчет показан в следующих фрагментах кода.
function GetGMTOffset()
{
var minsGMT_offset = new Date().getTimezoneOffset()
return minsGMT_offset;
}
intGMT = GetSessionVar("GMTOFFSET")
' Пересчет местного времени сервера во время по Гринвичу
strDateNowGMT = DateAdd("n", GetGMTOffset(), now())
' Пересчет в местное время пользователя для отображения
strRs_startDate = DateAdd("n", -intGMT, strRs_startDateGMT)
Для вызовов «точка-точка» профиль второго участника загружается: 1) немедленно – для исходящих вызовов и 2) после ответа абонента – для входящих вызовов.
При входе в систему участники просматривают страницу Workspace (Рабочее пространство), чтобы быстро ознакомиться с последними новостями и быть в курсе запланированных событий. События, на которые подписан участник, отображаются в виде напоминания.
При построении страницы Workspace применяется последовательное обращение к модулям, отвечающим за каждую из областей страницы. Эта страница не содержит набора кадров – каждая из областей помещается в ячейку таблицы. В приветствии вверху страницы отображается имя участника и время его последнего входа в систему.
В личном каталоге отображается состояние подключения участников, с которыми часто устанавливается контакт; для этого не требуется поиск в модуле Directory (Каталог). Личный каталог строится на основе таблицы профилей, таблицы «Buddy List» (Список друзей) и таблицы «Who List» (Кто в сети) (для выяснения состояния подключения). Когда участник выходит из сети, поле «lastVisit» (последнее посещение) в таблице профиля обновляется, и его содержимое выводится при следующем входе в систему. Примеры программ приведены в Приложении А.
Списки событий составляются в виде строк таблицы при помощи последовательных вызовов модулей. Область «about WELCOM» (о системе WELCOM) содержит явные ссылки HTML.
Необходимость срочного создания прототипов для получения отзывов от пользователей привела к модульному построению системы, которое позволяет разработчикам быстро модернизировать веб-узел путем замены компонентов. Такое построение позволяет включать и выключать компоненты, обновлять набор функций и менять язык и структуру узла без необходимости вносить соответствующие изменения во многие файлы приложений.
Областями наиболее частого изменения были модули приложений высокого уровня, обработка низкого уровня и структура интерфейса. Веб-узел может быть быстро изменен тремя способами: добавление и удаление модулей, изменение графики и изменение текста и тегов HTML, которые определяют вид веб-страницы.
Добавление новых модулей никак не затрагивает вызывающие модули. Это делается путем использования библиотек функций и процедур низкого уровня. Удаление модуля выполняется простановкой символов комментария в коде, который вызывает этот модуль. При этом удаляется также и ссылка на этот модуль из левой навигационной панели.
Большая часть графических изменений выполнялась методом поэлементной замены существующей графики во избежание существенных изменений в других графических элементах. Поэтому новые элементы графики должны по размеру и наименованию соответствовать заменяемым элементам графики.
Файл APP_HTML.txt содержит используемые на узле теги HTML, включая цвета, используемые в теле страниц, цвета ссылок и таблиц, структуру ячеек и форматы элементов управления. Изменения этого файла влияют на внешний вид узла в целом.
Разработчики или администраторы узла могут также вносить изменения в файл Strings.txt, содержащий статический текст узла, в том числе надписи на элементах управления, инструкции, предупреждения и сообщения.
Дальнейшие пояснения и примеры соответствующих программ см. в Приложении А в подразделе «Модули настройки».
Сроки разработки для начальных фаз казались нереальными, и код многократно переписывался. Когда реализация фазы 1 стабилизировалась, разработчики спроектировали приложение с модульной структурой. Затраченные на этом этапе силы и время привели к созданию набора повторно используемых компонентов, позволяющих быстро изменять приложение, успевая за темпом предъявления требований и сокращая объем работы по переделке компонентов.
Стандарты кодирования и проектирования облегчили разработчикам чтение и понимание кода, написанного их коллегами. Эти стандарты включают следующее.
Общее соглашение относительно имен.
Общая структура сценариев (где в пределах страницы размещать код серверной и клиентской сторон).
Общие методы перечисления записей и наборов данных.
Общие местоположения для файлов (файлов изображений, файлов include, библиотек и т.д.).
Общие методы обработки ошибок.
Общие программы доступа к данным.
Использование глобальных переменных.
В связи с различиями между разными обозревателями следует помещать как можно больший объем кода на серверной стороне, не жертвуя быстродействием. На клиенте размещается только основной код проверки, выполняемый в основной форме. Функции клиента должны быть реализованы с помощью сценариев на языке JavaScript, а не элементов управления ActiveX. Элементы управления ActiveX, выполняемые на стороне клиента, требуются только для функций системы WELCOM по осуществлению видеоконференций. Все прочие элементы управления ActiveX на клиенте были удалены в процессе переписывания кода с целью поддержки более широкого класса обозревателей. Для программ, выполняемых на сервере, рекомендуется использование объектов COM для увеличения быстродействия и инкапсуляции бизнес-правил в повторно используемые компоненты.
Последовательное уточнение требований – это основной процесс. Придерживаться методологии, предусматривающей подобные итеративные циклы – это хорошая практика. Однако чтобы довести проект до завершения, необходим четкий механизм порядка внесения изменений. В противном случае требования просто расползаются, поскольку заказчик все время меняет свое мнение, что-то уточняет и постоянно уговаривает внести то или иное крошечное изменение.
Компонент фильтра ISAPI собственной разработки предусматривается для проверки подлинности в масштабе веб-узла, реализующей модель членства непосредственно в системе Microsoft SQL Server 6.5.
Ключевые компоненты и логика приложения будут перенесены на объекты COM серверной стороны, что увеличит модульность, эффективность и масштабируемость системы.
Дополнительные компоненты Video HAL обеспечат поддержку дополнительного оборудования для видеоконференций. Уже ведется разработка модуля Video HAL для PictureTel и планируется разработка для Microsoft NetMeeting 3.0. Ожидается, что добавление Microsoft NetMeeting 3.0 для конференций по стандарту H.323 (TCP/IP) улучшит доступ к системе WELCOM благодаря подключению недорогих видеокамер, используемых обычно с переносными компьютерами.
Компонент конференций для работы с данными, использующий Microsoft NetMeeting 3.0, может с помощью модели COM объединить этот продукт с системой WELCOM. Знакомство участников WELCOM с системой облегчит применение доски, разговора, а также совместного использования приложений и документов. В настоящий момент Microsoft NetMeeting запускается технологией IBVC автоматически для поддержки стандарта T.120, но является автономно работающим приложением.
Выполняемое приложение Listener (Слушатель) будет загружаться с веб-узла и само себя устанавливать в качестве панели задач, которая перезагружается каждый раз при перезапуске клиентского компьютера. Все видеомодули, работающие на клиентской стороне (Heartbeat, Video HAL и Video Manager), включая элементы управления ActiveX, могут быть перенесены в приложение Listener. Приложение Listener будет взаимодействовать с обозревателем Интернета посредством приложения Java.
В этом случае участник сможет принимать входящие вызовы, определять вызывающего и тип вызова без необходимости открывать обозреватель или быть в этот момент подключенным к веб-узлу. Приложение будет загружаться быстрее, и участники смогут входить в систему и выходить из нее без необходимости перезагрузки компонентов поддержки конференций.
В систему WELCOM предполагается включить потоки новостей от независимых агентств, например, Reuters, Business Wire и Associated Press.
Поточные обсуждения позволяют участникам сотрудничать в группах подписчиков по различным темам. Подписавшись на поток, участник будет получать по электронной почте уведомления при поступлении новых статей или откликов. Отклики будут должным образом помещаться в поточные обсуждения.
Участники имеют возможность извещать других подписчиков потока по приоритетным вопросам, а также получать извещения при появлении материалов в определенных потоках. При помещении участником оповещения все остальные подписчики данного потока получат извещение по электронной почте. Автор оповещения получит по электронной почте извещения об откликах.
Программа установки автоматизирует и упростит настройку новых серверов, что уменьшит число ошибок и сэкономит затрачиваемое персоналом время.
Поддержка участников форума будет расширена следующими услугами.
Идентификация вызывающего. Идентификация вызывающего до ответа на вызов и извлечение сведений из базы данных WELCOM.
Улучшение маршрутизации вызова. Улучшенные алгоритмы, гарантирующие, что обращение к сотруднику дежурной службы будет выполнено как можно более быстро и надежно.
Автоматический вызов по пейджеру сотрудника дежурной службы. Предусмотрены серверные средства, которые будут вызывать по пейджеру сотрудника дежурной службы в тех случаях, когда участник попытается обратиться к дежурной службе, но ни один из сотрудников не будет свободен.
Добавленный к процедуре входа и другим избранным страницам протокол SSL повысит степень безопасности.
В системе WELCOM используются переменные приложения и глобальные словари для создания модульного кода, управляемого данными. Код навигационной панели демонстрирует автоматическое создание текстов в формате HTML.
Переменные приложения хранятся с помощью объекта «Application» сервера IIS.
Sub SetAppVar(key, value)
Application.lock
Application(ucase(key)) = value
Application.unlock
End Sub
Первая переменная приложения «root» обеспечивает переносимость приложения.
sub AppInit
dim path, filename
filename = "global.asa"
path = Server.MapPath(filename)
path = left(path, len(path) – len(filename))
call SetAppVar("root", path)
end sub
Значения из реестра считываются в переменные приложения с веб-сервера. Таким образом обеспечивается инициализация переменных без необходимости непосредственного кодирования, использования INI-файла или обращения к базе данных.
На каждом веб-сервере должны быть сделаны следующие записи реестра в кусте HKEY_Local_Machine/Software/USWebDC/имя_клиента:
strRegKey = AppGetRegKey() 'возвращает "Welcom"
Set oRegistry = Server.CreateObject("IISSample.RegistryAccess")
w3Params = "HKEY_LOCAL_MACHINE\Software\USWebDC\" & strRegKey & "\"
Call SetAppVar("RegKey", w3Params)
Call SetAppVar("AppName", oRegistry.Get(w3Params & "APPNAME"))
Система WELCOM использует следующие три глобальных словаря.
· Text Strings – «Language Dictionary» (Языковой словарь) для текстовых элементов HTML.
· HTML Strings – код HTML для стилей и структурных элементов.
· ModulesDict – модули для уровня безопасности текущего пользователя.
Эти словари объявляются следующим образом:
<OBJECT RUNAT=SERVER SCOPE=Application ID=имя_словаря PROGID="Scripting.Dictionary"></OBJECT>
Этот словарь содержит неизменный текст, выводимый в пределах веб-узла. Записи словаря включают сообщения, запросы, имена полей, имена ссылок и текстовые описания, используемые на страницах HTML. Эти записи могут применяться глобально или использоваться отдельными модулями. Словарь упрощает управление, уменьшая объем явным образом кодированного текста и создавая единый пункт для изменений; кроме того, в будущих версиях станет возможным отображение разноязычных текстов. Словарь также содержит удобные средства просмотра атрибутов и методов модулей.
Полный список текстовых строк хранится в едином текстовом файле со снабженными комментариями разделителями; в словаре содержатся пары «ключ-значение». Ниже приводится образец текстового файла и пример вызова.
//Глобальные переменные, используемые всеми модулями
globalFirstName == First Name
globalMiddleInitial == Middle Initial
globalLastName == Last Name
<tr>
<td align=right><%= GetHTML("lstColMidRegTx")%><%= GetString("globalLastName")%></font></td><td width="30"> </td>
<td><%= GetHTML("lstColMidRegTx")%><input type="TEXT" name="sn" maxlength="32" value="<%= trim(oDictProp("sn")) %>" size="40"></font><%isrequired(1)%></td>
</tr>
В этом словаре хранятся теги HTML веб-узла, пары «переменная-значение», определяющие стиль структуры общих страниц. Сюда включаются глобальные настройки стиля по умолчанию, настройки стиля для компонентов таблиц и списков, стили шрифтов текста, цветов и фоновых изображений. Стили списков и таблиц включают текст заголовка, текст надписей, вкладки (ссылки) и тело. Эти записи словаря создают единообразный интерфейс в пределах веб-узла и упрощают управление веб-узлом.
Полный список строк HTML хранится в едином текстовом файле со снабженными комментариями разделителями; в словаре содержатся пары «ключ-значение». Ниже приводится фрагмент такого текстового файла и пример вызова.
// список семейства middle
lstColMidTitleTx == <font face="arial" size="6" color="#ffffff">
lstColMidTitleBg == BGCOLOR="#336699"
lstColMidEntryTx == <font face="arial" size="2"><b>
lstColMidBlurbTx == <font face="arial" size="2">
lstColMidRegTx == <font face="arial" size="2">
lstColMidRegTxsm == <font face="arial" size="1">
lstColMidBody == <body bgcolor="#ffffff" link="#000000" vlink="#000000" alink="#000000" text="#000000" leftMargin="20" topMargin="1">
<tr>
<td align=right><%= GetHTML("lstColMidRegTx")%><%= GetString("globalLastName")%></font></td><td width="30"> </td>
<td><%= GetHTML("lstColMidRegTx")%><input type="TEXT" name="sn" maxlength="32" value="<%= trim(oDictProp("sn")) %>" size="40"></font><%isrequired(1)%></td>
</tr>
Каждый модуль соответствует варианту навигационной панели (см. ниже раздел «Навигационная панель»). Данные настройки хранятся в файле interface.txt в подкаталоге каждого модуля. Этот файл должен быть доступен на уровне безопасности текущего пользователя.
Файл interface.txt содержит следующие ключи:
[module]
name=имя модуля, который будет использован в приложении
url=URL-адрес файла, который загружается в качестве начальной точки данного модуля
groups=разделенный запятыми список групп, имеющих доступ к данному модулю
caption=подпись под изображением
[normal]
image=имя и расширение имени файла графики, используемой для обозначения обычного состояния кнопки навигационной панели
[highlighted]
image=имя и расширение имени файла графики, используемой для обозначения выделенного состояния кнопки навигационной панели
Образец файла interface.txt:
[module]
name=Profile
url=editinfo.asp
groups=administrators,concierges,public
caption=User profile
[normal]
image=nav_profile.gif
[highlighted]
image=nav_profileOn.gif
Словарь «ModulesDict» строится следующим образом:
call ModulesDetect("framework/modules") 'читать модули структуры
call ModulesDetect("/localmodules") 'читать локальные модули
Sub ModulesDetect(strDirectory)
dim fs, folders, subfolders, f, textstream, filename
Set fs = CreateObject("Scripting.FileSystemObject")
Set folders = fs.GetFolder(server.MapPath(strDirectory))
Set subfolders = folders.SubFolders
for each f in subFolders
filename = f.path & "\interface.txt"
if fs.FileExists(filename) then
set textstream = fs.OpenTextFile(filename, 1, -2)
call ParseModuleInterface(strDirectory & "/" & f.name , textstream)
textstream.close
end if
Next
Set fs = Nothing
Set folders = Nothing
Set subfolders = Nothing
end sub
Процедура «ParseModuleInterface» читает и разбирает переданный ей файл interface.txt и строит словарь:
if (ModuleName<>"") then
if not ModulesDict.exists(modulename) then
call ModulesDict.add(ModuleName, PropertyDict)
end if
end if
При инициализации навигационной панели строится словарь модулей для отображения. Если поддерживаются возможности DHTML, используется подсветка навигационной панели.
Set NavbarModuleList=CreateObject("Scripting.Dictionary")
bIsDHTML = BrowserIsDHTML()
Каждый модуль, предназначенный для работы в данном приложении, добавляется к словарю и отображается следующим образом:
Call NavbarUseModule("profile")
Sub NavbarUseModule(ModuleName)
ModuleName=trim(ucase(ModuleName))
if NavbarModuleList.Exists(ModuleName) = false then
NavbarModuleList.Add ModuleName, ModuleName
end if
end sub
Sub NavBarDraw
response.write "<HTML>" & vbcrlf
response.write "<HEAD>" & vbcrlf
response.write " <META NAME=""GENERATOR"" Content=""Microsoft Visual Studio 6.0"">" & vbcrlf & vbcrlf
Call NavbarCreateRollOverScript()
response.write vbcrlf & "</HEAD>" & vbcrlf & vbcrlf
if strBGColor <> "" then
response.write "<BODY" & imgbackground & " topmargin=0 leftmargin=0 bgcolor=""" & strBGColor & """>" & vbcrlf
else
response.write "<BODY" & imgbackground & " topmargin=0 leftmargin=0>" & vbcrlf
end if
If imglogo <> "" then
response.write "<img src=""" & imglogo & """>"
end if
Call NavBarShowModules
response.write " </BODY>" & vbcrlf
response.write "</HTML>" & vbcrlf
End Sub
Членство в группах безопасности проверяется на этапе выполнения процедурой «NavBarShowModules» путем следующего вызова:
MembershipCheckModuleRights(moduleName)
Эта функция возвращает логическое значение и вызывает следующую функцию:
Function NavBarGetModuleGroups(module)
Dim ModuleObj, Groups
Groups = null
if ModulesDict.Exists(module)= true then
if isObject(ModulesDict(module)) then
Set ModuleObj = ModulesDict(module)
If ModuleObj.Exists("MODULE.GROUPS") then
Groups = ModuleObj("MODULE.GROUPS")
End if
end if
end if
NavBarGetModuleGroups = groups
Set ModuleObj = Nothing
End Function
Если в обозревателе поддерживаются возможности DHTML, добавляется дополнительный код, как показано в следующем примере. Первая функция вызывается из процедуры «NavBarDraw», а вторая является фрагментом процедуры «NavBarShowModules».
Sub NavbarCreateRollOverScript
if bIsDHTML = false then exit sub
Response.Write " <" & "Script Language=javascript>" & vbcrlf
Response.Write " function mouseIn(x) { " & vbcrlf
Response.Write " x.style.filter=""" & RollOverfilter & """" & vbcrlf
Response.Write " }" & vbcrlf
Response.Write " function mouseOut(x) { " & vbcrlf
Response.Write " x.style.filter=""" & normalfilter & """" & vbcrlf
Response.Write " }" & vbcrlf
Response.Write " function imgOn(x) { " & vbcrlf
Response.Write " document[x].style.visibility = ""visible"";"
Response.Write " }" & vbcrlf
Response.Write " function imgOff(x) { " & vbcrlf
Response.Write " document[x].style.visibility = ""hidden"";"
Response.Write " }" & vbcrlf
Response.Write " <" & "/Script>" & vbcrlf
End Sub
if bIsDHTML then
strTextDiv = "id=nav" & i & " style=""width:" & iNavBarWidth & "; filter="& normalfilter & ";"" onmouseover=""mouseIn(nav" & i & ")"" onmouseout=""mouseOut(nav" & i & ")"""
strImgDiv = "id=nav""" & i & """ onMouseOver=""imgOn('ImgOn" & i & "')"" onMouseOut=""imgOff('ImgOn" & i & "')"" STYLE=""position:relative;top:0;left:0"""
strImg1Style = "name=ImgOff" & i & " STYLE=""visibility:visible;left:0;top:0"""
strImg2Style = "name=ImgOn" & i & " STYLE=""visibility:hidden;position:absolute;left:0;top:0"""
end if
Все компоненты страницы Workspace вызываются последовательно. Ниже показаны коды для страниц Welcome (Приветствие) и Personal Directory (Личный каталог). Коды для страниц Headlines (Заголовки) и Events (События) аналогичны.
'Описания переменных
…
'Создать объект словаря
Set dctLDAP = Server.CreateObject("Scripting.Dictionary")
'Получить имя пользователя
sUser = MembershipGetUsername()
'Теперь подготовить словарь требуемых полей
dctLDAP.Add "salutation", CStr("")
dctLDAP.Add "givenname", CStr("")
dctLDAP.Add "othername", CStr("")
dctLDAP.Add "sn", CStr("")
dctLDAP.Add "LastVisit", CStr("")
'Теперь получить данные
Call MembershipGetUser(sUser, dctLDAP)
If Len(Trim(dctLDAP.Item("othername"))) > 0 Then
sUserName = dctLDAP.Item("salutation") & " " & _
dctLDAP.Item("givenname") & " " & _
Left(dctLDAP.Item("othername"),1) & ". " & _
dctLDAP.Item("sn")
Else
sUserName = dctLDAP.Item("salutation") & " " & _
dctLDAP.Item("givenname") & " " & _
dctLDAP.Item("sn")
End If
dtLastLogonServer = dctLDAP.Item("LastVisit")
If ISNULL(dtLastLogonServer) OR Len(Trim(dtLastLogonServer)) = 0 Then
sLastLogon = ""
Else
iClientGMTOffset = GetSessionVar("GMTOFFSET")
iServerGMTOffset = GetGMTOffset()
dtLastLogonGMT = DateAdd("n", iServerGMTOffset, dtLastLogonServer)
dtLastLogonLocal = DateAdd("n", -iClientGMTOffset, dtLastLogonGMT)
sLastLogon = "You last logged in on " & FormatDateTime(dtLastLogonLocal,vblongdate) '& " " & FormatDateTime(dtLastLogonLocal,vblongtime)
End If
'Теги HTML для отображения
<font color="#999999" face="Verdana, Arial, Helvetica, sans-serif" size="2">
<b>Welcome <%=sUserName%>.</b> <%=sLastLogon%>
</font>
Function MembershipGetUser(ByVal sUsername, ByRef dictProperties)
On Error Resume Next
'Описание переменных
…
ReDim sKeys(dictProperties.Count)
'Инициализация для случая отрицательного результата проверки
MembershipGetUser = False
'Установить локальные массивы на ключи и элементы словаря
sKeys = dictProperties.Keys
'Пройти по локальным массивам и прочесть каждое свойство
For iX = 0 To dictProperties.Count – 1
If iX = 0 Then
sTempSelect = sKeys(iX)
Else
sTempSelect = sTempSelect & ", " & sKeys(iX)
End If
Next
sConnect = GetAppVar("ConnectionString") & _
";uid=" & GetAppVar("RuntimeUserName") & _
";pwd=" & GetAppVar("RuntimePassword")
'Задать оператор SQL Select
sSQL = "SELECT " & sTempSelect & " FROM ldap_data WHERE cn = '" & sUserName & "'"
set rsUser = Server.CreateObject("ADODB.Recordset")
rsUser.Open sSQL, sConnect
if isObject(rsUser) then
'Пройти по локальным массивам и прочесть каждое свойство
For iX = 0 To dictProperties.Count – 1
If VarType(dictProperties.Item(sKeys(iX))) = vbInteger Then
dictProperties.Item(sKeys(iX)) = CInt(rsUser(sKeys(iX)))
Else
dictProperties.Item(sKeys(iX)) = CStr(rsUser(sKeys(iX)))
End if
Next
End If
'Успешно
MembershipGetUser = True
rsUser.Close
set rsUser = nothing
End Function
SUB display_members
DIM strConnect, cn2, varRecords, strCommand
Dim newLibtitle, newLibid, cntA
Set cn2 = Server.CreateObject("ADODB.connection")
Set varRecords = server.CreateObject("ADODB.RecordSet")
strConnect = GetAppVar("ConnectionString") & _
";uid=" & GetAppVar("RuntimeUserName") & _
";pwd=" & GetAppVar("RuntimePassword")
Следующие три оператора открывают набор записей, который должен быть отображен.
cn2.Open strConnect
strCommand = "s_GetWorkspaceMembers '" & MembershipGetUsername & "'"
varRecords.Open strCommand, cn2
if varRecords.BOF AND varRecords.EOF then
Response.Write "<br><font face=arial size=1 color=blue>There are currently no members in your Personal Directory.<br>To add someone to your Personal Directory, please go to the Directory, select a member, and click on 'Add to Personal Directory'.</font>"
varRecords.Close
set varRecords = nothing
cn2.Close
set cn2 = nothing
exit sub
end if
Response.Write "<table border=0 cellspacing=2 cellpadding=0>"
do until varRecords.EOF
%>
<tr>
<td align="left" width="8%">
<%if varRecords("loggedon") = 1 then%>
<img src="/images/active_check.gif"></td>
<td align="left" width="*"><%=getHTML("tabDetBotRegTx")%><b>
<%else%>
</td>
<td align="left" width="*"><%=getHTML("tabDetBotRegTx")%>
<%end if%>
<a href="/framework/modules/directory/DirDetail.asp?username=<%=varRecords("username")%>" target="BODY"><%=varRecords("name")%></a></b></font></td>
</tr>
<%
varRecords.MoveNext
loop
%>
</table>
<%
varRecords.Close
set varRecords = nothing
cn2.Close
set cn2 = nothing
END SUB
CALL display_members
%>
cn2.Open strConnect
strCommand = "s_GetWorkspaceMembers '" & MembershipGetUsername & "'"
varRecords.Open strCommand, cn2
If Exists (Select * From sysobjects Where name = 's_GetWorkspaceMembers' And user_name(uid) = 'dbo')
Drop Procedure dbo.s_GetWorkspaceMembers
Go
CREATE PROCEDURE s_GetWorkspaceMembers
@username varchar(32)
AS
select l.cn as username,
(l.givenname + ' ' + l.sn) as name,
l.mail,
1 as loggedon,
l.sn,
l.givenName
from ldap_data l
where l.cn IN (select buddy from buddy_list where owner = @username) AND
l.cn IN (select username from wholist where username IN (select buddy from buddy_list where owner = @username))
UNION
select l.cn as username,
(l.givenname + ' ' + l.sn) as name,
l.mail,
0 as loggedon,
l.sn,
l.givenName
from ldap_data l
where l.cn IN (select buddy from buddy_list where owner = @username) AND
l.cn NOT IN (select username from wholist where username IN (select buddy from buddy_list where owner = @username))
ORDER BY loggedon DESC, sn, givenName
Go
Модуль Heartbeat поддерживает активность широковещательных сеансов и проверяет наличие сообщений, посылаемых ведущим.
<script language=vbscript runat=server>
dim dtTimeStamp
'-----------------------------------------------------
sub main()
dim oConnection, oRecordSet, strSQL, sUsername
dtTimeStamp = null
sUsername = MembershipGetUsername()
set oConnection = adoSQLShortConn()
call adoSQLGetRecordset(oRecordSet, "select * from message_que where (Destination_cn='" & sUsername & "') order by timestamp", oConnection, adOpenDynamic, adLockPessimistic)
Response.Write vbcrlf
call adoSQLEnumRecs(oRecordSet)
if not isnull(dtTimeStamp) then
oConnection.execute "delete from message_que where (Destination_cn='" & sUsername & "') and (Timestamp<=" & dtTimeStamp & ")"
end if
oRecordSet.close
oConnection.close
set oRecordSet = nothing
set oconnection = nothing
end sub
'-----------------------------------------------------
function EnumRecsCallback(iCount, oRecordSet)
dim sSource_cn, sData
dtTimeStamp = oRecordSet("Timestamp").value
sSource_cn = oRecordSet("Source_cn")
if isnull(sSource_cn) then
sSource_cn=""
else
sSource_cn = replace(sSource_cn, """", "\""")
end if
sData = oRecordSet("Data")
if isnull(sData) then
sData = ""
end if
Response.Write vbtab & "SendMessage(" & oRecordSet("Message") & ", """ & sSource_cn & """, """ & sData & """)" & vbcrlf
EnumRecsCallback = true
end function
</script>
<HTML>
<HEAD>
<META NAME="GENERATOR" Content="Microsoft Visual Studio 6.0">
<script language="javascript">
function onHeartBeat()
{
self.location = "/framework/asp/MessageQueHeartbeat.asp"
}
function onLoad()
{
<%call main()%>
window.setTimeout("onHeartBeat()", 60000);
}
function SendMessage(msg, p1, p2, p3, p4)
{
return top.VIDEOMGR.OnMessage(self.name, msg, p1, p2, p3, p4)
}
</script>
</HEAD>
<BODY bgcolor=black onload="return onLoad();">
<P><font face=arial color=white size=2>Heartbeat <%=time()%></P>
</BODY>
</HTML>
Модуль Video HAL реализует интерфейс к элементам управления ActiveX технологии IBVC.
function OnMessage(strSource, msg, p1, p2, p3, p4)
call top.Trace("(" & strSource & "->" & self.name & ") = " & msg)
OnMessage = 0
select case (msg)
case <%=vcCLICKMUTE%>
if (bIsConfMgrLoaded = false) then exit function
call ToggleMute(p1)
case <%=vcSETVOLUME%>
case <%=vcGETVOLUME%>
case <%=vcCONFERENCEMANAGERGETSTATUS%>
case <%=vcHANGUP%>
case <%=vcDIALH320%>
case <%=vcDIALH323%>
case <%=vcCLICKPROFILE%>
case <%=vcSETBUSINESSCARD%>
case <%=vcSETAUTOANSWERMODE%>
case <%=vcLOCALVIDEOLOADED%>
case <%=vcLOCALVIDEOUNLOADED%>
case <%=vcREMOTEVIDEOLOADED%>
case <%=vcREMOTEVIDEOUNLOADED%>
case <%=vcVIEWEDPARTICIPANTCHANGED%>
case <%=vcOFFAIR%>
case <%=vcONAIR%>
case <%=vcLOCALVIDEOREADY%>
case <%=vcLOCALVIDEONOTREADY%>
case <%=vcREMOTEVIDEOREADY%>
case <%=vcREMOTEVIDEONOTREADY%>
case <%=vcLOCALVIDEONOTREADY%>
case <%=vcLOCALVIDEONOTREADY%>
case <%=vcLOCALVIDEOERROR%>
case <%=vcVIDEOMUTED%>
case <%=vcVIDEOUNMUTED%>
case <%=vcLOCALVIDEOREADY%>
case <%=vcREMOTEVIDEOMUTED%>
case <%=vcREMOTEVIDEOUNMUTED%>
end select
end function
'------------------------------------------
function SendMessage(msg, p1, p2, p3, p4)
SendMessage = 0
SendMessage = top.VIDEOMGR.OnMessage(self.name, msg, p1, p2, p3, p4)
end function
'---------------------------------
function SendRemoteVideoMessage(msg, p1, p2, p3, p4)
SendRemoteVideoMessage = -1
if bRemoteVideoLoaded = true then
SendRemoteVideoMessage = objRemoteVideoFrame.OnMessage(self.name, msg, p1, p2, p3, p4)
end if
end function
'---------------------------------
function SendLocalVideoMessage(msg, p1, p2, p3, p4)
SendLocalVideoMessage = -1
if bLocalVideoLoaded = true then
SendLocalVideoMessage = objLocalVideoFrame.OnMessage(self.name, msg, p1, p2, p3, p4)
end if
end function
Модуль Video Manager управляет интерфейсом и оборудованием IBVC путем посылки сообщений модулю Video HAL.
function OnMessage(strSource, msg, p1, p2, p3, p4)
{
var iStatus
//top.Trace("(" + strSource + "->" + self.name + ") = " + msg)
//-- СООБЩЕНИЯ ОТ HAL -----------------------------
if(msg==<%=vcAUDIOMUTED%>)
{
isMuted = true;
SendUIMessage(msg, null);
}
else if(msg==<%=vcAUDIOUNMUTED%>)
else if(msg==<%=vcVIEWEDPARTICIPANTCHANGED%>)
else if(msg==<%=vcVOLUMECHANGED%>)
else if(msg==<%=vcAUDIOMANAGERREADY%>)
else if(msg==<%=vcAUDIOMANAGERNOTREADY%>)
else if(msg==<%=vcAUDIOMANAGERERROR%>)
else if(msg==<%=vcCONFERENCEMANAGERERROR%>)
else if(msg==<%=vcCONFERENCEMANAGERNOTREADY%>)
else if(msg==<%=vcCALLCONNECTED%>)
else if(msg==<%=vcCALLDISCONNECTED%>)
else if(msg==<%=vcCALLFAILED%>)
else if(msg==<%=vcCONFERENCEMANAGERSTATUSCHANGED%>)
else if(msg==<%=vcBUSINESSCARD%>)
else if(msg==<%=vcHALLOADED%>)
else if(msg==<%=vcHALREADY%>)
else if(msg==<%=vcPARTICIPANTADDED%>)
else if(msg==<%=vcPARTICIPANTUPDATED%>)
else if(msg==<%=vcPARTICIPANTDELETED%>)
else if(msg==<%=vcONAIR%>)
else if(msg==<%=vcOFFAIR%>)
//-- СООБЩЕНИЯ ОТ СТРАНИЦ UI --------------
else if(msg==<%=vcVIDEOUILOADED%>)
{
VideoUILoadComplete()
}
else if(msg==<%=vcVIDEOUIUNLOADED%>)
else if(msg==<%=vcVIDEODETAILLOADED%>)
else if(msg==<%=vcVIDEODETAILUNLOADED%>)
else if(msg==<%=vcADDPHONEBOOKENTRY%>)
else if(msg==<%=vcCLEARPHONEBOOK%>)
else if(msg==<%=vcCLICKCALL%>)
else if(msg==<%=vcHANGUP%>)
else if(msg==<%=vcMUTE%>)
else if(msg==<%=vcUNMUTE%>)
else if(msg==<%=vcCLICKMUTE%>)
else if(msg==<%=vcCLICKVOLDOWN%>)
else if(msg==<%=vcCLICKVOLUP%>)
else if(msg==<%=vcCLICKPROFILE%>)
else if(msg==<%=vcCLICKEMAIL%>)
else if(msg==<%=vcCLICKREQUESTFLOOR%>)
else if(msg==<%=vcCLICKDIRECTORCTRL%>)
else if(msg==<%=vcGETHALSTATUS%>)
else if(msg==<%=vcHALFAILED%>)
else if(msg==<%=vcLOADVIDEO%>)
else if(msg==<%=vcPHONEBOOKLOADED%>)
else if(msg==<%=vcINSTANTMESSAGE%>)
return 0
}
//---------------------------------
function SendHALMessage(msg, p1, p2, p3, p4)
{
if (bVideoHALLoaded == false) return -1;
return top.VIDEOHAL.OnMessage(self.name, msg, p1, p2, p3, p4)
}
//---------------------------------
function SendUIMessage(msg, p1, p2, p3, p4)
{
if (bVideoUILoaded == false) return -1;
return top.BODY.CONFTOP.OnMessage(self.name, msg, p1, p2, p3, p4)
}
//---------------------------------
function SendUIDetailMessage(msg, p1, p2, p3, p4)
{
if (bVideoDetailLoaded == false) return -1;
return top.BODY.CONFBOTTOM.OnMessage(self.name, msg, p1, p2, p3, p4)
}
Видеоинтерфейс ведущего позволяет передавать немедленные сообщения на страницу Heartbeat участника. Страница Heartbeat пересылает такое сообщение модулю Video Manager. Модуль Video Manager реализует работу с немедленными сообщениями показанным ниже способом.
function InstantMessage(strSource, strMessage)
{
open("/framework/modules/visit/ModeratorCtrls/InstantMessage.asp?cn=" + strSource + "&Msg=" + strMessage, "INSTANTMSG"+iInstantMessageCount, "height=280,width=420,toolbar=0,location=0,menubar=0,status=0,directories=0,scrollbars=1,resizable=0")
iInstantMessageCount++
}
InstantMessage.asp
<%@ Language=VBScript %>
<%
option explicit
Response.Expires = 0
Response.AddHeader "Pragma","no-cache"
%>
<script language=vbscript runat=server>
dim sFullname, sUsername, sMessage
sub main()
sUsername = Request.QueryString("cn")
sMessage = Request.QueryString("Msg")
sMessage = server.htmlencode(sMessage)
sMessage = replace(sMessage, vbNewLine, "<br>")
sFullname = sUsername
end sub
</script>
<%call main()%>
<HTML>
<HEAD>
<META NAME="GENERATOR" Content="Microsoft Visual Studio 6.0">
<Title>Instant message</Title>
</HEAD>
<BODY topmargin=0 bgcolor=white>
<FONT face=Arial color=navy><STRONG>Instant message</STRONG></FONT>
<HR>
<FONT face=Arial size=2><b>From: <%=sFullname%></b><br><br>
<text>
<%=sMessage%>
</text>
</BODY>
</HTML>
Следующая функция определяет, есть ли у события свободный открытый слот. Она вызывается страницей событий при регистрации участника.
function hasOpenSlot(intEventid, byval conn)
dim rs, strConnect, strSql, boolRtn
strConnect = GetAppVar("ConnectionString") & _
";uid=" & GetAppVar("RuntimeUserName") & _
";pwd=" & GetAppVar("RuntimePassword")
strSql = "select slot_id from event_slots where event_id=" & intEventid & " and user_id=''"
Set rs = Server.CreateObject("ADODB.recordset")
rs.Open strSql, conn, adOpenForwardOnly, adLockReadOnly
if rs.EOF then 'no records, no open slots
boolRtn = false
else
boolRtn = true
end if
rs.Close
set rs = nothing
hasOpenslot = boolRtn
end function
Следующая функция вызывается, когда участник щелкает ссылку «Register» (зарегистрироваться), чтобы записаться на участие в событии.
Sub EventRegister(Event_ID, strUserName, strRegisterType)
Dim strSQLQuery, oListRS, nSlotID, strCalltype_id
if strRegisterType = "VIDEO" then
strCalltype_id = "1"
else
strCalltype_id = "2"
end if
strSQLQuery = "SELECT MIN(slot_id) AS Slot_ID FROM event_slots" _
& " WHERE (User_ID='') AND (Event_ID=" & Request("Event_ID") & ") and (calltype_id=" & strCalltype_id & ")"
Call adoSQLQuickRecordSet(oListRS, strSQLQuery)
nSlotID = oListRS("Slot_ID").value
strSQLQuery = "UPDATE event_slots Set User_ID='" & Session("USERNAME") & "' WHERE (Slot_ID=" & nSlotID & ")"
Call adoSQLQuickRecordSet(oListRS, strSQLQuery)
End Sub
<script language=vbscript runat=server>
dim strRows, bDualFrames
sub main()
strRows = "105,*"
bDualFrames = false
if GetAppVar("UseTwoPanels") <> 0 then
strRows = "105,*,*"
bDualFrames = true
end if
end sub
</script>
<%call main()%>
<html>
<%= GetString("Copyright")%>
<head>
<meta NAME="GENERATOR" Content="Microsoft Visual InterDev 6.0">
<meta HTTP-EQUIV="Content-Type" content="text/html; charset=iso-8859-1">
<title><%= getString("dirTitle") %></title>
</head>
<frameset rows="<%=strRows%>" frameborder=0 border=0 framespacing=0>
<frame src="DirMenu.asp?view=all" name="DIRMENU" scrolling="no" border=0 marginwidth=1 marginheight=0>
<frame src="blank.asp" name="DIRLIST" scrolling="auto" border=0 marginwidth=0 marginheight=0>
//возможность настройки с выводом сведений или без него
<%if GetAppVar("UseTwoPanels") <> 0 then%>
<frame src="blank.asp" name="DIRDETAIL" scrolling="auto" border=0 marginwidth=0 marginheight=0 frameborder=1>
<%end if%>
</frameset>
</html>
<%@ LANGUAGE="VBSCRIPT"%>
<%
Option Explicit
Response.Expires = 0
Response.AddHeader "Pragma","no-cache"
Dim sView
Dim sMode
Dim sStartChar
sStartChar = Request.QueryString("startchar")
if isnull(sStartChar) or (sStartChar="") then
sStartChar="a"
end if
sView = GetSessionVar("DirectoryView")
sMode = Request.QueryString("mode")
%>
<html>
<%= GetString("Copyright")%>
<head>
<title><%= getString("dirTitle") %></title>
<script language="JavaScript">
<!--
function ChangeView(newView) {
//Эта функция изменяет переменную сеанса "DirectoryView" для отображения
//нового представления, выбранного пользователем. При обновлении вид данного кадра изменится.
document.frmDirMenu.search_string.value=("");
if ((newView=='private') || (newView=='online'))
{
self.open("DirMenu.asp?startchar=*&view=" + newView, "DIRMENU")
}
else
{
self.open("DirMenu.asp?startchar=a&view=" + newView, "DIRMENU")
}
}
//--------------------------------------------------------------------------------
function GoToLetter(letter) {
//Загружает кадр DirList с информацией о выбранной букве
document.frmDirMenu.search_string.value=("");
self.open("DirList.asp?startchar=" + letter + "&view=<%=GetSessionVar("DirectoryView")%>", "DIRLIST");
}
//--------------------------------------------------------------------------------
function membersearch() {
//Запускает программу поиска в кадре DirList
self.open("DirList.asp?search_string=" + document.frmDirMenu.search_string.value + "&view=<%= GetSessionVar("DirectoryView")%>","DIRLIST");
return true
}
function window_onload()
{
self.open("DirList.asp?view=<%=GetSessionVar("DirectoryView")%>&startchar=<%=sStartChar%>", "DIRLIST");
}
//-->
</script>
</head>
<body <%=GetHTML("MembersHeaderbg") %> onload="window_onload()">
<form name="frmDirMenu" method="GET">
<table border="0" <%= getHTML("tabColBotTable") %>>
<tr>
<td align="right" colspan="2">
<img src="../../images/clearpixel.gif" width="1" height="34">
</td>
</tr>
<% If sMode = "detail" Then %>
<tr>
<td bgcolor="#333333" align="left"><%= getHTML("tabColTopRegTx") %>
<p><a href="DirList.asp?refresh=1" target="DIRLIST"><
<%= getString("dirReturn") %> </a>
</td>
</tr>
<% Else %>
<tr>
<% If MembershipIsMember("Administrators") Then %>
<td align="center" valign="middle">
<%=getHTML("tabColTopTabsTx")%><font size="1" face="arial"><a href="Dir_Edit.asp" target="_parent"><nobr><%=getString("dirEdit")%></nobr></a>
</td>
<% Else %>
<td> <br></td>
<% End If %>
<td align="right">
<table border="0" align="right" cellpadding="0">
<tr>
<td align="center"><%= getHTML("tabColTopRegTx") %>
<%= getString("dirSelect") %>
</td>
<% If sView = "all" Then %>
<td align="center" <%= getHTML("tabColTopTabsBg") %> width="75" height="25">
<% Else %>
<td align="center" width="75" height="25">
<% End If %>
<%= getHTML("tabColTopRegTx") %>
<p><a href="javascript:ChangeView('all');"><%= getString("dirPublic") %></a>
</td>
<% If sView = "private" Then %>
<td align="center" <%= getHTML("tabColTopTabsBg") %> width="75" height="25">
<% Else %>
<td align="center" width="75" height="25">
<% End If %>
<%= getHTML("tabColTopRegTx") %>
<p><a href="javascript:ChangeView('private');"><%= getString("dirPrivate") %></a>
</td>
<% If sView = "online" Then %>
<td align="center" <%= getHTML("tabColTopTabsBg") %> width="75" height="25">
<% Else %>
<td align="center" width="75" height="25">
<% End If %>
<%= getHTML("tabColTopRegTx") %>
<p><a href="javascript:ChangeView('online')"><%= getString("dirOnLine") %></a>
</td>
<td align="center">
<input type="textbox" value="<%=GetSessionVar("rsEvents_Filter")%>" Name="search_string" <%= getHTML("gSTYLE12") %> size="14">
<input type="button" value="Find" <%= getHTML("gSTYLE10") %> id="button1" name="button1" OnClick="membersearch();">
</td>
</tr>
</table>
</td>
</tr>
<tr>
<td valign="center">
<%= getHTML("admTopSmlTx") %><%= getString("dirFilter") %></font>
</td>
<td valign="center">
<img BORDER="0" SRC="/images/memberbar.gif" ismap usemap="#alphamap">
</td>
</tr>
<% End If %>
</table>
<map name="alphamap">
<!--<area shape="rect" coords="0,6,40,23" href="javascript: GoToLetter('*')">-->
<area shape="rect" coords="43,6,61,23" href="javascript: GoToLetter('a')">
<area shape="rect" coords="62,6,77,23" href="javascript: GoToLetter('b')">
<area shape="rect" coords="77,6,94,23" href="javascript: GoToLetter('c')">
<area shape="rect" coords="95,6,111,23" href="javascript: GoToLetter('d')">
<area shape="rect" coords="112,6,127,23" href="javascript: GoToLetter('e')">
<area shape="rect" coords="127,6,141,23" href="javascript: GoToLetter('f')">
<area shape="rect" coords="142,6,160,23" href="javascript: GoToLetter('g')">
<area shape="rect" coords="160,6,177,23" href="javascript: GoToLetter('h')">
<area shape="rect" coords="177,6,190,23" href="javascript: GoToLetter('i')">
<area shape="rect" coords="191,6,204,23" href="javascript: GoToLetter('j')">
<area shape="rect" coords="205,6,221,23" href="javascript: GoToLetter('k')">
<area shape="rect" coords="222,6,236,23" href="javascript: GoToLetter('l')">
<area shape="rect" coords="237,6,256,23" href="javascript: GoToLetter('m')">
<area shape="rect" coords="257,6,275,23" href="javascript: GoToLetter('n')">
<area shape="rect" coords="275,6,293,23" href="javascript: GoToLetter('o')">
<area shape="rect" coords="294,6,308,23" href="javascript: GoToLetter('p')">
<area shape="rect" coords="309,6,328,23" href="javascript: GoToLetter('q')">
<area shape="rect" coords="329,6,345,23" href="javascript: GoToLetter('r')">
<area shape="rect" coords="346,6,360,23" href="javascript: GoToLetter('s')">
<area shape="rect" coords="361,6,376,23" href="javascript: GoToLetter('t')">
<area shape="rect" coords="377,6,392,23" href="javascript: GoToLetter('u')">
<area shape="rect" coords="393,6,410,23" href="javascript: GoToLetter('v')">
<area shape="rect" coords="411,6,432,23" href="javascript: GoToLetter('w')">
<area shape="rect" coords="433,6,450,23" href="javascript: GoToLetter('x')">
<area shape="rect" coords="451,6,468,23" href="javascript: GoToLetter('y')">
<area shape="rect" coords="468,6,484,23" href="javascript: GoToLetter('z')">
<area shape="default" nohref>
</map>
</form>
</body>
</html>
Данный фрагмент кода показывает, как использовать элемент управления ActiveX программы FileUp компании Software Artisan для загрузки содержимого в библиотеку.
sub main()
dim upload, filename
const Kb = 1024
Set upload = Server.CreateObject("SoftArtisans.FileUp")
upload.Path = "c:\temp"
if upload.Form("process") <> "" then
if not IsObject(upload.Form("blob")) then
call upload_display(getString("libUplErr1"))
elseif upload.Form("blob").IsEmpty then
call upload_display(getString("libUplErr2"))
elseif upload.Form("blob").ContentDisposition <> "form-data" then
call upload_display(getString("libUplErr3"))
else
if upload.TotalBytes > 10 * Kb * Kb then
call upload_display(getString("libUplErr4"))
else
call MediaUpload(upload, filename)
call upload_display(getString("libUplRes1") & " " & filename & " " & getString("libUplRes2") & " " & upload.TotalBytes & getString("libUplRes3"))
end if
end if
else
%>
<HTML>
//построить страницу HTML
</HTML>
<%
end if
end sub
call main()
%>