Black Friday = Pricewatch Bekijk onze selectie van de beste Black Friday-deals en voorkom een miskoop.
Toon posts:

[flex] RemoteObject operation queue

Pagina: 1
Acties:

Verwijderd

Topicstarter
Naar aanleiding dat mijn applicatie meerdere operations achter elkaar pushde, gaf dit problemen in de vorm van "Channel Disconnected". Heb ik besloten om een queue te creeeren voor deze operations! Echter zit ik met het probleem dat mijn ResultEvents niet meer werken. De applicatie functioneerd nu dus niet.

met de functie AddCallQueue('operation','arguments','resultfunction') push ik een operation

Wat doe ik fout, of hoe kan het anders.


code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
package
{
    import flash.events.Event;
    
    import mx.controls.Alert;
    import mx.rpc.events.FaultEvent;
    import mx.rpc.events.ResultEvent;
    import mx.rpc.remoting.Operation;
    import mx.rpc.remoting.RemoteObject;
    
    public class RemoteCon
    {        
        public var RemoteService:RemoteObject;
        private var Queue:Array = new Array;
               
        public function init():void
        {
            RemoteService = new RemoteObject();
            RemoteService.destination = "GenericDestination";
            RemoteService.source = "com.hscc.hscc";
            RemoteService.addEventListener( FaultEvent.FAULT, onError );
        }        

        public function AddCallQueue(op:String,arg:Array = null,rf:Function = null):void {
        var i:Array = new Array;
        i.push(op);
        i.push(arg);
        i.push(rf);
        Queue.push(i);
        QueueNext();    
        }       
        
        private function OnResult(result:ResultEvent):void{
            QueueNext();
        }
        
        
        private function QueueNext():void{
            if (Queue.length > 0){
                trace('Queue called - operation: ' + Queue[0][0] + ' with arguments: ' + Queue[0][1]);
                var call:Operation = new Operation(RemoteService);
                call.name = Queue[0][0];
                call.arguments = Queue[0][1];
                if (Queue[0][2]){
                    trace('Add Eventlistener to ' + Queue[0][0]);
                    call.addEventListener(ResultEvent.RESULT, Queue[0][2]);
                }
                call.send();
                Queue.shift();  
            } else {
                trace('Queue empty');
            }
        }    
        
        private function onError(fault:FaultEvent):void
        {
            Alert.show( "Server raporteerd een fout: " + fault.fault.faultString, "Fout" );
        }

    }
}