Доопросить сервер

Тема в разделе "Delphi - Компоненты", создана пользователем Shouldercannon, 22 май 2011.

  1. Shouldercannon

    Shouldercannon Well-Known Member

    Регистрация:
    25 май 2010
    Сообщения:
    125
    Симпатии:
    0
    Пришедший ответ помещаю в переменную типа string. Далее выполняю проверку на наличие \final\\queryid\ в пришедшем ответе
    Код (Delphi):
    if not (Copy(qqq, Pos('\final\\queryid\', qqq), 16) = '\final\\queryid\') then // опросить повторно и опрашивать до тех пор пока в конце не будет \final\\queryid\
    Как провести цикл проверки?
     
  2. sinkopa

    sinkopa Well-Known Member

    Регистрация:
    17 июн 2009
    Сообщения:
    344
    Симпатии:
    9
    Не вижу проблем...
    За исключением:
    1. Ответ сервера может не содержать '\final\\queryid\' НИКОГДА...
    2. Сервер может не ответить вообще... ну допустим... если обиделся... :rolleyes:

    я бы сделал так:
    Код (Delphi):
    // функция опрашивающая сервер
    function RequestToServer(out qPath: string): Boolean;
    var
    ans: string;
    begin
    Result := False;
    qPath := '';
    // ... спрашиваем у сервера. Если ответил - Result := True;

    if Result then
    qPath := ans;
    end;
    в коде программы
    Код (Delphi):
    procedure TFormClient.Button2Click(Sender: TObject);
    var
    ResponseOK: Boolean;
    AttemptsCount: Integer;
    qqq: string;
    Found : Boolean;
    begin
    Found := False;
    AttemptsCount := 1000; // количество попыток спросить у сервера

    ResponseOK := RequestToServer(qqq);
    if ResponseOK then
    Found := (Copy(qqq, Pos('\final\\queryid\', qqq), 16) = '\final\\queryid\');

    while ResponseOK and not Found do
    begin
    Dec(AttemptsCount);
    Application.ProcessMessages;
    Sleep(100); // чуток подождали
    ResponseOK := (AttemptsCount > 0) and RequestToServer(qqq);
    if ResponseOK then
    Found := (Copy(qqq, Pos('\final\\queryid\', qqq), 16) = '\final\\queryid\');
    end;

    if Found then
    ShowMessage('Дожались!')
    else
    ShowMessage('Не дожались!')

    end;
     
Загрузка...

Поделиться этой страницей