早先整理的一条中介函数。
下边是客户端的函数:
var mync2 = new NetConnection();
btn.onPress = function() {
ID = txt.text;
list_arr = [[ID, 123456]];
mync2.connect("rtmp://localhost/goqo", list_arr);
};
func_arr = [this.func_2(obj.info)];
mync2.onStatus = function(info) {
trace(info.code);
if (info.code == "NetConnection.Connect.Success") {
call_appliaction(this, "func_2", "123", "main");
}
};
mync2.hello = function(what) {
output.text = what;
};
function call_appliaction(who, func, info, type, condition) {
var Send = {};
Send.func = func;
Send.info = info;
Send.type_ = type;
Send.condition = condition;
who.call("reCall", null, Send);
}
下边是服务端main.asc文件的代码及解释:
application.onAppStart = function() {
//menber为客户端成功连接后的用户信息数组在这里初始化;并
//在application.onConnect 事件将用户信息记录
menber = [];
};
application.onConnect = function(newClient, arr) {
menber.push(arr[0][0]);
application.acceptConnection(newClient);
};
Client.prototype.reCall = function(obj) {
if (obj.type_ == "public" || obj.type_ == true) {
//广播信息
application.broadcastMsg(obj.func, obj.info);
}
//私聊机制
else if (obj.type_ == "private" || obj.type_ == false) {
for (var i = 0; i<application.clients.length; i++) {
if (menber[i] == obj.condition) {
application.clients[i].call(obj.func, null, obj.info);
}
}
}
//调用服务端方法
else if (obj.type_ == "main") {
this[obj.func](obj.info)
}
};
//客户端自身方法
Client.prototype.func_2 = function(what) {
trace("服务端func_2方法被呼叫成功,参数:"+what);
};
工作原理很简单,主要是客户端通过自定义的call_appliaction函数方法呼叫以及传递呼叫类型跟参数数据给服务端的reCall中介函数,并由reCall中介函数分析传递过来的数据,决定事件类型。
下面分析下;
call_appliaction函数的几个参数;
function call_appliaction(who, func, info, type, condition) {
var Send = {};
Send.func = func;
Send.info = info;
Send.type_ = type;
Send.condition = condition;
who.call("reCall", null, Send);
}
call_appliaction的工作主要通过call的方法于连接对象进行通信,并将参数赋值给Send对象,
who:NetConnection//连接名;func:String//要求调用的函数方法名称;info:/ /info为要传递给func函数的参数信息;类型最好是数组或对象;
type:Boolean/String;//告诉服务起reCall函数要调用的函数类型(目前为3中形式分别为:广播函数,私聊机制函数,及服务端函数);condition:String ,//类似用户id之类的,能区分客户端用户的字符信息(暂为私聊机制函数专用);
服务端reCAll函数解释请看相关注释;