AS3 / Flex 3, ступенчатое удаленное взаимодействие + очередь - PullRequest
0 голосов
/ 13 января 2011

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

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;
 }
}

Теперь, когда я звоню

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

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

, абсолютно ничего не происходит.Любая идея почему или точка в правильном направлении, почему это не работает?

1 Ответ

0 голосов
/ 13 января 2011

Вы создали экземпляр NetConnection, но фактически не инициировали соединение с сервером.

Другими словами,

nc.connect(gateway);

отсутствует.

См. Документация NetConnection для получения дополнительной информации об этом классе.

...