Fms3中client端与server端交互方式汇总

系列文章导航
  1. Flex,Fms3相关文章索引
  2. Flex和Fms3打造在线聊天室(利用NetConnection对象和SharedObject对象)
  3. Fms3和Flex打造在线视频录制和回放
  4. Fms3和Flex打造在线多人视频会议和视频聊天(附原代码)
  5. Fms3中client端与server端交互方式汇总
  6. 免费美女视频聊天,多人视频会议功能加强版本(Fms3和Flex开发(附源码))
  7. 免费网络远程视频会议系统,免费美女多人视频聊天(附源码下载)(Flex和Fms3开发)
  8. 开源Flex Air版免费激情美女视频聊天室,免费网络远程视频会议系统((Flex,Fms3联合打造))

fms3中server端代码是写在asc文件中,客户端是broadcastMsg.swf
2者交互方式我总结如下:

1. 客户端呼叫服务器
服务器端main.asc代码如下:

ContractedBlock.gif ExpandedBlockStart.gif Code
Client.prototype.serverFun1 = function(value)
{
    return "value="+value
};

客户端代码如下:

ContractedBlock.gif ExpandedBlockStart.gif Code
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" 
    fontSize
="12" creationComplete="init()">
    
    
<mx:Script>
        
<![CDATA[    
        import mx.controls.Alert;
    
        private var netConnection:NetConnection;
        private var responder:Responder;
        private var appServer:String="rtmp://192.168.0.249/TestCode1";
            
        private function init():void
        {
            netConnection = new NetConnection();
            netConnection.connect(appServer);
            netConnection.client=this;
        }
        
        private function onClick(evt:MouseEvent):void
        {
            responder = new Responder(OkFun,ErrorFun);
            netConnection.call("serverFun1",responder,"va");
        }
            
        private function OkFun(re:String):void
        {
            Alert.show(re);
        }
        
        private function ErrorFun(info:Object):void
        {
            Alert.show( "error: " + info.description );
            Alert.show( "error: " + info.code );
        }
        
        
]]>
    
</mx:Script>

    
<mx:Button x="43" y="65" label="调用服务器" id="btn" click="onClick(event)"/>
    
</mx:Application>


代码说明:
Responder 类提供了一个对象,该对象在 NetConnection.call() 中使用以处理来自与特定操作成功或失败相关的服务器的返回值。
它有2个参数:第1个是成功调用回调的方法,第2个参数是调用失败时回调的方法

call () 方法  
public function call(command:String, responder:Responder, ... arguments):void
第1个参数:服务器端方法名
第2个参数:可选对象,用于处理服务器的返回值
第3个参数:传递给服务器端方法的值
 
本例题:点击按钮后,调用asc文件中的serverFun1方法,并传递参数“va”给它,serverFun1方法处理后方法一个值,要是成功就回调OkFun,并显示“value=va”字符串,要是调用失败(可能会遇到特定于当前操作的网络操作错误或与当前连接状态有关的错误)将回调ErrorFun,并显示错误信息

 

2. 服务器端呼叫指定的客户端
服务器端main.asc代码如下:

ContractedBlock.gif ExpandedBlockStart.gif Code
var handlerObject = function() {};

handlerObject.prototype.onResult = function( result )
{
    trace( result );
};

handlerObject.prototype.onStatus = function( info )
{
    trace( "error: " + info.description );
    trace( "error: " + info.code );
};

application.onConnect = function( client )
{
  this.acceptConnection( client );
  var msg = "Hello client, your IP is: " + client.ip;
  client.call( "asyncServerCall", new handlerObject, msg );
};

客户端代码如下:

ContractedBlock.gif ExpandedBlockStart.gif Code
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" 
    fontSize
="12" creationComplete="init()">

<mx:Script>
    
<![CDATA[
        import mx.controls.Alert;
        
        private var netConnection:NetConnection;
        private var appServer:String="rtmp://192.168.0.249/TestCode1";
            
        private function init():void
        {
            netConnection = new NetConnection();
            netConnection.connect(appServer);
            netConnection.client=this;
        }
    
        public function asyncServerCall( msg:String ) : String 
           {
               Alert.show( msg );
               return "I got your messagedot.gif Thanks Server!";
           }

    
]]>
</mx:Script>
    
</mx:Application>


代码说明:
Client.call() 在Flash客户机上异步的执行一个方法,并把值从Flash客户机返回到服务器。
用法 clientObject.call(methodName, [resultObj, [p1, ..., pN]])
第1个参数:客户端的方法名
第2个参数:当发送者期待一个来自客户机的返回值时需要这个参数。如果参数被传递但没有返回值被期待的话,则传递值null。结果对象可以是你定义的任何对象,并且,为了有用起见,这个结果对象应该有两个方法-onResult和onStatus,这些方法会在结果到达时被调用。如果远端方法的调用是成功的,则resultObj.onResult事件会被触发;否则,resultObj.onStatus事件将被触发。
第3个参数:传递给客户端的方法的值

本例题:启动后,连接成功,服务器接收请求,并调用改客户端的asyncServerCall方法(必须公有),asyncServerCall方法处理后返回值,要是处理成功onResult事件就被触发,要是处理失败onStatus事件就被触发。

3. 服务器端呼叫所有的客户端(广播)
服务器端main.asc代码如下:

ContractedBlock.gif ExpandedBlockStart.gif Code
application.onConnect = function(currentClient)
{
    application.acceptConnection(currentClient);
    application.broadcastMsg("showServerMsg",application.clients.length );
}

客户端代码如下:

ContractedBlock.gif ExpandedBlockStart.gif Code
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"
 fontSize
="12" creationComplete="init()">
    
    
<mx:Script>
        
<![CDATA[
            
        import mx.controls.Alert;
        
        private var netConnection:NetConnection;
        private var appServer:String="rtmp://192.168.0.249/TestCode1";
        
        private function init():void
        {
            netConnection = new NetConnection();
            netConnection.connect(appServer);
            netConnection.client=this;
        }
        
        public function showServerMsg( n:Number ) :void
           {
               var msg:String ="已经有"+n.toString()+"位用户连接";
               Alert.show( msg );
           }
                
        
]]>
    
</mx:Script>
    
</mx:Application>


代码说明:
Application.broadcastMsg():把一条消息广播到所有连接的客户机,给每个客户机广播
这个方法相当于循环遍历Application.clients数组并在每一个独立的客户机上调用Client.call(),但这个方法的效率更高(尤其是当连接的客户机数量很大时)。唯一的不同是当你调用broadcastMsg()时你不能指定一个响应对象,除此以外,两种语法是一样的。
等同于如下:
//遍历客户端列表,分别call他们
for(var i=0;i<application.clients.length;i++) {
 application.clients[i].call("showServerMsg",application.clients.length);
}

本例题:一旦有客户机连接fms,就给每个连接的客户机广播,并显示出"已经有n位用户连接"

4. 服务器端呼叫服务器端
NetConnection.call
用法:
NetConnection.call(methodName, [resultObj, p1, ..., pN])
调用一个 Flash Communication Server 或者其他应用服务器上的命令或方法。用法和客户端的 NetConnection.call 的用法一样。他调用一个远程服务器上的方法。我就没贴代码

 

5.代码下载
http://files.cnblogs.com/aierong/TestCode1.rar

 

RSS订阅我

使用RSS邮天下订阅
订阅到有道阅读
订阅到抓虾
鲜果阅读器订阅图标
Add to Google
訂閱 Bloglines
哪吒提醒

author:aierong
blog:http://www.cnblogs.com/aierong


Sql Server2005 Transact-SQL 新兵器学习总结之-总结
MS SQL数据库备份和恢复存储过程(加强版本)
sql server中分布式查询随笔(链接服务器(sp_addlinkedserver)和远程登录映射(sp_addlinkedsrvlogin)使用小总结)
ASP.NET2.0国际化/本地化应用程序的实现总结(多语言,多文化页面的实现)
WAP开发资料站(最新更新)
自定义格式字符串随笔 (IFormattable,IFormatProvider,ICustomFormatter三接口的实现)
Mcad学习笔记之异步编程(AsyncCallback 委托,IAsyncResult接口,BeginInvoke方法,EndInvoke方法的使用小总结)
Mcad学习笔记之通过反射调用類的方法,屬性,字段,索引器(2種方法)
Mcad学习笔记之序列化(2进制和Soap序列化)
Mcad学习笔记之委托再理解(delegate的构造器,BeginInvoke,EndInvoke,Invoke4个方法的探讨)
WinForm开发,窗体显示和窗体传值相关知识总结
Mcad学习笔记之Microsoft Windows服务
copy某目錄下的所有的目錄和文件到目的目錄(目錄數據備份)
ASP.NET状态管理之一(概括篇)

东莞是广东历史文化名城,位于广东省中南部,珠江口东岸,北接广州,南连深圳。距今1700多年前的三国时期建郡。1985年9月撤县设市,1988年1月升格为地级市,现辖28个镇、4个街道办事处,386个村委会,205个居委会。全市陆地面积2465平方公里。2007年在东莞生活的人口约1000万,其中户籍人口171.26万,来自全国各地的“新莞人”(农民工)约700万人,海外华侨20多万人,港澳同胞70多万人,外来人口和户籍人口的比例高达6: 1。全市现有党员8万多人,党的基层组织3646个,其中党委79个,总支部187个,支部3380个。

今天的东莞已成为一个冉冉升起的现代制造业名城,是广东省的中心城市之一,科技发展必不可少!

为了促进.NET在东莞的发展,建立东莞.NET俱乐部。

东莞.NET俱乐部的博客地址是:http://dongguan.cnblogs.com

东莞.NET俱乐部QQ群:66072189

东莞.NET小组地址是:http://space.cnblogs.com/group/DongGuan/

欢迎东莞以及周边地区应用.NET技术开发的朋友一起探讨,学习,交流!!!大家共同参加线上线下活动。

欢迎加入东莞.NET俱乐部

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值