Реферат: Обратные вызовы в MIDAS через TSocketConnection

begin

if not scMain.Connected then

raise Exception.Create('Нетсоединения');

AServer := IrdmMainDisp(scMain.GetServer);

AServer.Broadcast(eMessage.Text);

end;

procedure TfrmClient.scMainAfterConnect(Sender: TObject);

var

AServer: IrdmMainDisp;

begin

FCallBack := TBackCall.Create;

AServer := IrdmMainDisp(scMain.GetServer);

AServer.RegisterCallBack(FCallBack);

lConnect.Caption := 'Соединениеустановлено';

btnConnect.Caption := 'Отключиться';

end;

procedure TfrmClient.scMainAfterDisconnect(Sender: TObject);

begin

FCallBack := nil;

lConnect.Caption := 'Нетсоединения';

btnConnect.Caption := 'Соединиться';

end;

Фактически все управляется scMain, обработчиками OnAfterConnect (регистрирующим callback-интерфейс) и OnAfterDisconnect (производящим обратное действие). Разумеется, библиотека типов сервера подключена к проекту, но не через Import Type Library. Дело в том, что в проекте присутствует ActiveX Object TBackCall, который реализует интерфейс IBackCall, описанный в библиотеке типов сервера. Сделать такой объект очень просто: надо просто выбрать New -> Automation Object и в диалоге ввести имя BackCall (можно и другое, это не принципиально), выбрать ckSingle, и нажать ОК. В получившейся библиотеке типов сразу удалить интерфейс IBackCall, и на вкладке uses библиотеки типов подключить библиотеку типов сервера (есть локальное меню). После этого на вкладке Implements кокласса выбрать из списка интерфейс IBackCall. После обновления в модуле будет создан заглушка для метода OnCall, а в каталоге проекта клиента организуется файл импорта библиотеки типов сервера BkServer_TLB.pas, который остается только подключить к проекту и прописать в секциях uses модулей главной формы и СОМ-объекта. Метод OnCall я реализовал простейшим образом:

procedure TBackCall.OnCall(const MsgStr: WideString);

begin

ShowMessage(MsgStr);

end;

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

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

К-во Просмотров: 511
Бесплатно скачать Реферат: Обратные вызовы в MIDAS через TSocketConnection