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 :
Voici la version AS2 que j'ai convertit :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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); } } }
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.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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); } }
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
Partager