2011-01-13 13 views
0

Ich versuche eine Klasse zu erstellen, die die Anzahl der Netzwerkverbindungen um einen bestimmten Betrag staffelt, um nicht zu viel Druck auf meinen Server auszuüben, und daher habe ich kein Dutzend Netzverbindungen herum in meinem Code. Ich möchte eine Klasse, an die ich einen Aufruf senden kann, fügt die Klasse den Aufruf der Warteschlange hinzu, und dann etwa jede Sekunde, ob etwas in der Warteschlange ist, und wenn ja, ruft es an. Das habe ich bisher. JetztAS3/Flex 3 Staggered Remoting + Warteschlange

package net 
{ 
import flash.events.TimerEvent; 
import flash.net.NetConnection; 
import flash.net.Responder; 
import flash.utils.Timer; 


public class Server 
{ 
    private static var gateway:String = "http://localhost/gateway.php"; 
    private static var queue:Vector.<ServerNode> 
    private static var nc:NetConnection; 
    private static var instance:Server = null; 
    private static var res:Responder; 
    private var timer:Timer; 

    public function Server(e:ServerEnforcer) { 
    nc = new NetConnection(); 
    queue = new Vector.<ServerNode>(); 
    timer = new Timer(1000); 
    timer.addEventListener(TimerEvent.TIMER, execCall); 
    timer.start(); 
    } 

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

    private function execCall(e:Event):void { 
    if (queue.length > 0) { 
    var node:ServerNode = queue.pop(); 
    nc.call(node.method, node.res, node.args); 
    } 
    } 

    public function call(method:String, success:Function, failure:Function, ...args):void { 
    queue.unshift(new ServerNode(method, success, failure, args)); 
    } 

    private function serverFailure(event:Object):void { 
    trace("Server Failure : " + event.description); 
    } 
} 
} 
import flash.net.Responder; 

class ServerEnforcer { } 

class ServerNode { 
public var method:String; 
public var success:Function; 
public var failure:Function; 
public var args:Array; 
public var res:Responder 

public function ServerNode(_method:String, _success:Function, _failure:Function, _args:Array) { 
    method = _method; 
    success = _success; 
    failure = _failure; 
    res = new Responder(success, failure); 
    args = _args; 
} 
} 

, wenn ich rufe

Server.getInstance().call("Fetch.getData", parseAllData, onError) 

public function parseAllData(event:Object):void { 
    trace("Victory!"); 
} 
public function onError(event:Object):void { 
    trace("Error :" + event); 
} 

absolut nichts passiert. Irgendeine Idee warum oder ein Punkt in die richtige Richtung, warum das nicht funktioniert?

+0

Was genau passiert? Zum Beispiel, im Debug-Modus wird das Programm mit dem Server verbunden, ist es nur die zurückgegebenen Daten, die leer ist, läuft Ihre Anwendung überhaupt? Gib wenigstens so viele Informationen. – Ryan

Antwort

0

Sie haben eine Instanz der NetConnection erstellt, aber noch keine Verbindung mit dem Server hergestellt.

Mit anderen Worten,

nc.connect(gateway); 

fehlt.

Weitere Informationen zu dieser Klasse finden Sie unter NetConnection documentation.

+0

Danke. Das war das Problem. –