to jak mam go od Superchannel:
procedure TMyInterface.RORemoteDataModuleGetDispatchInfo(const aTransport: IROTransport; const aMessage: IROMessage);
var
tcpinfo: IROTCPTransport;
Session: TCustomSession;
szClientIP : String;
begin
Session := TCustomSession(Self.Session);
if Supports(aTransport, IROTCPTransport, tcpinfo) then
begin
szClientIP := tcpinfo.ClientAddress;
if (not Session.ShownTCP) or (Session.TCPAddress <> szClientIP) then
begin
Session.TCPAddress := szClientIP;
Session.Report(leInformation, 'TCP address ' + szClientIP);
Session.ShownTCP := True;
end;
end
else
begin
Session.Report(leInformation, 'TCP address not available');
end;
end;
Specyfika tego, co robisz z nim, zależy od ciebie, ale musisz go pobrać, jak jest skonfigurowany, i przechowywać go w obiekcie sesji, jeśli chcesz go później odebrać. Zaimplementowałem niestandardową sesję do przechowywania IP klienta, aby móc ją uzyskać w dowolnym czasie.
To działa. Potrzebowałem tylko funkcji Supports, do załadowania obiektu tcpInfo. Wielkie dzięki –
W tej chwili TRORemoteDataModule implementuje właściwość Transport, więc nie musisz pisać takiego kodu w OnGetDispatchInfo. Możesz po prostu wykonać go z funkcji serwera. – gabr