Précédent   Forum des professionnels en informatique > Webmasters - Développement Web > Flash/Flex > Flash

Flash Forum d'entraide sur la technologie Flash (Cours, FAQs, Sources)

Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Affichage des résultats du sondage: Avez vous déjà réalisé un chat avec red5 en as3
oui 0 0%
non 0 0%
commencé mais jamais réussi 1 100,00%
Votants: 1. Vous ne pouvez pas participer à ce sondage.

Publicité
'
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Vieux 01/04/2011, 17h01   #1
Candidat au titre de Membre du Club
 
ariden pad
Développeur Web
Inscription : septembre 2010
Messages : 12
Détails du profil
Informations personnelles :
Nom : ariden pad
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : Communication - Médias

Informations forums :
Inscription : septembre 2010
Messages : 12
Points : 14
Points : 14
Par défaut IServiceCapableConnection red5 sans effet

Bonjour,

Je développe un chat avec red5 et de l'as3 (flash developp, flash player 10, java : 1.6.0_23, red5 (peut être la 0.9.1)).

A l'heure actuelle, ma connection entre mon application flash et mon serveur red5 se fait correctement, je n'ai pas d'erreurs, ni d'un côté, ni de l'autre.

Lorsque je fais appel à une fonction depuis flash, telle que :

Code :
nc.call("sendpublicmess",responder, user.pseudo);
mon serveur red5, appel bien ma fonction flash sendpublicmess en transmettant les bonnes infos.

Par contre, quand je fais appel, côté java, à des fonctions telles que :

Code :
1
2
3
4
5
6
7
if (conn instanceof IServiceCapableConnection)
{
	IServiceCapableConnection sc = (IServiceCapableConnection) conn;
	sc.invoke("joinuser", new Object[]{conn.getClient().getId()});
 
        System.out.println("connect IConnection nombre params="+conn);
}
ou

Code :
1
2
3
serviceUtils.invokeOnAllConnections (scope, "joinuser", new Object[] {"ok"} );
( ou serviceUtils.invokeOnAllConnections ("joinuser", new Object[] {"ok"} ); )
System.out.println("connect IConnection nombre params="+conn);
je n'ai aucunes erreurs affichée dans mon terminal, mon message
Citation:
connect IConnection nombre params=RTMPMinaConnection from 127.0.0.1 to localhost (in: 3357 out 3073)
apparait bien dans les deux cas.

Par contre, côté flash, rien, je n'ai aucune réaction suite à l'appel de ce script.

Je ne sais pas si mon problème vient de java qui n’envoie pas les données ou de flash qui ne les réceptionnent pas (pbm d'écouteurs ?)

A noter côté flash, j'ai bien :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
rtmpString 	= "rtmp://localhost/...."
this.nc.objectEncoding = 3;
this.nc.client   = { 
	onBWDone: function():void { }
};
this.nc.addEventListener("netStatus", onNCStatus);
this.nc.connect(rtmpString, user.pseudo, ...);
 
public function onNCStatus(event:NetStatusEvent):void {
      trace("Main :: default :: " +event.info.code);
      //-- normalement inutile mais j'ai tt essayé
      responder = new Responder(resultHandler, errorHandler);
....
public function joinuser(idclient:int, ...
Côté java, j'ai :

Code java :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public boolean connect(IConnection conn, IScope scope, Object[] params) {
 
if (conn instanceof IServiceCapableConnection)
{
	IServiceCapableConnection sc = (IServiceCapableConnection) conn;
	sc.invoke("joinuser", new Object[]{conn.getClient().getId(), ...});
 
        System.out.println("connect IConnection nombre params="+conn);
        //-- je passe bien ici
}
 
ServiceUtils.invokeOnAllConnections ("joinuser", new Object[] {"ok", ....} );
serviceUtils.invokeOnAllConnections (scope, "joinuser", new Object[] {"ok",...} );
 
public boolean joinuser(String vara,String varb,String varc,String vard) {
	System.out.println("Joinuser");
	return true;
}

A noter, j'ai essay à peu prêt toutes les variantes posssibles, et rien n'y fait, j'ai pas d'erreurs, je peux tout faire à part ça : me connecter au serveur, déconnecter, appeler d'autres fonctions, récupérer la liste des utilisateurs ... mais tout ce qui touche à l'appel de fonctions flash depuis red5 reste sans effet.
ariden est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/04/2011, 12h47   #2
Candidat au titre de Membre du Club
 
ariden pad
Développeur Web
Inscription : septembre 2010
Messages : 12
Détails du profil
Informations personnelles :
Nom : ariden pad
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : Communication - Médias

Informations forums :
Inscription : septembre 2010
Messages : 12
Points : 14
Points : 14
Par défaut Solution

Je vais donner la solution tant qu'à faire :

1.

Citation:
this.nc.client = {
onBWDone: function():void { }
};
doit contenir toutes les fonctions qui doivent être appelées depuis java.

Ainsi, si depuis java, on invoke JoinUser() tel que

serviceUtils.invokeOnAllConnections ("joinuser", new Object[] {"ok"} )

côté flash, nous obtiendrons

Citation:
this.nc.client = {
onBWDone: function():void { },
joinuser = this.Joinuser
};
où this.Joinuser correspond à notre fonction flash.

A noter : la forme correct côté java est celle-ci :

Citation:
serviceUtils.invokeOnAllConnections ("joinuser", new Object[] {"ok",...} );
et non :

Citation:
serviceUtils.invokeOnAllConnections (scope, "joinuser", new Object[] {"ok",...} );
2. Dans le cas, où les appels depuis java ne semble toujours pas fonctionner, le problème vient des itérations liées au scope.getConnections()

tel que

Citation:
Collection<Set<IConnection>> myCollection = scope.getConnections();
for(Set<IConnection> conns: myCollection){
qui fonctionneront uniquement si le tableau des utilisateurs est bien renseigné :

Personnellement, lorsque je sauvegardais mon user via ma fonction java connect() tel que :

Citation:
users.put(id, new User(id,pseudo,role,sex,room, photo));
j'omettais (volontairement) de renseigner un champs (ici room), ce qui empêchait la boucle précédente de s'effectuer...

Citation:
public class User {

public String id = null;
public String pseudo = null;
public String role = null;
public String sex = null;
public String onlineStatus = "1";
public String room = null;
public String photo = null;

public User (String id,String pseudo, String role, String sex, String room, String photo) {
this.id = id;
this.pseudo = pseudo;
this.role = role;
this.sex = sex;
this.onlineStatus = "1";
this.photo = photo;
//this.room = room;
}
}
ariden est déconnecté   Envoyer un message privé Réponse avec citation 10
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 01h22.


 
 
 
 
Partenaires

Hébergement Web