灯火互联
管理员
管理员
  • 注册日期2011-07-27
  • 发帖数41778
  • QQ
  • 火币41290枚
  • 粉丝1086
  • 关注100
  • 终身成就奖
  • 最爱沙发
  • 忠实会员
  • 灌水天才奖
  • 贴图大师奖
  • 原创先锋奖
  • 特殊贡献奖
  • 宣传大使奖
  • 优秀斑竹奖
  • 社区明星
阅读:2804回复:0

FLEX+FMS实现远程共享、电子白板、远程交流会议的功能

楼主#
更多 发布于:2012-09-08 09:47


  FMS提供了“远程共享对象”的功能,可以让多个Client端的flash应用共享同一个全局对象,并且当客户端中的任何一个改变该对象时,系统会自动将该对象回发到FMS服务器,同时FMS服务器也会将该对象重新广播到所有客户端。
    可能有些人还是不理解这个含义,举个例子来说,视频会议软件里面通常有个共享电子白板(WhiteBoard)的功能,就是A在画板上所画的线,B在他的电脑上面也可以看到。传统的实现方法,是A画图的操作通过网络传送给B,双方各自调用画图的代码。程序实现还是相对比较复杂。
    描述得更简单一些,就是说,如果在三个电脑上不同的人浏览同一个页面,那么任何一个人在这个flash上面所做的操作,将在另外两个人的电脑上同步展现。这个的用途很广泛了,像视频会议(主席调用PPT、画面,参会者都能同步看到)、电子教室(老师做演示,学生机同步刷新)、互动游戏(多个不同的角色可以操作同一个对象),等等。
    通过FLEX+FMS,利用FMS的远程共享对象,这个功能实现起来相当简单。
    首先,在FMS的Application文件夹下,创建一个SharedObjectApp的文件夹,把live文件夹下面的那些默认文件复制过来,注意!这里必须要修改一个文件才行,默认的配置是未启用远程共享的!!很多人都是折腾半天发现不能共享,不是代码的问题,是这里设置的问题。至于如何设置,这里就不说了,卖个关子,呵呵。。。。。
    然后,在FLEX代码中,创建连接:
[java]
private function InitApp():void
{  
nc=new NetConnection;  
nc.connect("rtmp://192.168.0.100/SharedObjectApp");  
nc.addEventListener(NetStatusEvent.NET_STATUS,operateShareObject);  
}  

private function operateShareObject(evt:NetStatusEvent):void
{  
isConnectSuccess=(evt.info.code=="NetConnection.Connect.Success");  
if(isConnectSuccess)
{  
shareObject=SharedObject.getRemote("ShareTest", nc.uri, false);  
shareObject.connect(nc);  
shareObject.addEventListener(SyncEvent.SYNC,detectSO);  
}  
}  

private function detectSO(e:SyncEvent):void
{  
for(var chng:uint;chng<e.changeList.length;chng++)
{  
switch(e.changeList[chng].code)
{  
case "change":  
updateAllClientMsg();  
break;  
default:  
break;  
}  
}  
}  
      
private function updateAllClientMsg():void
{
memo1.text+=shareObject.data.msg+"\n";  //这是文字信息的共享
}
  
  完整的代码很多地方都能找到,就不贴了,有需要的找我吧。解释一下,每个客户端需要调用类似下面的代码来通知服务器更新数据:
    shareObject.setProperty("msg", msgText.text);
shareObject.data.msg这里的msg就是所更新的属性,你可以根据自己的需要随便定义,setProperty的第二个参数是msg对应的数据。www.atcpu.com
在共享画图的时候,我们在鼠标按下时开始在本地画面、鼠标移动时继续画并记录坐标数据,鼠标抬起时本地画图完成,同时调用setProperty将线条粗细、颜色、透明度等信息以及所有坐标数据传递给服务器,在上面的updateAllClientMsg里面根据这些数据画图,就可以更新到所有客户端,实现共享画图了。
作者:avsuper

喜欢0 评分0
游客

返回顶部