Реферат: Обратные вызовы в MIDAS через TSocketConnection
Назначение полей довольно понятно: в FClientIntf хранится собственно интерфейс обратного вызова, в FOwner - ссылка на TRdmMain... А вот третье поле (FCallBackWnd) служит для маршалинга вызовов между потоками, об этом будет сказано немного ниже. В вызове метода RegisterCallBack интерфейс просто передается этому классу, где и производится непосредственный вызов callback-интерфейса (через Invoke):
procedure TrdmMain.RegisterCallBack(const BackCallIntf: IDispatch); begin lock; try FCallBackStub.ClientIntf := IBackCallDisp(BackCallIntf); finally unlock; end; end; |
Всего этого вполне достаточно для вызовов клиентской части из удаленного модуля данных, к которому она присоединена. Однако задача состоит именно в том, чтобы вызывать интерфейсы клиентских частей, работающих с другими модулями. Это обеспечивается двумя методами класса TCallBackStub: CallOtherClients и OnCall.
Первый метод довольно прост, и вызывается из процедуры Broadcast:
procedure TrdmMain.Broadcast(const MsgStr: WideString); begin lock; try if Assigned(FCallbackStub) then //переводимстрелки :) FCallbackStub.CallOtherClients(MsgStr); finally unlock; end; end; procedure TCallBackStub.CallOtherClients(const MsgStr: WideString); var i: Integer; LastError: DWORD; ErrList: string; begin ErrList := ''; К-во Просмотров: 509
Бесплатно скачать Реферат: Обратные вызовы в MIDAS через TSocketConnection
|