-
2008-03-01
swf通信代理类,多个3.0与2.0swf之间的通信,共享对象在不同版本的swf间共享 - [as 3.0]
版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明
代理类由包括3个部分~以LocalConnection作为基类,主体是一个由2.0写的一个AgencySWF类~主要用于连接2.0代理类(ClientAgencySWF_2)实例或3.0代理类(ClientAgencySWF)并兼担共享数据存处的载体~
http://wxsr.blogbus.com/logs/16236087.html
AgencySWF类CODE:class AgencySWF extends LocalConnection {
private var conName = 'agencySWF';
private var $$sending_lc;
public var text;
public var Trace_Bool;
private var Member_ID;
private var txt;
//private var _root.SO:SharedObject;
public function AgencySWF(link) {
var obj = {MP3UrlArr:[], MP3NameArr:[], ArtistArr:[], MoodArr:[], MP3InfoArr:[]};
var arr = ["我是共享对象","我是共享对象","我是共享对象","我是共享对象"];
// var arr=[obj,obj,obj,obj];
_root.SO = SharedObject.getLocal("AgencySo");
_root.SO.data.cookie == undefined ? _root.SO.data.cookie=arr : '';
_root.SO.data.cookie = arr;
;
if (link != undefined) {
conName = link;
}
$$sending_lc = this;
this.$$sending_lc.connect(conName);
this.$$sending_lc.onStatus = function(infoObject:Object) {
switch (infoObject.level) {
case 'status' :
;
trace(" 中介 回调 成功 ");
break;
case 'error' :
trace("LocalConnection encountered an error.");
break;
}
};
}
//获取用户id
private function setimd(arg) {
trace(arg.imd);
Member_ID = arg.imd;
text = "Member_ID="+Member_ID;
return Member_ID;
}
private function getimd(arg) {
trace("call child success");
return Member_ID;
}
//调用外部接口
public function SendFunc(func, res) {
$$sending_lc.send("agencySWF","agencyFunc",conName,func,res);
}
//外部调用接口 (外部连接名,调用本类的函数,参数)
public function agencyFunc(callconnet, callfunc, callinfo) {
text = "";
var _l3 = {imd:_root.Member_ID, info:callinfo};
if (Trace_Bool) {
trace("------呼叫中介函数成功------");
trace("ReConnect::"+callconnet+" Func::"+callfunc);
text = _root.txt.text+"ReConnect::"+callconnet+" Func::"+callfunc;
trace(" arguments::");
for (var i in _13) {
trace(i+'=='+_13[i]);
}
}
$$sending_lc.send(callconnet,callfunc,_l3);
}
//外部接口函数 (外部连接名,要调用的本类方法,参数)
public function callAgencyFunc(callConnet, callFunc, callInfo) {
trace("AgencySWF Get ["+callConnet+"] Call Success");
var Result = {imd:Menber_ID, Info:this[callFunc](callInfo)};
$$sending_lc.send(callConnet,callFunc,Result);
}
//调试开关
private function Trace(bool) {
$$sending_lc.send("agencySWF","setTrace");
}
//创建shareObject属性
private function createShareObject(varName:String, newVar) {
_root.SO.data[arguments[0]] == undefined ? my_so.data[arguments[0]]=arguments[1] : '';
return _root.SO.data[arguments[0]];
}
private function getShareObject(arg) {
return _root.SO.data[arg[0]];
}
//设置shareObject属性
private function setShareObject(arg) {
_root.SO.data[arg[0]] = arg[1];;
return _root.SO.data[arg[0]];
}
public function SendMessage(arg) {
trace('sendMessage:'+arguments)
var client_id=arg[0];
var func=arg[1]
arg.shift()
arg.shift()
_root.setConnet(client_id,client_id,func,arg);
//$$sending_lc.send(callConnet,callFunc,Result);
}
}
ClientAgencySWF_2类CODE:dynamic class ClientAgencySWF_2 extends LocalConnection {
private var conName = 'lc_2';
private var $$sending_lc;
public var text;
public var Trace_Bool;
private var Member_ID;
private var txt;
public function ClientAgencySWF_2(link) {
if (link != undefined) {
conName = link;
}
$$sending_lc = this;
this.$$sending_lc.connect(conName);
this.$$sending_lc.onStatus = function(infoObject:Object) {
switch (infoObject.level) {
case 'status' :
trace("2.0Client successful");
break;
case 'error' :
trace("listCall err");
break;
}
};
}
private function getimd(arg) {
trace("call child success");
return Member_ID;
}运行测试时请新建一个2.0文件 AgencySWF
住场景第一帧拷贝代码CODE:var client3_:AgencySWF = new AgencySWF("agencySWF");
var client2_:AgencySWF = new AgencySWF("agencySWF2");
function setConnet(id,connetName,func,arg){
trace(arguments)
trace(_root[id])
_root[id].callAgencyFunc(connetName,func,arg)
}
再建一个2.0fla (client2.0fla)
第一帧代码CODE:var ClientAgency :ClientAgencySWF_2= new ClientAgencySWF_2("client2_");
//(中介的方法,[要连接到的对象连接,要调用的对象的方法,要传输给对象的参数]
b1.onPress=function(){
ClientAgency.SendFunc('SendMessage',['client3_','getShareObject',['cookie']]);
}
b2.onPress=function(){
ClientAgency.SendFunc('getShareObject',['cookie']);
}
并于场景放两个按钮
命名为:b1,b2
再建一个3.0fla (client3.0fla)
第一帧代码CODE:var ClientAgency:ClientAgencySWF=new ClientAgencySWF("client3_");
b1.addEventListener(MouseEvent.CLICK,callFunc)
function callFunc(event:MouseEvent){
ClientAgency.SendFunc('getShareObject',['cookie'])}
以上操作完毕请先运行代理
AgencySWF
在运行client3.0.fla
进行度取AgencySWF信息测试
再后运行client2.0fla
按b2进行读取
AgencySWF共享信息测试
按b1进行调用client3.0.fla的getShareObject方法测试随机文章:
as3.0键盘事件优化与扩展 2008-07-09as 3.0 事件 声明 2008-01-25mp3播放器 2008-01-09数据交互之--WebService应用 2007-09-27简单数码键盘 2007-09-27
收藏到:Del.icio.us





