Реферат: Обратные вызовы в 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