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"%>, которая говорит, что собственно содержит этот файл. |