Недавно замиксовал очередной видео плеер, по принципу плеера Spivaimo.com и ребята хотели, чтоб я грузил огромную XML с путями ко всем видео и изображениям. Я, на свою голову, рассказал им своё видение реализации, как и что надо делать, и главным пунктом была замена XML на AMF.
Через два месяца они сообщили, что закончили работу и можно продолжать дальше. Я не хотел пожалеть ещё раз и промолчал о реализации. ![]()
Надо было быстренько подключить плеер сменив загрузчики данных с XML на AMF и быстренько я написал два класса, так чтоб не заморачиваться и не удвоить вес плеера.
ServiceCaller – объект связанный с одним методом на стороне сервера
ServiceCallerSequence – очередь выполняемых ServiceCaller, один за другим
Ничего особенного, использовать так же просто как и писать подобную приблуду. Для этого надо только указать путь к шлюзу для AMF соединения:
ServiceCaller.gatewayURL = 'http://somesite.com/flashservices/gateway.php';
Не плохо бы сделать класс в котором хранятся все AMF методы
package aw.projects.******.videoplayer.net{ public class ServiceMethods extends Object{ static public const GET_FULL_CONTENT:String = 'GetContent.get_full_content'; static public const GET_VIDEO_URL:String = 'GetSettings.get_video_url'; … } }
Пример использования ServiceCaller:
var caller:ServiceCaller = new ServiceCaller(ServiceMethods.GET_STATUS, this.getStatusSuccessHandler, this.getStatusErrorHandler); caller.call(this._statusCode); … protected function getStatusSuccessHandler(status:Object):void{ … }
В конструкторе принимает имя удалённого метода(процедуры, если хотите) и ссылки на функции обратного вызова для вернувшегося результата и для ошибки. В метод ServiceCaller.call() передаются аргументы для удалённого метода.
Пример использования ServiceCallerSequence:
protected function loadData():void{ var sequence:ServiceCallerSequence = new ServiceCallerSequence(); sequence.call(ServiceMethods.GET_VIDEO_URL, this.setURLTemplatesSuccessHandler, this.setURLTemplatesErrorHandler); sequence.call(ServiceMethods.GET_CODE_URL, this.getCodeURLSuccessHandler, this.getCodeURLErrorHandler); sequence.call(ServiceMethods.GET_HTML_CODE, this.getHTMLCodeSuccessHandler, this.getHTMLCodeErrorHandler); sequence.call(ServiceMethods.GET_FULL_CONTENT, this.getFullContentSuccessHandler, this.getFullContentErrorHandler); }
В метод ServiceCallerSequence.call() передаётся всё сразу – имя удалённого метода, ссылки на методы обратного вызова и аргументы для удалённого метода. Обработка запросов начинается сразу.
ServiceCaller, исходный код (42)Метки: AMF, NetConnection, RPC