Salut à vous..
Un premier post sur une question assez récurente.. Une méthode de communication simple entre Flash communication server et votre application, via la méthode call.
La méthode call côté serveur sera associé à l'objet Client. Prenons un exemple.
Côté serveur [main.asc] :
ActionScript Code:
//---------------------------------------
application.onConnect = function(clientObj) {
this.acceptConnection(clientObj);
clientObj.call("addition", null, 50, 10);
}
//---------------------------------------
Lorsque vous lancez votre application, une liaison est alors établi avec le serveur et le gestionnaire d'évènement onConnect de notre application est alors appelé. Le premier paramètre de ce gestionnaire est l'instance du client qui cherche à ce connecter. Ici nous acceptons sa connection sans contrôle particulier de status.
Ici, la méthode call sert à lancer des fonctions sur le client connecté.
Son premier paramètre est le nom de la méthode appellée. Le second paramètre donne la possibilité d'envoyer un objet de résultat, mais on verra cela par la suite...
Ici, nous laissons ce paramètre sur null car notre méthode somme n'a pas d'information à renvoyer ensuite au serveur.
Ensuite, l'on peut passer autant de paramètres que l'on veut. Ici, juste deux chiffres à aditionner suffiront.
Voyons maintenant ce qui ce passe côté client :
ActionScript Code:
//---------------------------------------
// Instance de l'objet NetConnection
nc = new NetConnection();
// Méthode associée à l'objet NetConnection
nc.addition= function(v1, v2) {
trace(v1+v2);
}
// Connection au serveur FCS via rtmp
nc.connect("rtmp://localhost/exo");
//---------------------------------------
Côté client, la méthode somme est associé à notre instance de NetConnection.
Si vous testez votre application, nous lui envoyons bien deux paramètres, que notre méthode va donc ensuite aditionner.
Bon essayons maintenant de faire l'inverse.. Nous allons appellé une méthode, côté serveur, et récupérer après côté client un objet Résultat, qui nous permettera, ben.. d'exploiter ce résultats
Côté client :
ActionScript Code:
//---------------------------------------
// Instance de l'objet NetConnection
nc = new NetConnection();
// Connection au serveur FCS via rtmp
nc.connect("rtmp://localhost/exo");
// Méthode call
nc.call("addition", new resultat(), 20, 50);
//---------------------------------------
Ici, c'est notre instance NetConnection qui appelle une méthode côté serveur, en lui envoyant trois paramètres.
En deuxième paramètre, ici, nous déclarons en plus un objet resultat que nous construirons plus tard pour récupérer ce que nous renverra le serveur.
Côté serveur :
ActionScript Code:
//---------------------------------------
application.onConnect = function(clientObj) {
this.acceptConnection(clientObj);
clientObj.addition= function(v1, v2) {
return (v1+v2);
}
}
//---------------------------------------
Construisons maintenant notre objet de récupération, côté client :
ActionScript Code:
//---------------------------------------
function resultat() {
this.onResult = function(Val) {
trace("La somme est : "+Val);
};
}
//---------------------------------------
Deux méthodes sont disponibles pour cette objet de récupération. La méthode onStatus et onResult. Ici, nous utilisons la méthode onResult qui est appellé dès l'arrivée du résultat et stocké dans son paramètre, ici "val".
A noter dans l'exemple au dessus qu'il est possible de déclarer de 2 autres façons l'objet qui permet de récupérer la valeur transmise par la fonction appelée sur le seveur par la méthode
call :
-
Méthode 1
ActionScript Code:
var url = "rtmp://localhost/exo" ;
var nc = new NetConnection() ;
nc.connect(url) ;
var responder = {} ;
responder.onResult = function( value ) {
trace ("le résultat est : " + value) ;
}
nc.call ("addition", responder, 20, 50) ;
-
Méthode 2 : création d'une classe AS1
ActionScript Code:
// ---- Class Responder
// ---- Constructor
_global.Responder = function () {}
// ---- Methods
Responder.prototype.onResult = function( value ) {
trace (this + " :: onResult -> le résultat est : " + value) ;
}
Responder.prototype.toString = function () {
return "[Responder]" ;
}
// ---- test d'utilisation
var url = "rtmp://localhost/exo" ;
var nc = new NetConnection() ;
nc.connect(url) ;
nc.call ("addition", new Responder(), 20, 50) ;
A noter qu'il est possible aussi de coder la classe au dessus en AS2. Mais ceci est une autre histoire.