早先整理的一条中介函数。 下边是客户端的函数:
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函数解释请看相关注释 |