Tecsitel_FactuGES2/Source/Base/Conexion/uDataModuleConexion.pas

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.