Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Неудобная организация сервера. Коллбеки (http://www.flasher.ru/forum/showthread.php?t=206060)

in4core 10.01.2014 00:30

Неудобная организация сервера. Коллбеки
 
Коллеги, я уж зажрался наверное, но привык работать на приятном исполнении сервера. А тут мне вот что дают :
Вызываю гетом/постом - некий скрипт сервера, получаю ответ. Это все хорошо, все понятно.
В ответ только приходит JSON - в котором не указана команда которую вызвали.
То есть какой бы я запрос не делал на данный сервер - я не могу знать в итоге, какой именно я запрос делал.
Сейчас это общий случай
Код AS3:

private function onRequestComplete(e:Event):void 
                {
                        trace("Data recieved : " + this._urlLoader.data);
 
                        this.dispatchEvent(new ServerEvent(ServerEvent.DATA_RECIEVED , this._urlLoader.data));
                }

Но мне соотвественно оно не пойдет, ибо я должен знать какой был запрос, чтобы подписаться там где нужно. Как здесь использовать коллбеки я тоже не представляю. Допустим 1 запрос идет 10 секунд, а другой 2 секунды, какой придет быстрее неизвестно и push(callBack) - нам не поможет, ибо не будем знать какой из коллбеков брать с массива, так как не знаем и какой запрос выполнился)))

Кто нить работал с такми ПРОГРЕССИВНЫМ!!!! апи... и как выходили из ситуации в рамках ООП, а не костылях

GBee 10.01.2014 02:39

Класс - операция
Создаете объект этого класса, вызываете метод с параметрами. Он внутри нужно запоминает, сам делает запрос, и сам обрабатывает ответ и выдает вам, в каком угодно виде.

Типа
Код AS3:

(new Oper(url, params, 'user_info', callback)).run();
(new Oper(url2, params2, 'user_friends', callback)).run();


Также можно вообще урл зашить в операцию и делать предобработку ответа в классе, приводить джсон к списку друзей или юзеринфе и в коллбек выкидывать готовый для работы объект(ы).

in4core 10.01.2014 02:46

GBee - вот такой вот подход обычно и является другом девочки *утечки памяти*. Я естественно понимаю, как это сделать. Тут именно вопрос как сделать красиво, не пересоздавая каждый раз классы

GBee 10.01.2014 02:51

Вам шашечки или ехать? Это просто обертка над лоадером, вы же все равно новый лоадер создаете.
Можно забацать маппинг тип=запрос+параметры (в хмл или хардкодом или как угодно) и автоматизируете все это, чтобы само все там что-то делало. У вас же все равно где-то есть вызов. Непонятно, у вас урлы что ли не отличаются никак? Тыкаетесь в один, а он разные ответы шлет?

Babylon 10.01.2014 03:10

Т.е вам не пришел комплит от старого запроса, а вы уже новый реквестите. Прикольно.

GBee 10.01.2014 03:12

Цитата:

Т.е вам не пришел комплит от старого запроса, а вы уже новый реквестите. Прикольно.
Эмн, а в чем сарказм?

Babylon 10.01.2014 03:21

Только в том если последовательность ответов имеет значение.

Dukobpa3 10.01.2014 04:51

Я с Пчолом согласен.
Тут "команда" спасет. Один запрос - одна команда. (Либо нечто похожее на RPC.)
Ты ее вызвал - она сама отработала, сама результат получила, сама разобралась что с ответом делать.
Чтобы не было утечек нужно предусмотреть какой-то CommandController. В котором будет храниться список текущих активных команд. Плюс например сама команда будет в это контроллер диспатчить "комплит" по завершению обработки ответа, а контроллер ее грамотно дестроить.

Хотя я бы по голове серверщикам настучал лучше, ибо все мои привычные подходы подразумевают асинхронный подход к общению с сервером. Но если бы "був час та натхнення" - то заморочился бы так как описал.

Isfet 10.01.2014 08:31

я просто делаю массив (колбэков или типов событий для диспатча) и массив реквестов, пушу все в массив , и начинаю загрузку, с нулевого элемента, когда приходит ответ, делаю то что надо с ответом и колбек функцией, и делаю шифт массивов, и перевызываю функцию загрузки.

Babylon 10.01.2014 09:09

Другими словами, ты создаешь очередь и сдвигаешь ее по мере прихода комплита, посылая очередной реквест от следующего элемента в очереди. Если, так, то правильно. Только непонятно, что такое "пушить асинхронно".


Часовой пояс GMT +4, время: 07:33.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.