Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 10.01.2014, 00:30
in4core вне форума Посмотреть профиль Отправить личное сообщение для in4core Найти все сообщения от in4core
  № 1  
Ответить с цитированием
in4core
[+4 06.05.14]
 
Аватар для in4core

Регистрация: Mar 2009
Сообщений: 4,219
Записей в блоге: 14
По умолчанию Неудобная организация сервера. Коллбеки

Коллеги, я уж зажрался наверное, но привык работать на приятном исполнении сервера. А тут мне вот что дают :
Вызываю гетом/постом - некий скрипт сервера, получаю ответ. Это все хорошо, все понятно.
В ответ только приходит 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) - нам не поможет, ибо не будем знать какой из коллбеков брать с массива, так как не знаем и какой запрос выполнился)))

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

Старый 10.01.2014, 02:39
GBee вне форума Посмотреть профиль Отправить личное сообщение для GBee Найти все сообщения от GBee
  № 2  
Ответить с цитированием
GBee
 
Аватар для GBee

Регистрация: Jan 2009
Сообщений: 3,067
Записей в блоге: 3
Отправить сообщение для GBee с помощью Skype™
Класс - операция
Создаете объект этого класса, вызываете метод с параметрами. Он внутри нужно запоминает, сам делает запрос, и сам обрабатывает ответ и выдает вам, в каком угодно виде.

Типа
Код AS3:
(new Oper(url, params, 'user_info', callback)).run();
(new Oper(url2, params2, 'user_friends', callback)).run();

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

Старый 10.01.2014, 02:46
in4core вне форума Посмотреть профиль Отправить личное сообщение для in4core Найти все сообщения от in4core
  № 3  
Ответить с цитированием
in4core
[+4 06.05.14]
 
Аватар для in4core

Регистрация: Mar 2009
Сообщений: 4,219
Записей в блоге: 14
GBee - вот такой вот подход обычно и является другом девочки *утечки памяти*. Я естественно понимаю, как это сделать. Тут именно вопрос как сделать красиво, не пересоздавая каждый раз классы
__________________
Марк Tween

Старый 10.01.2014, 02:51
GBee вне форума Посмотреть профиль Отправить личное сообщение для GBee Найти все сообщения от GBee
  № 4  
Ответить с цитированием
GBee
 
Аватар для GBee

Регистрация: Jan 2009
Сообщений: 3,067
Записей в блоге: 3
Отправить сообщение для GBee с помощью Skype™
Вам шашечки или ехать? Это просто обертка над лоадером, вы же все равно новый лоадер создаете.
Можно забацать маппинг тип=запрос+параметры (в хмл или хардкодом или как угодно) и автоматизируете все это, чтобы само все там что-то делало. У вас же все равно где-то есть вызов. Непонятно, у вас урлы что ли не отличаются никак? Тыкаетесь в один, а он разные ответы шлет?
__________________
Чтобы доказать, что вы не робот, причините вред другому человеку.

Старый 10.01.2014, 03:10
Babylon вне форума Посмотреть профиль Отправить личное сообщение для Babylon Посетить домашнюю страницу Babylon Найти все сообщения от Babylon
  № 5  
Ответить с цитированием
Babylon
[+1 25.10.13]
[+4 18.03.14]
 
Аватар для Babylon

Регистрация: Jan 2006
Адрес: Москва, Зеленоград
Сообщений: 653
Отправить сообщение для Babylon с помощью ICQ
Т.е вам не пришел комплит от старого запроса, а вы уже новый реквестите. Прикольно.

Старый 10.01.2014, 03:12
GBee вне форума Посмотреть профиль Отправить личное сообщение для GBee Найти все сообщения от GBee
  № 6  
Ответить с цитированием
GBee
 
Аватар для GBee

Регистрация: Jan 2009
Сообщений: 3,067
Записей в блоге: 3
Отправить сообщение для GBee с помощью Skype™
Цитата:
Т.е вам не пришел комплит от старого запроса, а вы уже новый реквестите. Прикольно.
Эмн, а в чем сарказм?
__________________
Чтобы доказать, что вы не робот, причините вред другому человеку.

Старый 10.01.2014, 03:21
Babylon вне форума Посмотреть профиль Отправить личное сообщение для Babylon Посетить домашнюю страницу Babylon Найти все сообщения от Babylon
  № 7  
Ответить с цитированием
Babylon
[+1 25.10.13]
[+4 18.03.14]
 
Аватар для Babylon

Регистрация: Jan 2006
Адрес: Москва, Зеленоград
Сообщений: 653
Отправить сообщение для Babylon с помощью ICQ
Только в том если последовательность ответов имеет значение.

Старый 10.01.2014, 04:51
Dukobpa3 вне форума Посмотреть профиль Отправить личное сообщение для Dukobpa3 Найти все сообщения от Dukobpa3
  № 8  
Ответить с цитированием
Dukobpa3
 
Аватар для Dukobpa3

блогер
Регистрация: Oct 2010
Адрес: Киев
Сообщений: 1,678
Записей в блоге: 12
Отправить сообщение для Dukobpa3 с помощью Skype™
Я с Пчолом согласен.
Тут "команда" спасет. Один запрос - одна команда. (Либо нечто похожее на RPC.)
Ты ее вызвал - она сама отработала, сама результат получила, сама разобралась что с ответом делать.
Чтобы не было утечек нужно предусмотреть какой-то CommandController. В котором будет храниться список текущих активных команд. Плюс например сама команда будет в это контроллер диспатчить "комплит" по завершению обработки ответа, а контроллер ее грамотно дестроить.

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

Старый 10.01.2014, 08:31
Isfet вне форума Посмотреть профиль Отправить личное сообщение для Isfet Найти все сообщения от Isfet
  № 9  
Ответить с цитированием
Isfet

Регистрация: Mar 2012
Адрес: г.Новосибирск
Сообщений: 381
я просто делаю массив (колбэков или типов событий для диспатча) и массив реквестов, пушу все в массив , и начинаю загрузку, с нулевого элемента, когда приходит ответ, делаю то что надо с ответом и колбек функцией, и делаю шифт массивов, и перевызываю функцию загрузки.


Последний раз редактировалось Isfet; 10.01.2014 в 11:22.
Старый 10.01.2014, 09:09
Babylon вне форума Посмотреть профиль Отправить личное сообщение для Babylon Посетить домашнюю страницу Babylon Найти все сообщения от Babylon
  № 10  
Ответить с цитированием
Babylon
[+1 25.10.13]
[+4 18.03.14]
 
Аватар для Babylon

Регистрация: Jan 2006
Адрес: Москва, Зеленоград
Сообщений: 653
Отправить сообщение для Babylon с помощью ICQ
Другими словами, ты создаешь очередь и сдвигаешь ее по мере прихода комплита, посылая очередной реквест от следующего элемента в очереди. Если, так, то правильно. Только непонятно, что такое "пушить асинхронно".

Создать новую тему Ответ Часовой пояс GMT +4, время: 03:18.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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