Hello David,
this is not final decision, just to show the idea.
== root =====================================================
import as.Test;
new Test();
== as.Test.as ===============================================
import as.MultiLocalConnection;
class as.Test {
private var test1_lc : MultiLocalConnection;
private var test2_lc : MultiLocalConnection;
private var test3_lc : MultiLocalConnection;
private var test4_lc : MultiLocalConnection;
public function Test() {
this.init();
}
private function init() : Void {
this.test1_lc = new MultiLocalConnection();
this.test2_lc = new MultiLocalConnection();
this.test3_lc = new MultiLocalConnection();
this.test4_lc = new MultiLocalConnection();
this.test1_lc.onTest = function () {
trace("test1_lc.onTest("+arguments+")");
};
this.test2_lc.onTest = function () {
trace("test2_lc.onTest("+arguments+")");
};
this.test1_lc.connect("test");
this.test2_lc.connect("test");
this.test3_lc.send("test", "onTest", ["test", 1,
"third param"]);
this.test4_lc.send("test", "onTest", ["test", 2,
"third param"]); // this send isn't work - thie same frame
Mouse.addListener(this);
}
private function onMouseUp ():Void {
this.test4_lc.send("test", "onTest", ["test", 2,
"third param"]); // this send isn't work
}
}
== class as.MultiLocalConnection ============================
import mx.utils.Delegate;
dynamic class as.MultiLocalConnection {
private var local_connection:LocalConnection;
private var uid:String;
public function MultiLocalConnection(Void) {
this.init();
}
private function init() : Void {
this.local_connection = new LocalConnection();
this.local_connection["onMessage"] =
Delegate.create(this, this.onMessage);
this.uid = new Date().getTime()+"_"+random(10000);
}
public function connect (connectionName:String):Boolean {
this.addMultiListener(connectionName);
var connect_to:String = connectionName+this.uid;
return this.local_connection.connect(connect_to);
}
public function send (connectionName:String,
methodName:String, args:Object):Boolean {
var listeners_so:SharedObject =
SharedObject.getLocal(connectionName);
var listeners_str:String = listeners_so.data[connectionName];
var listeners:Array = listeners_str.split("|");
// remove all connections
listeners_so.data[connectionName] = "";
args = [connectionName, methodName, args];
args = args.toString();
for (var i:Number=0, len:Number=listeners.length; i<len; i++) {
var listener_uid:String = listeners[i];
if (listener_uid.length) {
var connection_name:String =
connectionName+listener_uid;
this.local_connection.send(connection_name, "onMessage", args);
}
}
return true;
}
private function onMessage (args:String):Void {
var args_array:Array = args.split(",");
var connectionName:String = ""+args_array.shift();
var methodName:String = ""+args_array.shift();
// reset if is available
this.addMultiListener(connectionName);
var method:Function = this[methodName];
if (!method) {
return;
}
method.call(this, args_array.join(","));
}
private function addMultiListener (connectionName:String):Void {
var listeners_so:SharedObject =
SharedObject.getLocal(connectionName);
var listeners_str:String = listeners_so.data[connectionName];
var listeners:Array = listeners_str.split("|");
if (!listeners.length) {
listeners = [];
}
for (var i:Number=0, len:Number=listeners.length; i<len; i++) {
var listener_uid:String = listeners[i];
if (listener_uid == this.uid) {
listeners.splice(i, 1);
i--;
}
}
listeners.push(this.uid);
listeners_so.data[connectionName] = listeners.join("|");
}
}
=============================================================================
--
Ivan Dembicki
______________________________________________________________________
[EMAIL PROTECTED] | http://www.artlebedev.ru | http://www.sharedfonts.com
_______________________________________________
[email protected]
To change your subscription options or search the archive:
http://chattyfig.figleaf.com/mailman/listinfo/flashcoders
Brought to you by Fig Leaf Software
Premier Authorized Adobe Consulting and Training
http://www.figleaf.com
http://training.figleaf.com