Dec
3
Arcadio December 3, 2007 9:41 am

Mechanism to synchronize multiple request in Cairngorm to assure server response correspond with the request.

Delegate:

package com.aqua.holamundo.business {
	import com.adobe.cairngorm.business.ServiceLocator;
	import mx.controls.Alert;
	import mx.rpc.AbstractOperation;
	import mx.rpc.IResponder;
	import mx.rpc.events.FaultEvent;
	import mx.rpc.events.ResultEvent;
	import mx.rpc.http.mxml.HTTPService;
	import mx.rpc.AbstractService;
	import mx.rpc.AsyncToken;
	public class SaludoDelegate {
		private var responder : IResponder;
		private var service : Object;
		private var param:String;
		private var httpService:HTTPService;
		public function SaludoDelegate( responder : IResponder, miParam:String ):void {
			httpService = new HTTPService();
			httpService.url = [URL];
			httpService.method = "GET";
			httpService.showBusyCursor = true;
			this.service = httpService;
			this.service.request.param=miParam;
			this.responder = responder;
			this.grupo=grupo;
		}
		public function getMessage() : void {
			service.cancel();
			var token:AsyncToken = httpService.send();
			token.addResponder(responder);
			token.param = miParam;
		}
	}
}

Command:

package com.aqua.holamundo.command {
	import mx.rpc.IResponder;
	import com.adobe.cairngorm.commands.ICommand;
	import com.adobe.cairngorm.control.CairngormEvent;
	import mx.rpc.events.*;
	import mx.controls.Alert;
	import com.aqua.holamundo.business.SaludoDelegate;
	import com.aqua.holamundo.event.SaludoEvent;
	import com.aqua.holamundo.model.HolaMundoModelLocator;
	import com.aqua.holamundo.vo.Saludo;

	public class SaludoCommand implements ICommand, IResponder {
		public var _event:SaludoEvent;
		public static var peticionId:String;
	  	public function SaludoCommand() {
		}
		public function execute( event:CairngormEvent ):void {
			_event = SaludoEvent(event);
			var delegate:SaludoDelegate = new SaludoDelegate(this, _event.miParam);
			delegate.getMessage();
			peticionId=_event.miParam;
		}
		public function result( event : Object ):void {
			var model:HolaMundoModelLocator = HolaMundoModelLocator.getInstance();
			var eventR : ResultEvent;
			eventR = event as ResultEvent;
			var resultado : XML = new XML(eventR.message.body);
			// Comprobar que la respuesta coincida con la última petición
			if(peticionId==event.token.param){
				// Actualizar modelo
			}
		}
		public function fault( event : Object ) : void {
			var faultEvent : FaultEvent = FaultEvent( event );
			Alert.show( "Error al contactar con el servidor"+event,"Error" );
		}
	}
}
  • Share/Bookmark

Post a comment



  • Share/Bookmark
Creative Commons License
This blog is under Creative Commons licence, unless indicated otherwise.
Special thanks to Mark James for the icon set used in this blog.