Pixlib Services – L’extension pour les appels distants

Nouvelle leçon, cette fois-ci sur l’utilisation de l’extension PixService permettant de réaliser des appels distants.

Appels qui permettront de charger des données simplement et aussi faire des appels à des services distants (AMF, HTTP…) complexes.

L’extension PixService contient plusieurs implémentations concrètes :

  • PXHTTPService : Appels à des pages distantes retournant des données ;
  • PXStreamService : Appels à des pages distantes retournant un objet URLStream ;
  • PXSharedObjectService : Appels à un SharedObject ;
  • PXAMFService : Appel à un service AMF ;
  • PXAMFMultipleServices : Appels multiples à des services AMF (en une passe).

L’API définie dans le core de Pixlib permet pour chacun de ces services de  :

  • définir des arguments à ajouter lors de l’appel ;
  • d’abonner des écouteurs pour suivre l’état de l’appel ;
  • définir un processus de dé sérialisation des données, si besoin.

Prenons un premier exemple avec la classe PXHTTPService.

package
{
	import net.pixlib.core.PXBaseDocument;
	import net.pixlib.log.PXDebug;
	import net.pixlib.log.PXTraceLayout;
	import net.pixlib.log.addLogListener;
	import net.pixlib.services.PXHTTPService;
	import net.pixlib.services.PXService;
	import net.pixlib.services.PXServiceEvent;
 
	import flash.net.URLRequestMethod;
 
	public class Sample extends PXBaseDocument
	{
		override protected function onDocumentReady() : void
		{
			addLogListener(PXTraceLayout.getInstance());
 
			var username : String = "Anonymous";
			var pwd : String = "";
 
			var service : PXService = new PXHTTPService("http://www..../getSession.php", URLRequestMethod.POST);
			service.setArguments("login", username, "pass", pwd);
			service.addEventListener(PXServiceEvent.onDataResultEVENT, _onResult);
			service.execute();
		}
 
		private function _onResult(event : PXServiceEvent) : void
		{
			PXDebug.DEBUG(event.result, this);
		}
	}
}

Ci-dessus nous effectuons donc un simple appel à la page “getSession.php” en spécifiant que nous enverrons des arguments en mode “POST”.

Nous passons ensuite nos deux arguments via la méthode “setArguments()” qui pour le PXHTTPService fonctionne sous forme de paire “nom/valeur”. Ici la propriété “login“, puis sa valeur, puis la propriété “pass” et sa valeur.

On ajoute ensuite un écouteur pour surveiller le résultat renvoyé par cet appel.

Bien entendu, il est possible d’utiliser directement la classe PXHTTPService au lieu de passer par l’interface PXService. Ceci permettant d’utiliser les méthodes spécifiques à cette classe.

var service : PXHTTPService = new PXHTTPService("http://www..../getSession.php", URLRequestMethod.POST);
service.addVariable("login", username);
service.addVariable("pass", pwd);
service.addEventListener(PXServiceEvent.onDataResultEVENT, _onResult);
service.execute();

Cette règle est applicable à toutes les classes de PixService.

Les autres appels fonctionnent de la même manière (merci PXService), mais voyons le cas un peu plus spécifique de la classe PXAMFMultiServices.

package
{
	import net.pixlib.core.PXBaseDocument;
	import net.pixlib.log.PXDebug;
	import net.pixlib.log.PXTraceLayout;
	import net.pixlib.log.addLogListener;
	import net.pixlib.services.PXAMFMultiServices;
	import net.pixlib.services.PXService;
	import net.pixlib.services.PXServiceEvent;
 
	public class Sample extends PXBaseDocument
	{
		override protected function onDocumentReady() : void
		{
			addLogListener(PXTraceLayout.getInstance());
 
			var username : String = "Anonymous";
			var pwd : String = "";
 
			var services : PXAMFMultiServices = new PXAMFMultiServices("http://www.../index.php");
			services.addService("HelloWorld", "getPrompt");
 
			// listen for specific service response and pass specific arguments
			var session : PXService = services.addService("SessionService", "getSession");
			session.setArguments(username, pwd);
			session.addEventListener(PXServiceEvent.onDataResultEVENT, _onSession);
 
			// listen for global response
			services.addEventListener(PXServiceEvent.onDataResultEVENT, _onResult);
			services.execute();
		}
 
		private function _onSession(event : PXServiceEvent) : void
		{
			PXDebug.DEBUG(event.result, this);
		}
 
		private function _onResult(event : PXServiceEvent) : void
		{
			PXDebug.DEBUG(event.result, this);
		}
	}
}

La classe PXAMFMultiServices permet d’attaquer plusieurs services AMF en un seul appel distant. Via la méthode “addService()” il est donc possible d’ajouter de nouveaux appels avec pour chacun d’entre eux des paramètres et même des écouteurs; chaque service étant des PXService à part entière.

La librairie PixService est disponible sur la page des téléchargements, les sources sur le SVN et la documentation ici.

Happy coding with Pixlib

This entry was posted in Extension, Framework, Tutorial and tagged , , , , , , . Bookmark the permalink.

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="" escaped="" cssfile="">