function TDM_S2S.Registrar_Cliente(var Parametro: ClientRegisterRQ_Type): TS2S_Registrar_Cliente_Rec;
var
CCDataTest : ServicePortType;
LResultado : ClientRegisterRS;
begin
With Mod_Auxiliar do
if (Activar_Logs and (Log_Level >= L_Verbose)) then
begin
Registro_Log(Archivo_Logs,Prefix,'Registrar_Cliente - URL : ' + UnicodeString(G_Server_URL));
end;
Poll.Enabled := False; // Paro Timer para no pisar respuestas
if Respuesta_Pendiente then // Solo a Efectos de evitar supoerposiciones de comandos
begin
With Mod_Auxiliar do
if (Activar_Logs and (Log_Level >= L_Debug)) then
begin
Registro_Log(Archivo_Logs,Prefix,'Registrar_Cliente - Esperando Respuesta Pendiente');
end;
Timeout_Registro := False;
TO_Registro.Interval := 5000;
TO_Registro.Enabled := True;
Repeat
Application.HandleMessage;
Demora(25);
Until ((Not Respuesta_Pendiente) OR (Timeout_Registro));
TO_Registro.Enabled := False;
end;
Respuesta_Pendiente := True; // Ahora lo Congelo PAra mi
CCDataTest := wst_CreateInstance_ServicePortType('SOAP:', 'HTTP:',G_Server_URL);
// Revisamos Parametros
if Parametro.LocationID = '' then
begin
FDato_Valido := True;
FResultado := S2S_ANS_Location_ID_Invalido;
LResultado := ClientRegisterRS.Create;
LResultado.ResponseDesc := 'Location_ID Invalido';
LResultado.ResponseCode := S2S_ANS_Location_ID_Invalido;
LResultado.SeqNum := 0;
With Mod_Auxiliar do
if (Activar_Logs and (Log_Level >= L_Info)) then
begin
Registro_Log(Archivo_Logs,Prefix,'Registrar_Cliente - Location ID - INVALIDO');
end;
Result.ResponseCode := LResultado.ResponseCode;
Result.ResponseDesc := LResultado.ResponseDesc;
Result.SeqNum := LResultado.SeqNum;
LResultado.Free;
FRe_Enter := False;
RX_TO.Enabled := False;
Respuesta_Pendiente := False; // Ahora lo libero
Poll.Enabled := True; // Largo Timer
Exit;
end;
if Parametro.SeqNumRQ = 0 then
begin
FDato_Valido := True;
LResultado := ClientRegisterRS.Create;
LResultado.ResponseCode := S2S_ANS_SEQ_NUM_Invalido;
LResultado.ResponseDesc := 'Secuence Number Invalido';
LResultado.SeqNum := 0;
With Mod_Auxiliar do
if (Activar_Logs and (Log_Level >= L_Info)) then
begin
Registro_Log(Archivo_Logs,Prefix,'Registrar_Cliente - Seq_Num - INVALIDO');
end;
Result.ResponseCode := LResultado.ResponseCode;
Result.ResponseDesc := LResultado.ResponseDesc;
Result.SeqNum := LResultado.SeqNum;
LResultado.Free;
FRe_Enter := False;
RX_TO.Enabled := False;
Respuesta_Pendiente := False; // Ahora lo libero
Poll.Enabled := True; // Largo Timer
Exit;
end;
Fregistrando := True;
With Mod_Auxiliar do
if (Activar_Logs and (Log_Level >= L_Verbose)) then
begin
Registro_Log(Archivo_Logs,Prefix,'Registrar_Cliente - Parametros de Conexión OK');
end;
LResultado := ClientRegisterRS.Create;
try
LResultado := CCDataTest.ClientRegisterRQ(Parametro);
except
on E : Exception do
begin
LResultado.ResponseDesc := UnicodeString(E.Message);
LResultado.ResponseCode := S2S_COMM_ERROR;
LResultado.SeqNum := 0;
FStatus := S2S_COMM_ERROR;
FRe_Enter := False;
FDato_Valido := True;
With Mod_Auxiliar do
if (Activar_Logs and (Log_Level >= L_Info)) then
begin
Registro_Log(Archivo_Logs,Prefix,'Registrar_Cliente - Exception : ' + UnicodeString(E.Message));
end;
Respuesta_Pendiente := False;
Result.ResponseCode := LResultado.ResponseCode;
Result.ResponseDesc := LResultado.ResponseDesc;
Result.SeqNum := LResultado.SeqNum;
LResultado.Free;
exit;
end;
end;
Respuesta_Pendiente := False;
FRegistrando := False;
RX_TO.Enabled := False;
Result.ResponseCode := LResultado.ResponseCode;
Result.ResponseDesc := LResultado.ResponseDesc;
Result.SeqNum := LResultado.SeqNum;
LResultado.Free;
FDato_Valido := True;
FResultado := Result.ResponseCode;
FRe_Enter := False;
With Mod_Auxiliar do
if (Activar_Logs and (Log_Level >= L_Debug)) then
begin
Registro_Log(Archivo_Logs,Prefix,'Registrar_Cliente - Response Code : ' + UnicodeString(IntToStr(Result.ResponseCode)));
Registro_Log(Archivo_Logs,Prefix,'Registrar_Cliente - Response Desc : ' + Result.ResponseDesc);
end;
if (Result.ResponseCode = 0) AND (FResultado = 0) then
begin
FStatus := S2S_REGISTRADO;
Equipo.Seq_Num := Result.SeqNum;
With Mod_Auxiliar do
if (Activar_Logs and (Log_Level >= L_Debug)) then
begin
Registro_Log(Archivo_Logs, Prefix,'Registrar_Cliente - REGISTRADO OK');
end;
end
else
if FStatus > 0 then
begin
FStatus := S2S_DESREGISTRADO;
With Mod_Auxiliar do
if (Activar_Logs and (Log_Level >= L_Info)) then
begin
Registro_Log(Archivo_Logs,Prefix,'Registrar_Cliente - DESREGISTRADO');
Registro_Log(Archivo_Logs,Prefix,'Registrar_Cliente - ResponseCode : ' + UnicodeString(IntToStr(FResultado)));
end;
end;
Poll.Enabled := True; // Habilito Timer de Polling nuevamente
Respuesta_Pendiente := False;
end;