Иллюстрированный самоучитель по 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, чтобы сообщить об этом редактору.