Предыдущие части
Начало, вывод текста на экран , текст по русски, обновление странички. Практика - создаем своего телефонного оракула
Часть вторая, ввод информации пользователем Практика - давайте представимся.
В третей части пойдет речь о выводе графической информации.
Для этого используется тег CiscoIPPhoneImageFile.
Позволяет выводить на экраны телефонов изображения в формате PNG. Существуют следующие ограничения по размерам.
Cisco Unified IP Phone 7920 128 x 59 Grayscale
Cisco Unified IP Phone 7921G, 7925G, 7926G, 7925G-EX 176 x 140 Color 16bit
Cisco Unified IP Phone 7937G 255x128 Grayscale
Cisco Unified IP Phones 7940G/60G 133 x 65 Grayscale
Cisco Unified IP Phones 7941G, 7941G-GE, 7942G, 7961G, 7961G-GE, 7962G 298 x 144 Grayscale
Cisco Unified IP Phones 7945G, 7965G 298 x 156 Color 16bit
Cisco Unified IP Phone 7970G/7971G 298 x 168 Color 12bit
Cisco Unified IP Phone 7975G 298 x 168 Color 16bit
Cisco IP Communicator 298 x 168 Color 24bit
Cisco Unified IP Phones 6921, 6961 396 x 81 Monochrome
Cisco Unified IP Phones 6941, 6945 396 x 162 Monochrome
Cisco Unified IP Conference Station 8831 396 x 162 Monochrome
Cisco IP Phone 8811 559 x 265 Monochrome
Cisco IP Phone 8841, 8845, 8851, 8851NR, 8861, and 8865 559 x 265 Color 24bit
Cisco Wireless IP Phone 8821 240 x 215
Cisco Unified IP Phones 8941, 8945 498 x 289 Color 24bit
Cisco Unified IP Phones 8961, 9951, 9971 498 x 289 Color 24bit
Сама XML страница в общем виде выглядит следующим образом.
Image Title goes here
Prompt text goes here
Horizontal position of graphic
Vertical position of graphic
Points to the PNG image
Опциональный атрибут WindowMode имеет значения Normal (значение по умолчанию) и Wide (поддерживается аппаратами 7941, 7942, 7945, 7961, 7962, 7965, 7970, 7971 и 7975). В режиме Wide, на некоторых аппаратах можно типа выводить картинки побольше, но у меня нигде это нормально не заработало (не очень-то и хотелось).
http://server:8080:/ttt.png Адрес изображения в сети.
Пример XML файла
Timur Akhmetov
Личная карточка
-1
-1
http://server:8080/pic.png Результат
А теперь совместим знания из предыдущей части с этими.
У меня есть система мониторинга. По определенному URL она генерирует PNG-файлы для заданного объекта, с заданными размерами (правда удачно совпало? :) ). Хочется что-бы была возможность вводить ID объекта и получать на экране телефона графические результаты мониторинга.
Итак. XML файл для запроса ID объекта.
PRTG Object ID
http://SERVER:8080/PRTG_ID.asp?
Enter ID?
id
2060
N
ASP скрипт.
<%@ Language=JavaScript%>
<%
Response.ContentType = "text/xml";
Response.Write("");
Response.AddHeader("Refresh", "10; url=
http://SERVER:8080/PRTG_ID.asp?&id="+Request.QueryString("&id"));
Response.Write("");
Response.Write("
Object ID "+Request.QueryString("&id")+"");
Response.Write("-1");
Response.Write("-1");
Response.Write("
http://PRTG:8080/graphimg.png?id="+Request.QueryString("&id")+"&width=298&height=144");
Response.Write("");
Response.Flush();
Response.End();
Session.Abandon();
%>
Ключевые моменты.
Запрашиваем у пользователя значение id, которое может быть введено только цифрами (N).
Картинка запрашивается с сервера мониторинга по следующему URL
http://PRTG:8080/graphimg.png?id=2060&width=298&height=144Тут id= идентификатор объекта. width=298&height=144 размеры изображения. Я поставил именно такие размеры, что-бы работало даже на аппарате 7941.
Нам надо сформировать XML, в котором присутствует знак &. Но он и ещё несколько спец.символов используются XML броузером телефона для спец-нужд. В таблице они все перечислены. Их надо заменять.
Character
Name
Escape Sequence
&
Ampersand
&
"
Quote
"
'
Apostrophe
'
<
Left angle bracket
<
>
Right angle bracket
>
Получается "страшная" строка скрипта
Response.Write("
http://PRTG:8080/graphimg.png?id="+Request.QueryString("&id")+"&width=298&height=144");
Причем в некоторых местах & подменяется на & , а в некоторых нет. Идея в том, что конструкция Request.QueryString("&id") обрабатывается сервером и не требует замены, а конструкция width=298& предназначена для телефона.
Так-же в странице делаем обновление содержимого раз в 10 секунд Response.AddHeader("Refresh", "10; url=
http://SERVER:8080/PRTG_ID.asp?&id="+Request.QueryString("&id"));.
А в окне с картинкой делаем подпись с id объекта, что-бы не забыть "а чего вообще смотрим" Response.Write("
Object ID "+Request.QueryString("&id")+""); .
Результат на экране.
С экрана Cisco IP Communicator
График на экране телефона Cisco 7941
При нажатии кнопки "Далее" - принудительное обновление картинки, при нажатии "Выход" - переходим обратно к выбору ID.
Этои кнопки можно переопределить... Но это отдельная тема...