- •Розподілені системи обробки інформації
- •Передмова
- •Розділ 1. Огляд компонентних технологій створення розподілених програмних систем
- •1.1. Узагальнена архітектура і механізм функціонування об'єктних розподілених систем
- •1.2. Основні приклади технологій створення розподілених систем
- •1.3. Переваги використання розподілених технологій
- •Розділ 2. Розроблення розподілених систем на основі модели com/dcom у Delphi
- •2.1. Використання dll у Delphi
- •2.1.1. Поняття dll
- •2.1.2. Створення dll у середовищі Delphi (експорт)
- •2.1.3. Використання dll у Delphi (імпорт)
- •2.1.4. Створення динамічних бібліотек для редагування ресурсів
- •2.2. Основи сом-технології
- •2.2.1. Загальний опис
- •2.2.2. Базові поняття
- •2.2.3. Бібліотека сом
- •2.2.4. Бібліотека типів
- •2.3.2. Сервер сом у Delphi
- •2.3.3. Бібліотека типів у delphі
- •2.4. Створення системи клієнт-сервер на основі базового com-об’єкту у складі внутрішнього сервера
- •2.4.1. Створення сом-сервера
- •2.4.2. Створення сом-клієнта
- •2.4.3. Використання сом-об’єкту в клієнтській програмі
- •2.5. Механізм міжпроцесного обміну
- •2.6. Створення систем клієнт-сервер на основі зовнішнього базового сом-об’єкту
- •2.6.1. Основні поняття
- •2.6.2. Засоби організації потокової взаємодії клієнта і сервера
- •2.6.3. Методи формування екземпляра сом-об’єкту
- •2.6.4. Формування екземпляра зовнішнього сом-об’єкту
- •2.6.5. Створення сом-сервера
- •2.6.6. Створення сом-клієнта
- •2.7. Автоматизація
- •Створення сервера автоматизації;
- •2.7.1. Базові поняття
- •2.7.2. Сервер автоматизації
- •2.7.3. Контролер автоматизації
- •2.8. Створення системи клієнт-сервер на основі внутрішнього сервера автоматизації
- •2.8.1. Об'єкт автоматизації. Клас tAutoObject
- •2.8.2. Вбудований сервер автоматизації
- •2.8.3. Створення клієнта автоматизації
- •2.9. Зовнішній сервер автоматизації
- •2.9.1. Основні визначення
- •2.9.2. Виконання маршалінгу з рядками, шрифтами і зображеннями
- •2.9.3. Перетворення наявного застосунка в сом-сервер автоматизації
- •2.9.4. Створення клієнта автоматизації
- •2.10. Події в сом і зворотні виклики на основі інтерфейсів диспетчирування
- •2.10.1. Створення сервера автоматизації
- •3. Формування бібліотеки типів
- •4. Формування методів
- •5. Реєстрація сервера
- •2.10.2. Створення клієнтського застосунка
- •2.10.3. Підключення множини клієнтів до сервера
- •2.11. Інтерфейси зі зворотним викликом
- •2.11.1. Створення сервера
- •2.11.2. Створення клієнтського застосунка
- •2.12. Технологія ActiveХ
- •2.12.1. Використання готових елементів АctiveХ
- •2.12.2. Розроблення власних елементів АctiveХ
- •2.12.3. Поширення елементів керування ActiveХ і форм ActiveХForm у Web-середовище
- •2.14. Dcom технологія
- •2.14.1. Загальна схема взаємодії сом-клієнта і сом-сервера
- •2.14.2. Розроблення системи «клієнт-віддалений сом-сервер»
- •Розділ 3. Проектування розподілених систем на платформі Microsoft .Net
- •3.1.1. Здійсненя викликань з типів .Net до типів сом
- •3.1.2. Звернення клієнта сом до збірки .Net
- •3.2. Об’єктно-орієнтована архітектура .Net Remotіng – основа створення розподілених систем Mіcrosoft .Net.
- •3.2.1. Створення системи клієнт-сервер на основі технології Remoting
- •Розділ 4. Створення системи "клієнт - сервер" на основі технології corba
- •4.1. Загальні теоретичні відомості
- •4.2. Створення серверного застосунка
- •1. Створення файла опису інтерфейсу
- •Викликання конструктора створення corba сервера
- •Формуємо модуль Unit1
- •Формуємо реалізацію методу
- •4.3. Створення клієнтського застосунка
- •Викликання конструктора corba-клієнта
- •2. Формування форми
- •3. Запуск застосунка
- •Приклад програмних кодів сервера
- •4.4. Порівняльний аналіз технологій сом і соrва
- •4.4.1. Основні принципи об'єктних моделей
- •4.4.2. Об'єктні моделі
- •4.4.3. Підтримка операційних систем
- •4.4.4. Формальний опис архітектури і проблеми реалізації
- •4.4.5. Підсумки порівняння
- •Літературні джерела
2.10. Події в сом і зворотні виклики на основі інтерфейсів диспетчирування
Під зворотнім викликом розуміється методика викликання сервером методів, реалізованих у клієнтському застосунку. З погляду клієнта методи зворотнього виклику оформлюються як процедури обробки подій спеціальних об’єктів. З погляду сервера виклик цих методів розглядається як засіб генерування відповідних подій для клієнта.
Для реалізації механізму зворотного виклику від сервера до застосунка-клієнта можна використовувати як звичайні інтерфейси, так і інтерфейси диспетчирування. Обидва варіанти мають свої переваги і недоліки. У Delphi краще організована підтримка варіанта з інтерфейсами диспетчирування. Крім того, якщо бажано, щоб розроблена програма була сумісна з Visual Basic, також треба використовувати інтерфейси диспетчирування. Звичайні інтерфейси дозволяють домогтися більш високої швидкості, але цей варіант не сумісний з застосунками, розробленими в середовищі Visual Basic, та й ручної роботи при створенні програми буде потрібно набагато більше. У подальших розділах ми детально обговоримо кожний з варіантів.
Середовище Delphi забезпечує автоматичну підтримку обробки подій через інтерфейси диспетчирування, тому розглянемо спочатку саме цей варіант.
2.10.1. Створення сервера автоматизації
Для демонстрації методики розроблення СОМ-застосунків з обробкою подій створимо сервер автоматизації, що дозволяє множині клієнтів пересилати текст в обидва напрямки: від клієнта до сервера і від сервера до клієнта, тобто підтримує діалог.
Середовище Delphi здатне автоматично реалізувати створення сервера автоматизації, для підтримки обробки подій на базі інтерфейсів диспетчерування. Для створення потрібного нам сервера необхідно виконати вказані далі кроки.
1. Створення проекту з СОМ-об’єктом
Створіть новий проект (application) у Delphi, а потім запустіть конструктор формування об'єктів автоматизації Automation Object Wizard. Це можна зробити, вибравши на вкладці ActiveХ елемент Automation Object. У вікні конструктора Automation Object Wizard наводиться інформація, необхідна для підтримки обробки подій:
Class Name - ім'я класу (у цьому прикладі EventIntf),
Instansing – cпосіб створення об’єкту,
Threading Model – режим обробки потоків,
Generate Evet Support Code – прапор генерування коду для підтримки обробки подій – саме він має бути обов'язково включений.
Зверніть увагу, що цього разу Delphi створить два інтерфейси, а саме: один для СОМ-об’єкту (IEventIntf), а інший для подій (IEventIntfEvents), що будуть генеруватися цим об'єктом.
2. Формування інтерфейсів
Додайте в інтерфейс IEventIntf метод SendText, що повинен мати параметр Text типу WideString. Потім додайте в інтерфейс диспетчерування TEventIntfEvents метод-подію OnText. Додайте й до неї параметр Text типу WideString. На цій стадії програмний код сервера буде виглядати так, як подано в лістингу, який наведено нижче.
//Застосунок EventSrv, файл EventIntf.pas
unit EventIntf;
interface
uses ComObj, ActiveX, AxCtrls, EventSrv_TLB.pas;
type
TEventIntf=class(TAutoObject,IConnectionPointContainer, IEventIntf)
private
FConnectionPoints: TConnectionPoints;
FEvents: IEventIntfEvents;
procedure Initialize; override;
protected
property ConnectionPoints: TConnectionPoints read FConnectionPoints implements IConnectionPointContainer;
procedure EventSinkChanged( const EventSink: IUnknown); override;
procedure SendText (const Text: WideString); safecall;
end;
implementation
uses ComServ;
procedure TEventIntf.EventSinkChanged(const EventSink:IUnknown);
begin
FEvents:= EventSink as IEventIntfEvents;
end;
procedure TEventIntf.Initialize ;
begin
inherited Initialize;
FConnectionPoints : = TConnectionPoints.Create(Self);
if AutoFactory.EventTypeInfo <> nil then
FConnectionPoints.CreateConnectionPoint(AutoFactory.EventIID, ckSingle, EventConnect);
end;
procedure TEventIntf.SendText (const Text: WideString);
begin
end;
initialization
TAutoObjectFactory.Create(ComServer,TEventIntf, Class_EventIntf, ciMultiInstance, tmApartment);
end.