|

Flash Ping - ода интерфейсу
Владимир Егоров aka Dr.NET
Спецвыпуск Xakep, номер #030, стр. 030-054-1
(vme@front.ru) & ilich (ilich@atrus.ru)
Взялся я как-то раз пинговать всех и вся. Долго пинговал, вспотел аж. Да вот только устал я не столько от того, что трудно это занятие, а от того, что не особо красивое с эстетической точки зрения. Интерфейс не катит, короче говоря. И задумал я тогда, что неплохо было бы слегка пинг приукрасить.
Flash MF
Красивые штучки в нете, как это общеизвестно, в большинстве своем красочные и отнюдь не статичные. А что же, как не Flash, скажешь ты, может справиться с такими потребностями? Вот и я про то же. Грузим прогу.
На самом деле, флешка в нашем случае делать практически ничего не будет. Вся суть ее существования сводится к организации посылки запроса, получении ответа и вывода его пред твои светлы очи.
Все по порядку. Для запроса позарез надо знать, кого пингуем :). Это я тебе точно говорю. Так вот, значит, нужно текстовое поле, у которого в параметрах текста указаны "Input text" и имя переменной (допустим, "addr"). В это поле можно, и даже нужно, будет вводить IP-адрес или имя хоста пингуемого.
Далее нужна какая-нибудь пимпа, ответственная за начало процесса (в принципе, можно не париться с пимпой, а отследить нажатие Enter'a - будет более похоже на виндовский пинг). Рисование кнопки доверяю всецело тебе, а покамест расскажу тебе про код, который в нее следует запихнуть. Код:
on(press){
link="http://localhost/handler/ping.ashx?address="+addr;
_root.getURL(link,_blank);
_root.f=1;
}
При нажатии мы формируем строку урла, где обращаемся к некоторому "ping.ashx" с некоторым параметром. Хотя этот параметр не такой уж некоторый. Это не что иное, как наша строка с IP-шником. Переменная "f" нужна, чтобы замять чуть-чуть время, ибо ответ получится не сразу.
Тянуть время и выдавать ответ будем через клип. Он не обязательно должен быть виден во время проигрывания, в него просто достаточно вставить маленький скриптик:
onClipEvent(enterFrame){
if(_root.f!=0){
_root.f=_root.f++
};
if (_root.f>25) {
loadVariables("http://localhost/handler/output.txt");
}
}
onClipEvent(data){
if(p=="Неверный адрес!") {_root.output="Неправильный формат адреса"}
else{
_root.output=p;
}
_root.f=0;
}
Первым делом по событию "enterFrame" (каждый кадр) к "f" плюсуется единица. Когда переменная перевалит за 24 (при 12 кадрах в секунду это 2 секунды - нам хватит), грузим переменные их текстовика. Когда загружаются переменные, проверяем их и, если все OK, выводим в текстовое поле "output".
Не забудь, кстати, создать это самое динамическое поле и дать ему нужное имя.
МегаКод
Используем для наших целей так называемый WebHandler, который вызывается по HTTP с единственным параметром GET - адресом тестируемого узла. После обращения этот WebHandler будет создавать текстовый файл с записанным в него выводом программы ping.exe или сообщением об ошибке. Создаем уже известный нам файл "ping.ashx" (расширение *.ashx соответствует .NET WebHandler'у). В его начало пишем строку <%@ WebHandler Language="C#" Class="Ping"%>, которая говорит, что собственно содержит этот файл.
Содержание Вперед на стр. 030-054-2
|