Problème lors de la conversion AS3 vers AS2
Bonjour,
Je suis confronté à un problème qui me bloque totalement : je souhaite convertir un as3 en as2, mais cela ne marche pas..
Voici le script en as3 :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85
| package fr.red5.managers{
import flash.net.NetConnection;
import flash.net.SharedObject;
import flash.events.*;
import flash.utils.*;
import flash.display.*;
import fr.red5.managers.events.UserEvent;
import flash.text.TextField;
public class UserManager extends EventDispatcher {
private var nc:NetConnection;
private var so:SharedObject;
private static var INSTANCE:UserManager=null;
private static var ALLOW_INSTANTIATION:Boolean=false;
public static const USER_JOIN:String="USER_JOIN";
public static const USER_LEAVE:String="USER_LEAVE";
public static const USER_LIST_UPDATE:String="USER_LIST_UPDATE";
public var users:Array;
public function UserManager(conferenceId:Number, nc:NetConnection, is_dev:String) {
if (getQualifiedClassName(super)=="fr.red5.managers::UserManager") {
if (! ALLOW_INSTANTIATION) {
throw new Error("Use getInstance() instead");
} else {
this.nc=nc;
so=SharedObject.getRemote(is_dev+"users_so_"+conferenceId,nc.uri,false);
so.addEventListener(SyncEvent.SYNC, soOnSync);
so.client=this;
so.connect(nc);
}
}
}
public function soOnSync(event:SyncEvent):void {
var results:Object=event.target.data;
var usersArray:Array = new Array();
//pr(results);
for (var a:String in results) {
var obj:Array = new Array();
obj['userID']=a;
obj['userName']=results[a][0];
/*for (var i:String in results[a])
{
trace(results[a][i]);
}*/
//trace("New user id: "+a);
usersArray.push( obj );
}
usersArray.sort();
users=new Array(usersArray);
dispatchEvent(new Event(USER_LIST_UPDATE,false,false));
}
public static function getInstance(conferenceId:Number, nc:NetConnection=null, is_dev:String=null):UserManager {
if (INSTANCE==null&&nc!=null) {
ALLOW_INSTANTIATION=true;
INSTANCE=new UserManager(conferenceId, nc, is_dev);
ALLOW_INSTANTIATION=false;
}
return INSTANCE;
}
public function userJoined(newID:uint,username:String):void {
var event:UserEvent=new UserEvent(USER_JOIN,false,false,newID,username);
dispatchEvent(event);
}
public function userLeaved(oldId:uint,username:String):void {
var event:UserEvent=new UserEvent(USER_LEAVE,false,false,oldId,username);
dispatchEvent(event);
}
}
} |
Voici la version AS2 que j'ai convertit :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89
| //import mx.net;
//import mx.net.SharedObject;
import mx.events.*;
import mx.utils.*;
//import mx.collections.ArrayCollection;
import mx.controls.*;
import mx.core.UIComponent;
import flash.utils.*;
import fr.red5.managers.events.UserEvent_AS2;
import flash.text.TextField;
class fr.red5.managers.UserManager_AS2 extends EventDispatcher {
private var nc:NetConnection;
private var so:SharedObject;
private static var INSTANCE:UserManager_AS2 = null;
private static var ALLOW_INSTANTIATION:Boolean = false;
public static var USER_JOIN:String = "USER_JOIN";
public static var USER_LEAVE:String = "USER_LEAVE";
public static var USER_LIST_UPDATE:String = "USER_LIST_UPDATE";
public var users:Array;
public function UserManager_AS2(conferenceId:Number, nc:NetConnection, isDev:String) {
//if (getQualifiedClassName(super) == "fr.red5.managers::UserManager_AS2") {
if (!ALLOW_INSTANTIATION) {
throw new Error("Use getInstance() instead");
} else {
this.nc = nc;
so = SharedObject.getRemote(isDev+"users_so_"+conferenceId, nc.uri, false);
so.onSync = soOnSync;
//so.addEventListener(SyncEvent.SYNC, soOnSync);
so.client = this;
so.connect(nc);
}
//}
}
public function soOnSync(event:Object):Void {
var results_:Object = event.target.data;
var usersArray:Array = new Array();
for(var a:String in results_){
var obj:Object = new Object();
obj.userID = a;
obj.userName = results[a][0];
trace(" nouvel utilisateur id:"+a);
usersArray.push(obj);
}
users = new Array(usersArray);
dispatchEvent(new Event(USER_LIST_UPDATE, false, false));
}
public static function getInstance(conferenceId:Number, nc:NetConnection, isDev:String):UserManager_AS2 {
if (INSTANCE == null && nc != null) {
ALLOW_INSTANTIATION = true;
INSTANCE = new UserManager_AS2(conferenceId, nc, isDev);
ALLOW_INSTANTIATION = false;
}
return INSTANCE;
}
public function userJoined(newID:Number, username:String):Void {
var event:UserEvent_AS2 = new UserEvent_AS2(USER_JOIN, false, false, newID, username);
trace('joined');
dispatchEvent(event);
}
public function userLeaved(oldId:Number, username:String):Void {
var event:UserEvent_AS2 = new UserEvent_AS2(USER_LEAVE, false, false, oldId, username);
dispatchEvent(event);
}
} |
Côté serveur, il est envoyé via le SO, une instruction "userJoined" lorsque qu'un client se connecte à l'application, en AS3 l'instruction est bien envoyée et reçu et exécute donc la fonction "userJoined", en AS2 : rien.
Donc je me suis dit que le problème venait peut être de "getQualifiedClassName" qui n'est pas compatible AS2, donc je la commente, existe-t-il un équivalent en as2 ?
Avez-vous une idée pour le reste ?
En vous remerciant d'avance,
Life Hunter