несколько вызовов amfphp с использованием шаблона синглтона при сетевом соединении - PullRequest
0 голосов
/ 23 февраля 2012

Я пытаюсь вызвать AMFPHP два раза для одного метода ActionScript, и в результате происходит только первый вызов.Второй не возвращает ошибку, ничего не предупреждает, более вероятно, что это даже не происходит, и я не уверен, почему.

Вот пример:

public function editSomething():void{
    if(dgChild.selectedIndex == -1){
       Alert.show("You need to select a register in order to edit it.");
       return;
    }
    _parent1.getParentByChild(dgChild.selectedItem.id);
    _parent2.getParent2ByChild(dgChild.selectedItem.id);
}

Когда вызывается этот метод, первый родитель вызывается нормально, а второй - нет.

Переменные _parent1 и _parent2 являются объектами, которые взаимодействуют с PHP и содержат результат:

public class parentDAO{
    //Service or Class that this objectDAO will be communicating with. 
    private const _phpController:String = "parentController/";
    private var _AMFPHP:AMFPHP = AMFPHP.getInstance();

    //ArrayCollection that will be filled with data comming from PHP/Database.        
    [Bindable] private var _dataProviderAeronave:ArrayCollection;
    //I use public getter and setter for this dataProvider

    public function getParentByChild(child_id:int):void{
          _AMFPHP.GATEWAY.call(_phpController + "getParentByChild", new Responder(resultGetParent), child_id);
    }

    private function resultGetParent(result:Array):void{
            dataProviderParent = new ArrayCollection(result); 
    }
}

Теперь, предполагая, что переменная _parent1 - это один объект, объявленный выше, а _parent2 - это другой объект другого класса, очень похожий на этот, и предполагая, что оба взаимодействия работают отлично, проблема возникает сейчас: когдаЯ вызываю оба в одном методе ActionScript.Если я позвоню только одному из них, он будет работать нормально, но когда я вызываю две службы, вторая никогда не вызывается.Я уверен в этом, потому что я могу видеть это через Service Capture Proxy.

Есть идеи?

Ответы [ 2 ]

1 голос
/ 24 февраля 2012

В результате каждый раз, когда класс NetConnection выполняет вызов AMFPHP, он автоматически закрывает соединение с путем.Итак, в основном следующий вызов игнорируется, и я понятия не имею, почему он не отображается в Flash Debugger.Мое решение состояло в том, чтобы всегда проверять, подключен ли шлюз через атрибут «connected» [только для чтения] в классе NetConnection.если оно ложно, я устанавливаю новое соединение и вуаля, скрипт работает отлично.

0 голосов
/ 17 сентября 2012

Есть идеи, как исправить этот класс? У меня более или менее такая же проблема, как у вас. amfphp уже занят при попытке общения, но я широко использую этот класс. по сути, это вызывает ChannelPicker.getInstance (). getNewRemoteObject ()

package communication
{
    import flash.net.NetConnection;

    import mx.core.FlexGlobals;
    import mx.managers.BrowserManager;
    import mx.managers.IBrowserManager;
    import mx.messaging.ChannelSet;
    import mx.messaging.channels.AMFChannel;
    import mx.rpc.remoting.RemoteObject;

    import spark.components.Label;

    public class ChannelPicker
    {
        private static  var instance:ChannelPicker;
        protected var channelSet:ChannelSet= new ChannelSet();
        protected var url:String;

        static public function getInstance():ChannelPicker{
            if(instance == null){
                instance = new ChannelPicker();
            }
            return instance;
        }

        public function ChannelPicker()
        {
            do
            {
                var browser:IBrowserManager = BrowserManager.getInstance();
                browser.init("","");
                url = browser.url;
            }while (url == null || url=="");
                        /*oracle_plajva is project name which ends up being html name of my file so to get current url i need to split it */
            url = url.split(/oracle_plajva.html/)[0] + "Amfphp/index.php";
            var chanel:AMFChannel = new AMFChannel("amfphp", url);
            this.channelSet = new ChannelSet();
            this.channelSet.addChannel(chanel);
        }

        public function getChannelSet():ChannelSet{
            return channelSet;
        }

        public function getNewRemoteObject():RemoteObject{
            var o:RemoteObject = new RemoteObject();
            o.destination = "amfphp";
            o.channelSet = channelSet;
            return o;
        }

        public function getUrl():String{
            return url;
        }
    }
}
...