Vc esta usando o RemoteObject ? extende ele e monta uma fila onde vc
cada vez q fizer uma chamada coloca ela num array e vai retirando elas
na sequencia conforme for recebendo, fiz algo parecido pra trabalhar
com o amfphp ve se da uma luz:
classe de conexao:
package models
{
import events.AmfResultEvent;
import events.AmfStatusEvent;
import flash.events.NetStatusEvent;
import flash.events.SecurityErrorEvent;
import flash.net.NetConnection;
import flash.net.ObjectEncoding;
import flash.net.Responder;
import mx.managers.CursorManager;
import mx.utils.ObjectUtil;
import events.ProxyEvent;
/**
*
* Classe para conexao com o AmfPHP
*
*/
public class AmfConnection extends NetConnection
{
//
------------------------------------------------------------------
//
// declaracao das propriedades
//
//
------------------------------------------------------------------
private var responder:Responder;
private var fila:Array = new Array();
private var chamou:Boolean;
//
------------------------------------------------------------------
/**
* Construtor da classe
*
* @param url do servidor
* @param amf3 protocolo false = AMF0 ou true = AMF3
* @param args ... outros parametros
*
*/
public function AmfConnection(url:String = "", amf3:Boolean =
false, ... args)
{
if (url != "")
{
connectURL(url, args);
}
setEncoding(amf3);
this.responder = new Responder(onRespResult,
onRespFault);
this.addEventListener(NetStatusEvent.NET_STATUS,
netStatus);
this.addEventListener(SecurityErrorEvent.SECURITY_ERROR,
netSecurityError);
this.chamou = true;
}
//
------------------------------------------------------------------
//
// metodos publicos
//
//
------------------------------------------------------------------
/**
* metodo para setar a url do servidor
*
* @param url
* @param args ... outros parametros
*/
public function connectURL(url:String, ... args):void
{
args.unshift(url);
this.connect.apply(this, args);
}
/**
* metodo para setar a codificacao do protocolo amf
*
* @param amf3 protocolo true = AMF3 ou false AMF0
*/
public function setEncoding(amf3:Boolean):void
{
if (amf3)
{
this.objectEncoding = ObjectEncoding.AMF3;
}
else
{
this.objectEncoding = ObjectEncoding.AMF0;
}
}
/**
* metodo para autenticacao de acesso as classes no amfphp 1.2
*
* @param usuario
* @param senha
*/
public function setCredentials(usuario:String,
senha:String):void
{
super.addHeader("Credentials", false, {userid:usuario,
password:senha});
}
/**
* metodo para selecionar o servico
*
* @param classe
* @param metodo
* @param args ... outros parametros
*/
public function setService(classe:String, metodo:String, ...
args):void
{
trace("AmfConnection --> setService: " + metodo);
this.fila.push({classe: classe, metodo: metodo, args:
args});
serviceCall();
}
private function serviceCall():void
{
if(chamou){
this.chamou = false;
var objService:Object = this.fila.shift();
trace("AmfConnection --> serviceCall: " +
objService.metodo);
CursorManager.setBusyCursor();
objService.args.unshift(objService.classe + "."
+
objService.metodo, this.responder);
super.call.apply(super, objService.args);
}
}
//
------------------------------------------------------------------
//
// metodos privados
//
//
------------------------------------------------------------------
/**
* metodo chamado pelo evento de status do NetConnection
*/
private function netStatus(event:NetStatusEvent):void
{
CursorManager.removeBusyCursor();
var objErros:Object = ObjectUtil.copy(event.info);
dispatchEvent(new AmfStatusEvent(objErros,
"netStatus"));
}
/**
* metodo chamado pelo evento de erros na sandbox acessada pelo
NetConnection
*/
private function netSecurityError(event:SecurityErrorEvent):void
{
CursorManager.removeBusyCursor();
var objErros:Object = ObjectUtil.copy(event);
dispatchEvent(new AmfStatusEvent(objErros,
"netSecurityError"));
}
/**
* metodo chamado pelo evento de erro do Responder (erros
vindos do
AMFPHP)
*/
private function onRespFault(event:Object):void
{
CursorManager.removeBusyCursor();
var objErros:Object = ObjectUtil.copy(event);
dispatchEvent(new AmfStatusEvent(objErros,
"onRespFault"));
}
/**
* metodo responsavel por entregar a resposta do amfphp para o
evento
*/
private function onRespResult(event:Object):void
{
if(!chamou){
this.chamou = true;
trace("AmfConnection --> onRespResult: " +
event.serviceName);
CursorManager.removeBusyCursor();
var status:String = event.status;
var objResult:Object = ObjectUtil.copy(event);
dispatchEvent(new AmfResultEvent(objResult,
objResult.serviceClass, objResult.serviceName));
// envia a mensagem de status p/ statusHandler
(default.as)
dispatchEvent(new ProxyEvent("status", status));
if(this.fila.length > 0){
serviceCall();
}
}
}
}
}
eventos:
package events
{
import flash.events.Event;
public class AmfStatusEvent extends Event
{
public static const AMF_STATUS_EVENT:String = "amfStatusEvent";
public var statusObj:Object;
public var eType:String;
public function AmfStatusEvent(statusObj:Object, eType:String)
{
super(AMF_STATUS_EVENT);
this.eType = eType;
this.statusObj = statusObj;
}
}
}
e:
package events
{
import flash.events.Event;
public class AmfResultEvent extends Event
{
public static const AMF_RESULT_EVENT:String = "amfResultEvent";
public var resultObj:Object;
public var serviceClass:String;
public var serviceName:String;
public function AmfResultEvent(resultObj:Object,
serviceClass:String, serviceName:String)
{
super(AMF_RESULT_EVENT);
this.resultObj = resultObj;
this.serviceClass = serviceClass;
this.serviceName = serviceName;
}
}
}
[ ]'s
Ricardo
On Feb 14, 7:19 am, brnfd <[EMAIL PROTECTED]> wrote:
> Não conheço muito de flex, mas se o BlazeDS for chamado por um
> HttpService dá pra usar o evento result e deixar por conta dele
> continuar a fazer o que você quiser.
>
> Abraços,
> Bruno
--~--~---------~--~----~------------~-------~--~----~
Você recebeu esta mensagem porque está inscrito na lista "flexdev"
Para enviar uma mensagem, envie um e-mail para [email protected]
Para sair da lista, envie um email em branco para [EMAIL PROTECTED]
Mais opções estão disponíveis em http://groups.google.com/group/flexdev
-~----------~----~----~----~------~----~------~--~---