Техническое развертывание системы 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 для Всемирного экономического форума не нашла широкого применения среди его участников из-за сложного пользовательского интерфейса и низкого быстродействия. Группу разработчиков системы 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: полностью интегрированная настольная система, использующая технологию IBVC

Видеоконференции уровня 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: независимая поддержка студийных и настольных видеоконференций

На уровне 2 поддерживаются системы видеоконференций, отличные от тех, которые основаны на продуктах Intel ProShare. При организации сеансов «точка-точка» или многоточечных сеансов участники уровня 2 получают номер ISDN, используемый в программах их видеосистем. Техническим требованиям удовлетворяет любая система видеоконференций (студийная или настольная), совместимая со стандартом H.320, и технология Microsoft Internet Explorer или Netscape Navigator.

Уровень 3: поддержка аудиоконференций

Уровень 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

Сервер Microsoft Site Server 3.0 используется для проверки подлинности на веб-узле и доступа по протоколу LDAP. Фильтр проверки подлинности Microsoft Site Server 3.0 ISAPI защищает веб-узел от запросов к отмеченным страницам и перенаправляет эти запросы к форме входа в систему. Сервер Microsoft Site Server 3.0 настроен на использование только своей модели членства Membership. База данных LDAP настроена на хранение имени пользователя, пароля и групп на сервере Microsoft SQL Server 6.5.

Сервер IIS 4.0

Компании USWeb/CKS не потребовалось настраивать серверное программное обеспечение, и установка сервера IIS была выполнена по умолчанию. Это программное обеспечение находится на том же томе, что и операционная система Microsoft Windows NT.

Хранилище мультимедиа

Видеосодержимое хранится в структуре каталогов файловой системы NTFS на сервере Windows NT Server. Это видеосодержимое состоит из записанных сеансов WELCOM, которые поставщик MCU записывает, оцифровывает на компакт-диск и посылает по почте Всемирному экономическому форуму для загрузки на сервер по протоколу FTP.

Возможности поиска обеспечиваются запросами SQL, реализованными в виде хранимых процедур. Ключевые слова, хранимые в базе данных, используются для всего мультимедийного содержимого, как на сервере мультимедиа, так и в базе данных. Идентификаторы записи передаются в качестве параметров коду ASP для запросов к базе данных. Запросы на видеосодержимое перенаправляются по URL-адресам файлов.

Сервер Microsoft SQL Server 6.5

Система находится в стадии освоения участниками. По мере роста использования предполагается некоторая подстройка, однако число изменений в системе Microsoft SQL Server 6.5 по отношению к умолчаниям невелико. Для улучшения быстродействия увеличены объем используемой памяти, размер базы данных TEMPDB и число подключений.

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

Архитектура приложения

Приложение WELCOM имеет модульную структуру, что позволяет быстро производить изменения на веб-узле, а также разработку дополнительных модулей. Приложение WELCOM содержит восемь модулей.

Модуль Authorization (Проверка подлинности).

Шесть модулей, выполняемых на стороне клиента: Workspace (Рабочее пространство), News (Новости), Events (События), Directory (Каталог), Library (Библиотека) и Profile (Профиль).

Модуль Administration (Администрирование).

Модуль Authorization

Проверка подлинности основана на модели членства Membership сервера Microsoft Site Server 3.0, в которой используется интерфейс LDAP к базе данных Microsoft SQL Server 6.5. Когда пользователь входит в систему, веб-узел его идентифицирует и предоставляет ему соответствующий доступ. Более подробные сведения см. в разделе «Реализация» в подразделе «Проверка подлинности».

Далее приложение задает переменные приложения и сеанса. В приложении широко используются объекты словаря сценариев IIS. Модули, строки и словари HTML, на основе которых строится модульная структура и производится настройка приложения, имеют особую важность. Каждый из модулей, выполняемых на стороне клиента, в папке которого содержится файл interface.txt, соответствует одному варианту динамически загружаемой навигационной панели. Этот файл необходим, чтобы модуль мог быть обнаружен и отображен. Какие возможности видны каждому пользователю, зависит от его уровня безопасности. Обсуждение этой методики см. в разделе «Реализация» в подразделе «Модульная структура».

Приложение содержит стандартный набор кадров, состоящий из заголовка вверху, навигационной панели (описанной выше) и тела. После загрузки набора кадров все страницы, которые приложение предоставляет клиенту, загружаются в кадр тела (и тоже могут содержать наборы кадров); заголовок и навигационные панели после загрузки уже не обновляются. В процессе инициализации загружаются три скрытых кадра и стандартный набор кадров. Эти кадры загружают клиентские JavaScript-модули для видеоконференций. Первой страницей, которая загружается после входа в систему и инициализации, является страница Workspace (Рабочее пространство).

Клиентский модуль 1 – Workspace

Страница Workspace является домашней страницей системы WELCOM. Она дает персонализированную информацию в сгруппированном виде. Эта страница разделена на три области: News (Новости), Personal Directory (Личный каталог) и Events (События).

News (Новости). Участники получают статьи с последними новостями Всемирного экономического форума.

Personal Directory (Личный каталог). Участник может просматривать имена других участников, перечисленные в его личном каталоге. Участники, подключенные в данный момент к сети, указаны жирным шрифтом и отмечены галочкой.

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

Страница Workspace также содержит приветствие в заголовке и ссылки «about WELCOM» (о системе WELCOM) внизу страницы, позволяющие получить дополнительную информацию. Каждая область помещена в ячейку таблицы одной страницы HTML. Подробности см. в разделе «Реализация» в подразделе «Workspace».

Клиентский модуль 2 – News

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

Клиентский модуль 3 – Events

Модуль Events (События) дает пользователю доступ к событиям WELCOM. Участник регистрируется для участия в событии прямо с экрана, выбирая значки для участия по телефону или по видеосвязи. После регистрации событие автоматически попадает в список данного участника «Your Events» (Ваши события), находящийся на странице Workspace. Когда событие начинается, участник щелкает ссылку «join» (присоединиться), чтобы включиться в работу видеоконференции. Пользователи, участвующие по телефону, по щелчку на ссылке «join» получают номер телефона, который надо набрать.

На экране конференции у каждого участника есть кнопка с надписью «Request Floor» (Прошу слова). По нажатию этой кнопки посылается сообщение ведущему конференции, который может предоставить участнику слово. Имя участника, которому предоставлено слово, отображается на главном экране видеоконференции.

Модуль событий использует профиль пользователя участника и объекты «cookie» на клиентском компьютере для настройки локального видеоустройства участника. Для управления сеансом и видео на клиентском компьютере приложение загружает в скрытые кадры три приложения JavaScript: Heartbeat, Video Manager и Video HAL. Подробные сведения см. в разделе «Реализация» в подразделе «Видеоконференции».

Клиентский модуль 4 – Directory

Каталог членов Всемирного экономического форума интегрирован в систему WELCOM с использованием сервера Microsoft SQL Server 6.5 и технологии LDAP. В этом каталоге можно найти всех пользователей. Для них указаны адреса электронной почты, IP-адреса, номера ISDN, а также возможности аудио- и видеосвязи. Участник также может добавить тех участников, с которыми часто общается, в свой личный каталог «Personal Directory».

Основные функции модуля включают возможности сортировки каталога по фамилии, названию организации или страны, фильтрацию по букве алфавита или выполнение простого поиска. Участник может просмотреть всех участников, участников из своего личного каталога или тех участников, которые в данный момент подключены к сети. Примеры соответствующих программ см. в Приложении А в подразделе «Модуль Directory».

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

На этом экране сведений пользователь может щелкнуть ссылку, чтобы послать данному участнику вызов на видеосвязь, письмо по электронной почте, а также добавить участника в свой личный каталог или удалить его из него.

В аудио- и видеоконференциях «точка-точка» используется модуль каталога. Для инициализации вызова «точка-точка» участник находит необходимого абонента в разделе каталога страницы Workspace или в личном каталоге и отмечает мышью его имя, чтобы вывести профиль этого участника. Меню профиля содержит ссылку на «Place a call» (Сделать вызов), которая выполняет дальнейший процесс автоматически. Вызвавший будет маршрутизирован к модулю конференций, который наберет номер вызываемого абонента (его компьютера).

Клиентский модуль 5 – Library

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

В библиотеке хранится название, аннотация, дата присылки материала, имя приславшего, а также соответствующий материал, загруженный на веб-узел. Библиотека поддерживает загрузку от любого участника. Пример программы, иллюстрирующий применение программного обеспечения FileUp фирмы Software Artisan см. в Приложении А в подразделе «Загрузка файла на веб-узел». Все новые информационные ресурсы содержатся в испытательной области, пока они не утверждены администратором веб-узла. Весь материал подразделяется на категории с помощью словаря веб-узла. После утверждения материалы передаются в рабочую область веб-узла.

Клиентский модуль 6 – Profile

Этот модуль позволяет участникам обновлять свои профили. Заголовок модуля содержит четыре вкладки: Personal (Личные данные), Assistant (Помощник), Biography (Биография) и Computer (Компьютер).

Вкладка Personal дает участникам возможность обновлять свои портреты, личные данные (имя, адрес и данные об организации), выбор новостей (отрасль, география и вид статей) и основные данные рабочей станции (номер ISDN или адрес TCP/IP).

Вкладка Assistant дает участникам возможность добавлять и изменять сведения о своих личных помощниках.

Вкладка Biography дает участникам возможность добавлять и изменять сведения личного или профессионального характера.

Вкладка Computer дает участникам возможность изменять настройки своих рабочих станций. Такие изменения позволяют выбирать аппаратуру для совместной работы с обменом аудио- и видеоинформацией и вводить номера ISDN, города, страны и местные номера.

Модуль Administration

Средства администратора системы 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 (Intels 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

При входе участника в видеоконференцию модуль Video Manager получает идентификатор компьютера участника от объекта «cookie» на клиентском компьютере, загружает соответствующий модуль Video HAL и посылает сообщение для его инициализации. В случае успеха приложение продолжает нормальную работу и реализуется участие в видеоконференции. В случае отказа участник получает сообщение о том, что ему необходимо обновить свой профиль или проверить настройку оборудования.

Когда участник присоединяется к событию видеоконференции или покидает его, список участников события обновляется. Когда слово получает новый оратор и его выступление передается для других участников, элемент управления IBVC Remote Video посылает сообщение модулю Video Manager (через модуль Video HAL) о том, что участник изменился, и модуль Video Manager обновляет вывод профиля Video UI.

Модуль Video HAL

Модуль Video HAL (Hardware Abstraction Layer) представляет собой набор интерфейсных модулей, отделяющих управление видеоконференцией от ее реализации. Для устройств видеоконференций, использующих технологию IBVC, это управление реализовано с помощью объектов ActiveX и их опубликованных методов. Для поддержки других видеосистем могут быть разработаны дополнительные модули Video HAL без изменения структуры модуля Video Manager.

Профиль участника содержит тип его видеосистемы. Соответствующий модуль Video HAL для данного участника загружается, когда участник входит в сеть.

Модуль Heartbeat

Модуль 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 (Рабочее пространство), чтобы быстро ознакомиться с последними новостями и быть в курсе запланированных событий. События, на которые подписан участник, отображаются в виде напоминания.

При построении страницы Workspace применяется последовательное обращение к модулям, отвечающим за каждую из областей страницы. Эта страница не содержит набора кадров – каждая из областей помещается в ячейку таблицы. В приветствии вверху страницы отображается имя участника и время его последнего входа в систему.

В личном каталоге отображается состояние подключения участников, с которыми часто устанавливается контакт; для этого не требуется поиск в модуле Directory (Каталог). Личный каталог строится на основе таблицы профилей, таблицы «Buddy List» (Список друзей) и таблицы «Who List» (Кто в сети) (для выяснения состояния подключения). Когда участник выходит из сети, поле «lastVisit» (последнее посещение) в таблице профиля обновляется, и его содержимое выводится при следующем входе в систему. Примеры программ приведены в Приложении А.

Списки событий составляются в виде строк таблицы при помощи последовательных вызовов модулей. Область «about WELCOM» (о системе WELCOM) содержит явные ссылки HTML.

Модульная структура

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

Областями наиболее частого изменения были модули приложений высокого уровня, обработка низкого уровня и структура интерфейса. Веб-узел может быть быстро изменен тремя способами: добавление и удаление модулей, изменение графики и изменение текста и тегов 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

Выполняемое приложение Listener (Слушатель) будет загружаться с веб-узла и само себя устанавливать в качестве панели задач, которая перезагружается каждый раз при перезапуске клиентского компьютера. Все видеомодули, работающие на клиентской стороне (Heartbeat, Video HAL и Video Manager), включая элементы управления ActiveX, могут быть перенесены в приложение Listener. Приложение Listener будет взаимодействовать с обозревателем Интернета посредством приложения Java.

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

Автоматизация передачи новостей

В систему WELCOM предполагается включить потоки новостей от независимых агентств, например, Reuters, Business Wire и Associated Press.

Поточные обсуждения и оповещения

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

Участники имеют возможность извещать других подписчиков потока по приоритетным вопросам, а также получать извещения при появлении материалов в определенных потоках. При помещении участником оповещения все остальные подписчики данного потока получат извещение по электронной почте. Автор оповещения получит по электронной почте извещения об откликах.

Упрощение процесса установки

Программа установки автоматизирует и упростит настройку новых серверов, что уменьшит число ошибок и сэкономит затрачиваемое персоналом время.

Расширение средств дежурной службы

Поддержка участников форума будет расширена следующими услугами.

Идентификация вызывающего. Идентификация вызывающего до ответа на вызов и извлечение сведений из базы данных WELCOM.

Улучшение маршрутизации вызова. Улучшенные алгоритмы, гарантирующие, что обращение к сотруднику дежурной службы будет выполнено как можно более быстро и надежно.

Автоматический вызов по пейджеру сотрудника дежурной службы. Предусмотрены серверные средства, которые будут вызывать по пейджеру сотрудника дежурной службы в тех случаях, когда участник попытается обратиться к дежурной службе, но ни один из сотрудников не будет свободен.

Протокол SSL

Добавленный к процедуре входа и другим избранным страницам протокол SSL повысит степень безопасности.


Приложение A – примеры программ

Модули настройки

В системе 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>

Словарь Text Strings

Этот словарь содержит неизменный текст, выводимый в пределах веб-узла. Записи словаря включают сообщения, запросы, имена полей, имена ссылок и текстовые описания, используемые на страницах 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 веб-узла, пары «переменная-значение», определяющие стиль структуры общих страниц. Сюда включаются глобальные настройки стиля по умолчанию, настройки стиля для компонентов таблиц и списков, стили шрифтов текста, цветов и фоновых изображений. Стили списков и таблиц включают текст заголовка, текст надписей, вкладки (ссылки) и тело. Эти записи словаря создают единообразный интерфейс в пределах веб-узла и упрощают управление веб-узлом.

Полный список строк 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

Все компоненты страницы Workspace вызываются последовательно. Ниже показаны коды для страниц Welcome (Приветствие) и Personal Directory (Личный каталог). Коды для страниц Headlines (Заголовки) и Events (События) аналогичны.

Страница Welcome (Приветствие)

     

'Описания переменных

'Создать объект словаря

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>&nbsp;<%=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

Страница Personal Directory (Личный каталог)

 

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%>

            &nbsp;</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

s_GetWorkspaceMembers

 

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

Модуль 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

Модуль 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

Модуль 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

Модуль Directory

Набор кадров модуля Directory

 

<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>

Меню модуля Directory (Каталог)

 

<%@ 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">&lt;

            <%= 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>&nbsp;<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()

%>