Обёртка NetConnection для RPC

Недавно замиксовал очередной видео плеер, по принципу плеера Spivaimo.com и ребята хотели, чтоб я грузил огромную XML с путями ко всем видео и изображениям. Я, на свою голову, рассказал им своё видение реализации, как и что надо делать, и главным пунктом была замена XML на AMF.

Через два месяца они сообщили, что закончили работу и можно продолжать дальше. Я не хотел пожалеть ещё раз и промолчал о реализации. :-)
Надо было быстренько подключить плеер сменив загрузчики данных с XML на AMF и быстренько я написал два класса, так чтоб не заморачиваться и не удвоить вес плеера.

ServiceCaller – объект связанный с одним методом на стороне сервера

ServiceCallerSequence – очередь выполняемых ServiceCaller, один за другим

Ничего особенного, использовать так же просто как и писать подобную приблуду. Для этого надо только указать путь к шлюзу для AMF соединения:

  1. ServiceCaller.gatewayURL = 'http://somesite.com/flashservices/gateway.php';

Не плохо бы сделать класс в котором хранятся все AMF методы

  1. package aw.projects.******.videoplayer.net{
  2. public class ServiceMethods extends Object{
  3. static public const GET_FULL_CONTENT:String = 'GetContent.get_full_content';
  4. static public const GET_VIDEO_URL:String = 'GetSettings.get_video_url';
  5. }
  6. }

Пример использования ServiceCaller:

  1. var caller:ServiceCaller = new ServiceCaller(ServiceMethods.GET_STATUS, this.getStatusSuccessHandler, this.getStatusErrorHandler);
  2. caller.call(this._statusCode);
  3. protected function getStatusSuccessHandler(status:Object):void{
  4. }

В конструкторе принимает имя удалённого метода(процедуры, если хотите) и ссылки на функции обратного вызова для вернувшегося результата и для ошибки. В метод ServiceCaller.call() передаются аргументы для удалённого метода.

Пример использования ServiceCallerSequence:

  1. protected function loadData():void{
  2. var sequence:ServiceCallerSequence = new ServiceCallerSequence();
  3. sequence.call(ServiceMethods.GET_VIDEO_URL, this.setURLTemplatesSuccessHandler, this.setURLTemplatesErrorHandler);
  4. sequence.call(ServiceMethods.GET_CODE_URL, this.getCodeURLSuccessHandler, this.getCodeURLErrorHandler);
  5. sequence.call(ServiceMethods.GET_HTML_CODE, this.getHTMLCodeSuccessHandler, this.getHTMLCodeErrorHandler);
  6. sequence.call(ServiceMethods.GET_FULL_CONTENT, this.getFullContentSuccessHandler, this.getFullContentErrorHandler);
  7. }

В метод ServiceCallerSequence.call() передаётся всё сразу – имя удалённого метода, ссылки на методы обратного вызова и аргументы для удалённого метода. Обработка запросов начинается сразу.

ServiceCaller, исходный код (42)

Метки: , ,

Добавить комментарий

Вы должны авторизоваться для отправки комментария.