Форум 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)

Isfet 10.01.2014 10:00

имелось ввиду, что можно сразу много запросов добавить из любой части программы, а не ждать выполнения каждого, чтобы добавить следующий

Babylon 10.01.2014 10:54

Слово "асинхронно" не несет никакой смысловой нагрузки, потому как непонятно как еще можно формировать очередь на одном клиенте. Кстати, в соседней ветке правильный подход показан с флоксом.

Isfet 10.01.2014 11:21

удалю его раз оно вас так напрягает)

in4core 10.01.2014 13:06

Спасибо парни. Значит будем работать по методу пчела и дикобраза вместе.
Насутчать им по пальцам надо конечно, но что поделать - говорят у нас уже как сто лет двиг написан и мы, такие вот умные - с нашим АПИ уже все работабют и никто не жалуется ( типа на разных языках ) .

Добавлено через 38 минут
Если кому интересно, как я сделал

Код AS3:

package com.combet.controllers 
{
        import com.combet.events.ServerEvent;
        /**
        * ...
        * @author in4core progression lab
        */

        public final class ServerProcessor extends Object
        {
                public static const SERVER:String = "";
                public static const AUTHORIZE:String = "";
                public static const GET_GAMES_FIELDS:String = "";
                public static const GET_MENU_HEADERS:String = "";
                public static const GET:String = "get";
                public static const POST:String = "post";
 
                public function ServerProcessor()
                {
 
                }
 
                public static function runProcess(name:String, callBack:Function , args:Object = null, reqMethod:String = GET):void
                {
                        var sc:ServerConnection = new ServerConnection();
                        sc.callBack = callBack;
                        sc.execute(SERVER + name, args, reqMethod);
                }
        }
 
}
 
package com.combet.controllers
{
        import com.combet.events.ServerEvent;
        import flash.events.Event;
        import flash.events.EventDispatcher;
        import flash.events.IEventDispatcher;
        import flash.net.URLLoader;
        import flash.net.URLLoaderDataFormat;
        import flash.net.URLRequest;
        import flash.net.URLRequestMethod;
 
        /**
        * ...
        * @author in4core progression lab
        */

        public class ServerConnection extends EventDispatcher
        {
                private var _urlLoader:URLLoader = new URLLoader();
                private var _callBack:Function = null;
 
                public function ServerConnection()
                {
                        this._urlLoader.addEventListener(Event.COMPLETE, onRequestComplete);
                }
 
                private function onRequestComplete(e:Event):void
                {
                        trace("Data recieved : " + this._urlLoader.data);
 
                        this._urlLoader.removeEventListener(Event.COMPLETE, onRequestComplete);
                        this._callBack(this._urlLoader.data);
                }
 
                public function execute(command:String , args:Object = null , method:String = "get"):void
                {
                        var req:URLRequest = new URLRequest(command);
                        if (method === "get") req.method = URLRequestMethod.GET;
                        else if(method === "post") req.method = URLRequestMethod.POST;
                        if(args) req.data = args;
                        this._urlLoader.load(req);
                }
 
                public function set callBack(value:Function):void
                {
                        this._callBack = value;
                }
        }
 
}

Единственно, что я бы хотел занулять после всего этого весь использованный ServerConnection , но думаю GC и сам соберет его, раз ссылок не остается так и так.

Dukobpa3 10.01.2014 13:53

Лучше бы не показывал.

С этого момента уже весело стало.
Код AS3:

 extends Object


GBee 10.01.2014 14:09

По пальцам стучать он собрался.

Код AS3:

this._param

Примерно переводится как "Мой мой только мой приватный параметр"

Dukobpa3 10.01.2014 14:38

Короче конструктивнее отвечу, а то совесть мучает.

0. То что ты показал - дефолтное решение, с которого ты и начал, тупо хрень которая вместо подписки на комплит дает регистрацию коллбеком. Хотя суть реально та же. Твоя обертка ничем не помогает решить вопрос.
1. Кто угодно, откуда угодно может заспамить месадж с какой угодно обработкой(коллбеком).
2. ServerConnection - раз уж на то пошло - лучше сделать интернал классом, чтоб напрямую к нему доступа не было. Только через твою фабрику-манагер.
3. Никаких подписок на ерроры и таймауты.
4. Никакого кеша/пула/очереди. Тупо создал лоадер в небытие и забыл про него.
5. Удаляться мусорщиком твои лоадеры не будут из-за колбека. Возможность "отписки" не предусмотрена.
6. Создание лоадера происходит идентично дефолтному - тупо урл гет-пост и параметр. Человеческий фактор не исключен ни на грамм.
7. Коллбеки нетипизированные (еще один пункт к человечкому фактору). Типизация коллбека во флеше проблематична. Но никто не отменял стратегию или как минимум интерфейс, ограничивающий г-нокод в этих местах.

Итого вопрос: А что ты сделал то? И зачем? С таким подходом - чем урллоадер напрямую хуже, кроме экономии копипасты пяти строк кода подписки на комплит?

Добавлено через 6 минут
А столько текста и негодования я вылил по этому вопросу потому что в нашем проекте умельцы запилили такую же систему.
И уж поверь мне. Она не рабочая. Или делай нормально или лучше юзай лоадер напрямую.

Akopalipsis 10.01.2014 14:58

Цитата:

5. Удаляться мусорщиком твои лоадеры не будут из-за колбека. Возможность "отписки" не предусмотрена.
А разве в таком случаи, калбек помешает удалению? Мне почему-то всегда казалось, что вот если бы на сам класс у кого-то ссылка была, то это помешало удалению.

Dukobpa3 10.01.2014 15:02

Ну с этим я может и загнался.
Остальное в силе.

in4core 10.01.2014 15:30

Код AS3:

1. Кто угодно, откуда угодно может заспамить месадж с какой угодно обработкой(коллбеком).

Что значит кто угодно? Кто ? о чем вообще речь? Никто никуда заспамить ничего не может, к серверным скриптам обратиться нельзя, пока не пройдена авторизация логина-пароля. Или ты про само приложение и работы над ним? Нет нет, тут речь об этом не идет, все предельно просто, никаких сложных структур, чтобы можно было нарваться на ошибку.
Тут о безопасности речь не идет, она нас не беспокоит. Тут именно стоял вопрос, чтобы не было проблем, что какое то соыбтие придет раньше и мы не знаем какое. А тут все собственно понятно. Пускай коллбеки, ну куда деваться.
А чего у вас там в проекте столо не рабочим то? Вполне себе быдло-подход на быдло-сервер, все логично.

Цитата:

extends Object
Всегда пишу классам не имеющим эестенд на что то другое, в любом случае он наследник Object - как ни крути, но выглядит приятнее ПОТОМУ, что у нас все таки типизированный язык, позволяющий указать типизацию даже в пустышках.

На остальные 7 пунктов отвечать не буду, ты прав - но ты прав в контесте своего проекта, тут так скажем совсем мелкая поделка в 100 строчек, а не огромная игра, чтобы парится.
А вопрос я задал, ибо мне было интересно , как подругому оно могло решаться.


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

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