• Сервис онлайн-записи на собственном Telegram-боте
    Тот, кто работает в сфере услуг, знает — без ведения записи клиентов никуда. Мало того, что нужно видеть свое расписание, но и напоминать клиентам о визитах тоже. Нашли самый бюджетный и оптимальный вариант: сервис VisitTime.
    Для новых пользователей первый месяц бесплатно.
    Чат-бот для мастеров и специалистов, который упрощает ведение записей:
    Сам записывает клиентов и напоминает им о визите;
    Персонализирует скидки, чаевые, кэшбэк и предоплаты;
    Увеличивает доходимость и помогает больше зарабатывать;
    Начать пользоваться сервисом


  • Иллюстрированный самоучитель по Architecture .NET

    Добавление на сервер обработки управляющей структуры while-endwhile

    Следующий пример показывает использование цикла с условием окончания while-endwhile в соответствующем файле while_endwhile.srf. Чтобы сохранить количество выполнений цикла, был добавлен компонент данных типа int, называемый count (счетчик). Этой переменной в конструкторе класса обработчика присваивается начальное значение, равное 0, а затем при каждом обращении к ShouldThisBeDoneAgain ("должно ли это быть сделано снова") значение count увеличивается на единицу.

    Итерация продолжается до тех пор, пока выражение count <= 10 не станет ложным. Обратите внимание, что в коде C++ на самом деле цикла с условием окончания while нет, а находится он в соответствующем .srf-файле. Кроме того, в классе обработчика имеется два метода замены дескрипторов GetNextNumber (Получить следующее число) и GetNextNumberSquared (Получить квадрат следующего числа). Эти методы соответствуют двум дескрипторам из .srf-файла, появляющимся в цикле с условием окончания while.

    // Обработчик для проверки цикла с условием
    // окончания while – endwhile
    [request_handler("while_endwhile")]
    class C_while_endwhile_ATLServerAppHandler
    {
    protected: // защищенный
    int count; // счетчик
    C_while_endwhile_ATLServerAppHandler(): count(0) // счетчик
    {
    }
    [ tag_name(name="ShouldThisBeDoneAgain") ]
    HTTP_CODE ShouldThisBeDoneAgain(void)
    {
    count++; // счетчик++;
    if (count <= 10) // если (счетчик <= 10)
    return HTTP_SUCCESS;
    else
    return HTTP_S_FALSE;
    }
    [ tag_name(name="GetNextNumber") ]
    HTTP_CODE GetNextNumber(void)
    {
    m_HttpResponse
    << "The square of " << count << " is "; // Квадрат
    //счетчика
    return HTTP_SUCCESS;
    }
    [ tag_name(name="GetNextNumberSquared") ]
    HTTP_CODE GetNextNumberSquared(void)
    {
    m_HttpResponse << count*count;
    return HTTP_SUCCESS;
    }
    };
    

    Соответствующий файл while_endwhile.srf отображает таблицу с числами и их квадратами. В примере видно, что дескрипторы могут быть вложены так, как требуется. Это приводит к тому, что дескрипторы GetNextNumber и GetNextNumberSquared заменяются несколько раз [Комментарии вида <! – комментарий – > вставлены для удобства – Прим ред.].

    <html>
    <BODY> <! – ТЕЛО – >
    <Р>{{handler ATLServerApp.dll/while_endwhile}}</P> <! – обработчик – >
    <р>
    <TABLE> <! – таблица – >
    {{while ShouldThisBeDoneAgain}}
    <TR>
    <TD>{{GetNextNumber}}</TD>
    <TD>{{GetNextNumberSquared}}</TD>
    </TR>
    {{endwhile}}
    </TABLE> <! – таблица – >
    </P>
    </BODY> <! – тело – >
    </html>
    

    Результат можно увидеть, перейдя по адресу http://localhost/ATLServerApp/while_endwhile.srf. Что получается при этом переходе, показано на рис. 12.12.

    Иллюстрированный самоучитель по Architecture .NET › Web-узлы и Web-службы, работающие на основе ATL Server › Добавление на сервер обработки управляющей структуры while-endwhile
    Рис. 12.12. Просмотр while_endwhile.srf

    Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.