В общем было принято решение, перейти на гарантировано рабочие компоненты, при их использовании пришлось подключать библиотеку для параллельного программирования, но теперь наши потребности они полностью удовлетворяют, хоть гораздо менее удобные чем купленные RTC компоненты.
Пример как мы будем работать с новыми компонентами (авторизация на нашем ресурсе):
procedure TForm2.Button1Click(Sender: TObject);
var
psw: String;
begin
psw := '123';
TTask.Run(procedure
var
NetHTTPClient: TNetHTTPClient;
AContentStream: TStringStream;
ContentStream: String;
sha1: String;
IdHashSHA1: TIdHashSHA1;
aURL: String;
begin
try
NetHTTPClient := TNetHTTPClient.Create(nil);
try
AContentStream := TStringStream.Create;
try
IdHashSHA1 := TIdHashSHA1.Create;
try
sha1 := LowerCase(IdHashSHA1.HashBytesAsHex(TidBytes(Bytesof(psw))));
NetHTTPClient.Accept := 'text/html, application/xhtml+xml, */*';
NetHTTPClient.ContentType := 'application/x-www-form-urlencoded';
NetHTTPClient.AcceptEncoding := 'UTF-8';
aURL := 'json=yes&' +
'CompanyID=40&' +
'ModernLogin=' + URL_Encode('{"phone":"XXXXXXXXXX","pwd":"'+sha1+'"}');
NetHTTPClient.Execute('GET', 'XXXXXXXXX/index.php?'+aURL, nil, AContentStream);
//ДОБАВИТЬ все потенциально возможные ошибки связанные с сетью
//ДОБАВИТЬ общий счетчик кол-во незавершенных потоков для операция начала и конец ожидания загрузки данных по сети
AContentStream.Position := 0;
ContentStream := AContentStream.DataString;
TThread.Synchronize(nil, procedure()
begin
//ДОБАВИТЬ обработчик возможных ошибок в ответе
Form2.WorkWithAnswer(ContentStream);
end
);
finally
FreeAndNil(IdHashSHA1);
end;
finally
FreeAndNil(AContentStream);
end;
finally
FreeAndNil(NetHTTPClient);
end;
except
on E: Exception do
begin
//ДОБАВИТЬ обработку ошибка в главном потоке
end;
end;
end
);
end;