git-svn-id: https://192.168.0.254/svn/Proyectos.Tecsitel_FactuGES2/trunk@310 0c75b7a4-871f-7646-8a2f-f78d34cc349f
176 lines
4.6 KiB
ObjectPascal
176 lines
4.6 KiB
ObjectPascal
unit uDataModuleConexion;
|
|
|
|
interface
|
|
|
|
uses
|
|
SysUtils, Classes, uRORemoteService, uDADataTable,
|
|
uDABINAdapter, uROClient, uROBinMessage,
|
|
uDADataStreamer, uROIndyTCPChannel, uROIndyHTTPChannel;
|
|
|
|
const
|
|
SERVER_URL = 'http://localhost:8099/bin'; // Dirección por defecto del servidor
|
|
|
|
type
|
|
TdmConexion = class(TDataModule)
|
|
ROMessage: TROBinMessage;
|
|
ROChannel: TROIndyHTTPChannel;
|
|
procedure DataModuleDestroy(Sender: TObject);
|
|
procedure ROChannelFailure(Sender: TROTransportChannel;
|
|
anException: Exception; var aRetry: Boolean);
|
|
procedure DataModuleCreate(Sender: TObject);
|
|
private
|
|
function GetChannel: TROTransportChannel;
|
|
function GetMessage: TROBinMessage;
|
|
function GetTargetURL: String;
|
|
procedure SetTargetURL(const Value: String);
|
|
procedure ConfigurarEncriptacionConexion;
|
|
public
|
|
function HayConexion : Boolean;
|
|
function ProbarConexion(const ATargetURL : String): Boolean;
|
|
procedure ConfigurarConexion;
|
|
property TargetURL : String read GetTargetURL write SetTargetURL;
|
|
property Channel: TROTransportChannel read GetChannel;
|
|
property Message: TROBinMessage read GetMessage;
|
|
end;
|
|
|
|
var
|
|
dmConexion: TdmConexion;
|
|
|
|
implementation
|
|
|
|
{$R *.dfm}
|
|
|
|
uses
|
|
uROEncryption, Windows, WinInet, cxControls, uConfigurarConexion, Dialogs, Controls,
|
|
uDMBase, FactuGES_Intf;
|
|
|
|
const
|
|
IE_OFFLINE_ERROR = 'Unexpected error in WinInet HTTP Channel (2)';
|
|
|
|
|
|
function TdmConexion.HayConexion: Boolean;
|
|
begin
|
|
Result := ROChannel.IndyClient.Connected;
|
|
end;
|
|
|
|
procedure TdmConexion.ConfigurarConexion;
|
|
begin
|
|
with TfConfigurarConexion.Create(NIL) do
|
|
try
|
|
TargetURL := ROChannel.TargetURL;
|
|
if ShowModal = mrOk then
|
|
begin
|
|
ROChannel.TargetURL := TargetURL;
|
|
ROChannel.IndyClient.Disconnect;
|
|
ROChannel.IndyClient.Connect;
|
|
dmBase.SalvarConfiguracion;
|
|
end;
|
|
finally
|
|
Free;
|
|
end;
|
|
end;
|
|
|
|
procedure TdmConexion.ConfigurarEncriptacionConexion;
|
|
begin
|
|
with ROChannel.Encryption do
|
|
begin
|
|
EncryptionMethod := tetDES;
|
|
EncryptionSendKey := '127C1A6A4D85F5EFE0A54E104BF7F695CD6C989C1808A57667EF1218E8ED93FC6CDC531631EB9750';
|
|
EncryptionRecvKey := 'C793F1A04FFC8DF91FF9522951F6B6DF921C70B42D74166C6DF0B697797AAA6A243BEC35A9423A51';
|
|
UseCompression := True;
|
|
end;
|
|
end;
|
|
|
|
procedure TdmConexion.DataModuleCreate(Sender: TObject);
|
|
begin
|
|
ConfigurarEncriptacionConexion;
|
|
end;
|
|
|
|
procedure TdmConexion.DataModuleDestroy(Sender: TObject);
|
|
begin
|
|
ROChannel.IndyClient.Disconnect;
|
|
end;
|
|
|
|
function TdmConexion.GetChannel: TROTransportChannel;
|
|
begin
|
|
Result := ROChannel;
|
|
end;
|
|
|
|
function TdmConexion.GetMessage: TROBinMessage;
|
|
begin
|
|
Result := ROMessage;
|
|
end;
|
|
|
|
function TdmConexion.GetTargetURL: String;
|
|
begin
|
|
Result := ROChannel.TargetURL;
|
|
end;
|
|
|
|
function TdmConexion.ProbarConexion(const ATargetURL: String): Boolean;
|
|
var
|
|
AHTTPChannel: TROIndyHTTPChannel;
|
|
AROBinMessage: TROBinMessage;
|
|
ACoService: TRORemoteService;
|
|
begin
|
|
if ATargetURL = '' then
|
|
raise Exception.Create('No se ha indicado la URL del servidor (HayConexion)');
|
|
|
|
AHTTPChannel := TROIndyHTTPChannel.Create(Self);
|
|
AROBinMessage := TROBinMessage.Create(Self);
|
|
ACoService := TRORemoteService.Create(Self);
|
|
|
|
ShowHourglassCursor;
|
|
try
|
|
AROBinMessage.Assign(ROMessage);
|
|
|
|
AHTTPChannel.Assign(ROChannel);
|
|
with AHTTPChannel do
|
|
begin
|
|
Name := 'HTTPChannel';
|
|
|
|
if Length(ATargetURL) > 0 then
|
|
TargetURL := ATargetURL
|
|
else
|
|
TargetURL := ROChannel.TargetURL;
|
|
end;
|
|
if AHTTPChannel.Encryption.EncryptionMethod <> tetNone then
|
|
ShowMessage('funcionando');
|
|
|
|
ACoService.ServiceName := 'srvLogin';
|
|
ACoService.Message := AROBinMessage;
|
|
ACoService.Channel := AHTTPChannel;
|
|
|
|
try
|
|
(ACoService as IsrvLogin).Ping;
|
|
Result := True;
|
|
except
|
|
Result := False;
|
|
end;
|
|
finally
|
|
FreeAndNil(AHTTPChannel);
|
|
FreeAndNil(ACoService);
|
|
FreeAndNil(AROBinMessage);
|
|
HideHourglassCursor;
|
|
end;
|
|
end;
|
|
|
|
procedure TdmConexion.ROChannelFailure(Sender: TROTransportChannel;
|
|
anException: Exception; var aRetry: Boolean);
|
|
begin
|
|
if (Pos(anException.Message, IE_OFFLINE_ERROR) > 0) then
|
|
begin
|
|
// Preguntar al usuario si se quiere conectar
|
|
if InternetGoOnline(PAnsiChar(ROChannel.TargetURL), GetDesktopWindow(), 0) then
|
|
aRetry := True // Si el usuario pulsa en 'Conectar' reintentar la operación
|
|
else
|
|
Abort; // Si el usuario pulsa en 'Seguir desconectado' parar todo
|
|
end
|
|
end;
|
|
|
|
procedure TdmConexion.SetTargetURL(const Value: String);
|
|
begin
|
|
ROChannel.TargetURL := Value;
|
|
end;
|
|
|
|
end.
|