现在位置:首页->学习专题->Flash/Flv
fms中介函数
作者: 日期: 2007-10-30 12:02:36 访问次数:出处:
 显示选项:自动滚屏[左键停止]
早先整理的一条中介函数。
下边是客户端的函数:

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函数解释请看相关注释;
⊕相关文章
  • ·FMS解决在线用户数读取
  • ·用SSAS将多个FLV和MP3文件合成一个FLV文件
  • ·使用FMS(FCS)来合并多个flv视频文件的实现
  • ·flash remoting实践
  • ·基于Flash Media Server的Flash多人涂鸦白板
  • ·Flash Media Server 2的功能