- •Розподілені системи обробки інформації
- •Передмова
- •Розділ 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. Підсумки порівняння
- •Літературні джерела
3. Формування бібліотеки типів
Клацніть на кнопці Refresh Implementation (Оновити реалізацію) панелі інструментів Турe Library Editor і закрийте редактор бібліотек типів. Зміст файла бібліотеки типів EventSrv_TLB.pas, що автоматично сформує Delphi, подано в лістингу.
//Застосунок EventSrv, файл EventSrv_TLB.pas
unit EventSrv_TLB;
interface
uses Windows, ActiveX, Classes, Graphics, OleCtrls, StdVCL;
// GUID, об’явлені у бібліотеці типів. //
// Використовуються наступні префікси: //
// Бібліотеки типів : LIBID_xxxx //
// Сполучені класи : CLASS хххх //
// Інтерфейси диспетчерування : DIID хххх //
// Інші інтерфейси : IID_xxxx //
const
LIBID_EventSrv:TGUID='{34FB8111-476E-11D3-B83E-G040F67455FE}';
IID_IEventIntf:TGUID='{34FB8112-476E-11D3-BB3E-0040F67455FE}';
DIID_IEventIntfEvents:TGUID='{34FB8114-476E-11D3-B83E-0040F67455FE}'
CLASS EventIntf:TGUID='{34FB8116-476E-11D3-B83E-0040F67455FE}';
type
//Оголошення інтерфейсів, визначених у бібліотеці типів//
IEventIntf = interface;
IEventIntfDisp = dispinterface;
IEventIntfEvents = dispinterface;
// Оголошення сполучених класів, визначених у бібліотеці типів
EventIntf = IEventIntf;
// Об’явлення інтерфейсів
// Базовий інтерфейс
// Interface: ІEvеntIntf;
// Flags: (4416) Dual OleAutomation Dispatchable
IEventIntf = interface(IDispatch)
['{34FBB112-476E-UD3-B83E-0040F67455FE}']
procedure SendText(const Text: WideString); safecall;
end;
// Диспетчерський інтерфейс
// DispIntf: ІЕvеntIntfDіsр
// Flags: (4416) Dual OleAutomation Dispatchable
IEventIntfDisp = dispinterface
['{34FBB112-476E-UD3-B83E-0040F67455FE}']
procedure SendText(const Text: WideString); dispid 1;
end;
// Інтерфейс диспетчерування
// DispIntf: ІЕvеntІntfЕvеnts
// Flags: (0)
IEventIntfEvents = dispinterface
['{34FBB112-476E-UD3-B83E-0040F67455FE}']
procedure OnText(const Text: WideString); dispid 3;
end;
CoEventIntf=class
Class function Create:IEventIntf;
Class function CreateRemote(const MachineName:string): IEventIntf;
end;
implementation
uses ComObj;
class function CoEventIntf.Create:IEventIntf;
begin
Result := CreateComObject(Class_EventIntf) as EventIntf;
end;
class function CoEventIntf.CreateRemote(const MachineName:string): IEventIntf;
begin
Result := CreateRemoteComObject(MachineName, CLASS_EventIntf) as IEventIntf;
end;
end.
Збережіть файл під ім’ям EventIntf.pas.
4. Формування методів
Тепер нам залишається тільки наповнити змістом оболонку методу SendText:
procedure TEventIntf.SendText(const Text: WideString);
begin
FEvents.OnText(Text);
end;
5. Реєстрація сервера
Скомпілюйте цю програму-сервер і зареєструйте звичайним способом.
2.10.2. Створення клієнтського застосунка
Спочатку закрийте усі відкриті проекти (FileClose all) у Delphi, а потім виберіть у головному меню ProjectImport Type Library.
На екрані з'явиться діалогове вікно Import Type Library.
Зверніть увагу на те, що в діалоговому вікні Import Type Library з'явився додатковий прапорець Generate Component Wrapper (формувати компонент оболонки). У списку виберіть EventSrv Library (Ver 1.0), а в полі зі списком Palette Page виберіть бажану панель компонентів, наприклад ActiveХ. Перевірте, щоб прапорець Generate Component Wrapper був встановлений. Після цього клацніть на кнопці Install. У відповідь Delphi запросить у вас ім'я пакета, у який потрібно встановити компонент. Можна прийняти запропоноване за замовчуванням ім’я і клацнути на кнопці ОК. Підтвердіть формування (чи відновлення) пакета, якщо Delphi виведе на екран вікно підтвердження. Після завершення процесу Delphi виведе повідомлення про те, що компонент успішно встановлений у відповідний розділ палітри.
Важливо! Пакет, в який встановлено компонент, необхідно скомпілювати і зберегти перш ніж починати працювати з компонентом, інакше компонент може некоректно працювати.
Створіть новий проект (application) і перетягніть в його головну екранну форму компонент TEventIntf з того розділу палітри, у який він був поміщений хвилиною раніше. У компонента TEventIntf є три важливих властивості.
1. Властивість AutoConnect визначає, чи передбачає застосунок почати спробу автоматично підключитися до сервера відразу після запуску. Якщо цій властивості присвоєно значення False, то для підключення до сервера треба викликати EventIntf.Connect. У цьому випадку встановіть значення властивості AutoConnect = True.
2. Властивість ConnectKind визначає, як компонент буде підключатися до сервера. Властивість ConnectKind може мати такі значення:
ckAttachToInterface – цей тип підключення відноситься до найбільш складних випадків і зараз не розглядається;
ckNewInstance – при спробі підключення клієнтський застосунок завжди створює новий екземпляр сервера;
ckRemote – застосунок-сервер виконується на іншому комп'ютері; цей тип підключення буде розглянутий пізніше;
ckRunningInstance – клієнтський застосунок підключається тільки до раніше запущеного на виконання екземпляру сервера;
ckRunningOrNew – клієнтський застосунок починає спробу підключитися до раніше запущеного на виконання екземпляру сервера; якщо ж такого не виявиться, то клієнтський застосунок запускає на виконання новий екземпляр сервера.
Для застосунка, який розробляється, присвойте цій властивості значення ckRunningOrNew.
3. Властивість RemoteMachineName використовується при підключенні до віддаленого сервера.
Компонент TEventIntf також експортує одну подію OnText. Вона відповідає однойменній події, яку ми додали до інтерфейсу диспетчирування IEventIntfEvents.
Програмний код цього клієнтського застосунка подано у наступному лістингу.
unit MainForm;
interface
uses
Windows, Messages, ..., OleServer, EventSrv_TLB;
type
TForm1 = class(TForm)
EventIntf1: TEventIntf;
Panel1: TPanel; Panel2: TPanel;
Memo1: TMemo;
Edit1: TEdit;
Button1: TButton;
procedure Button1Click(Sender; TObject);
procedure EventIntfText(Sender: TObject; var Text: OleVariant);
private
{ Оголошення закритих членів}
public
{ Оголошення загальнодоступних членів }
end;
var Form1: TForm1;
implementation
{$R *.dfm}
...
end.
Виконання клієнтського застосунка. Після запуску клієнтського застосунка на екрані з'явиться вікно, зображене на рис. 2.8.
Застосунок EventCli дозволяє пересилати текст іншим підключеним клієнтам.