Занятие 3

Поэтому за дело, а все возможные тонкости технологии CORBA и практическую сторону их применения изучим по ходу.

Техническое задание: мы с вами создадим ни много ни мало... систему сотовой связи! Не нужно вздрагивать, конечно же, это будут отдельные весьма упрощенные фрагменты системы с небольшой степенью детализации, достаточной, однако, для понимания материала. Более того, не имея представления о том, как в действительности работает сотовая связь, очень надеемся, что специалисты в области телекоммуникаций не будут судить нас строго — это всего лишь пример. Мы просто разработаем свой стандарт, особенностью которого будет то, что все в системе, включая мобильные телефоны и радиостанции-»соты», работает на основе CORBA, т. е. «прошитое» программное обеспечение этих устройств превращает заурядные приемопередатчики в незаурядные объекты CORBA. Само собой разумеется, обмен данными между всей аппаратурой происходит по принятому в CORBA протоколу IIOP с использованием радиоканала. Оно и удобно, ведь по сути своей «хозяйство» провайдера услуг сотовой связи — это огромная компьютерная сеть, в которой есть центральный сервер (административная консоль и хранилище различных данных), маршрутизаторы («соты») и клиентские терминалы (телефоны). Так что можно считать, что со многими понятиями вы уже знакомы.

Рис. 1

Функционирует система следующим образом (рис. 1). Администратор запускает приложение системной консоли, производящее внутреннюю инициализацию и устанавливающее параметры сотовых станций. Система настраивает имена «сот», с которыми работает администратор, и разрешает им начать обслуживание клиентов. С этого момента система позволяет абонентам звонить, получать счета и проводить удаленную оплату, а администратор получает в свое распоряжение консоль, с помощью которой он управляет работой всего оборудования. На рис. 2 показана совокупность функций, которые администратор выполняет с помощью консольного интерфейса.

Рис. 2

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

Рис. 3

Сотовые телефоны в нашей системе — не самые интеллектуальные устройства. Их задача сводится, по сути дела, к непрерывному излучению радиосигналов: сигналов с передаваемыми и принимаемыми данными либо тестового сигнала, которым телефон проверяет канал связи: вышел ли он из зоны приема. Ну и конечно же, телефон служит пультом для ввода телефонных номеров других абонентов. Полный набор функций вы можете увидеть на рис. 4.

Рис. 4

Следует отметить, что и сотовая станция и телефон имеют уникальные 64-битовые целочисленные идентификаторы, представленные IDL-типом unsigned long long. Будем считать, что это номер, жестко «прошиваемый» производителем оборудования.

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

Сотовая станция

При включении сотовой станции (имеется в виду аппаратное включение питания) происходит внутреннее тестирование компьютерного микроконтроллера, который управляет работой «соты», затем инициализируется брокер объектных запросов и запускается сервер CORBA, создающий объект «соты» типа Cell. С этого момента объект начинает отслеживать общедоступный канал (в простейшем случае это может быть сетевой сокет с определенным номером), пытаясь обнаружить подключающиеся телефоны, посылающие тестовые сигналы. Но даже если абоненты и будут найдены до получения разрешающего сигнала от центральной системы, сотовая станция сыграет роль лишь пассивного наблюдателя. Более того, в любой момент «сота» может быть перезапущена.

Телефоны

Включение телефона очень похоже на включение сотовой станции: сначала внутреннее аппаратное тестирование, затем инициализация брокера объектных запросов и запуск сервера CORBA-объекта Phone, реализующего функции телефонного аппарата. После этого объект начинает «бомбить» тестовым сигналом эфир определенного канала с интервалом в несколько секунд, передавая ссылку на свой объект, преобразованный в строку. Первая же станция, которая получит тестовый сигнал, преобразует строку в ссылку на объект телефона, узнает у головной системы, имеет ли право на обслуживание данный пользователь, и пошлет ему сообщение с ссылкой на саму себя и цифрой, означающей размах полученного от телефона сигнала. Телефон методом сравнительной сортировки отбрасывает ссылки на те сотовые станции, которые приняли тестовый сигнал с размахом меньшим, чем предыдущие. В конце концов у телефона остается ссылка на станцию, обеспечивающую наилучший прием сигнала. Ее-то телефон и использует в дальнейшем, предварительно уведомив выбранную «соту». Сотовый приемопередатчик, в свою очередь, сообщает системе о том, что к ней подключился телефон с таким-то уникальным номером. А чтобы пользователь знал параметры зоны приема, объект телефона спрашивает у «соты» текст и отображает его на дисплее. Так владелец аппарата может узнать, например, сеть какого провайдера используется в настоящий момент, и т.п.

Система

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

Функционирование системы

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

После запуска сотовых ретрансляторов и главной системы последняя переходит в состояние ожидания. В это время идет только один процесс — проверка работоспособности сотовых станций. Для этого ретрансляторы посылают сообщение главному объекту системы CellularSystem через определенный интервал времени (CellularSystem::stationIsAlive), а CellularSystem обращается к хранилищу с просьбой зафиксировать время обращения (DataStorage:: setCellTestTime). Параллельно к хранилищу обращается объект консоли администратора Console и спрашивает его о последней отметке обращения «соты» (DataStorage:: getCellTestTime). Если с того момента прошло слишком много времени, то о проблемах с ретранслятором станет известно администратору, а последний может попробовать перезапустить сотовую станцию (Cell::restart) или же остановить прием сигналов через нее (Cell::setCellState).

Теперь представим себе, что произошло включение телефонного аппарата абонента. Он передал в эфир тестовый сигнал на канале проверки. «Соты» начинали соревноваться, предлагая телефону ссылку на свой объект и размер тестового сигнала, полученного от телефона (Phone::useThisCell). Аппарат сам выбирает, к какой «соте» подключиться, и уведомляет ретранслятор об этом (Cell::willUseThisCell), а заодно и считывает сообщение, которое должно быть отражено на дисплее телефона (Cell:: getDataToDisplay). В ответ на это сотовая станция сохраняет ссылку на обслуживаемый аппарат в своем внутреннем списке (Cell::phones) и посылает центральной системе сообщение о подключении телефона (CellularSystem::phoneConnected) вкупе с его идентификатором и временем подключения. Центральная же система фиксирует полученные данные в хранилище информации (DataStorage::storeClientPlace). Итак, все на местах.

Простейшим действием может быть посылка текстового сообщения, получение счета и удаленной оплаты, так как в нашей упрощенной системе это делается отправлением сообщений SMS. Телефон отсылает их сотовой станции (Cell:: sendMessage), а та определяет, что сделать с данным текстом. Если набран номер службы сервиса, то проверяется наличие в начале сообщения ключевого слова bill, при появлении которого на адрес пользователя будет послано письмо со счетом (BillOutput:: getPrinterStream:: outputBill). Если после слова bill имеется номер факс-аппарата, то система направит клиенту счет на него (BillOutput:: getModemStream:: outputBill). Текстовое сообщение, начинающееся со слова pay, трактуется как команда к оплате услуг (Bank::transfer), а число после слова pay будет расценено как сумма оплаты. В иных случаях считается, что сообщение посылается другому пользователю и передается адресату (Phone::incomingMessage). «Сота» сигнализирует системе о посылке сообщения (CellularSystem::SMSSent), а система протоколирует это действие (DataStorage:: SMSSent).

Голосовой звонок одного абонента другому — самый сложный случай. Пользователь набирает номер (Phone::dialNumber), и если это не телефон сервисной службы, то он передается «соте» (Cell::callNumber), которая спрашивает у центральной системы ссылку на «соту», где в текущий момент находится вызываемый телефон (CellularSystem::findClient). Центральная система определяет ссылку, исходя из данных в хранилище (DataStorage:: recallClientPlace). Дальнейшее служит предметом более детального рассмотрения, и мы займемся этим на следующем занятии.

В листинге, приведенном на сервере, вы найдете черновик IDL-описаний частей системы. Не следует воспринимать его слишком серьезно — впоследствии все описания претерпят массу изменений.