收藏 分享(赏)

FMS3技术文档之四.doc

上传人:11xg27ws 文档编号:7056472 上传时间:2019-05-04 格式:DOC 页数:39 大小:423KB
下载 相关 举报
FMS3技术文档之四.doc_第1页
第1页 / 共39页
FMS3技术文档之四.doc_第2页
第2页 / 共39页
FMS3技术文档之四.doc_第3页
第3页 / 共39页
FMS3技术文档之四.doc_第4页
第4页 / 共39页
FMS3技术文档之四.doc_第5页
第5页 / 共39页
点击查看更多>>
资源描述

1、4.1.在多个连接上共享数据当我第一次遇到远程共享对象时,我想,至发明浏览器以来,它已成为互联网的最重要的贡献。多年来看法几乎没有变化,特 别是任何应用程序,在一个 “live”的情况需要传送数据与其它结合的时候。因此,什么是共享对?它们是什么用来做什么的呢?共享对象是可以显示和在一个浏览器上控制的, 和在另一个上可以看到。因此,如果你有一个应用程序使用文字输入栏来显示文本,您可以显示该文本在您自己的浏览器,以及在所有其他人的 浏览器上都可以在相 同的应用程序上看到。除了文字,你可以在一个屏幕上移动影片剪辑,它们也会在其他屏幕上移动。您可以点击一个在浏览器上的按 惯,来开启一个在所有的浏览器

2、使用共享对象的事件。当一个共享对象是设立在一个FMS3的应用程序,它建立了一个“subscription ”,其它 人如果运行了相同的应用程序的话会自动订阅它。把共享对象想像为杂志,大家从 该杂志获得订阅。 “杂志”以实时数据的形式发布。因此,如果您正在发送一个文本字段中的文本的话,一旦您输入数据,在远程计算机上就可以看到了。4.1.1.持久和非持久共享对像非持久共享对象是可以想像成变量。当您退出一个 应用程序,所有变量中的值会消失。他们不会继续存在。同样地,一旦用户离开应用程序,一个在非持久共享对象中的数据会丢失。持久的共享对象是更像是数据库中的数据。持久共享 对象的数据是存 储在服务器的硬

3、盘上,因此,持 久。当您需要从不同的地方来访问你的数据,持久共享 对象是非常的方便。不过,这章只涉及非持久共享对象。在第八章,会讨论更多高级的共享对象的概念,以及 研究服务器端和持久共享对象。4.1.2.利用非持久远程共享对像而任何非持久远程共享对象将远远低于其可能的用途,以下列出你可以使用的想法: 远程控制幻灯片放映 文字聊天 网络对战 DJ应 用程序,远程选择和播放歌曲 A doorbell.门铃? 现场拍卖 客户服务应用程序记住这些应用程序,让我们看看如何使用 FMS3 创建和使用共享 对象。4.2.实例化远程共享对像这一章将以最少的代码来展示三种不同的远程共享对象。首先是一个指示器,可

4、以在其 它人的网页里,把它指向任何位置。这种指针可以派上用场,如果您对一个偏远的位置做出展示,你必须给观众指示不同的事情。第二,您会看到如何使最低限度的 代码来制作文本聊天,一个输 入文本框中输入的文本,会在所有用户的屏幕上显示出来。第三,使用一个共享影片剪辑,您会看到如何在 远程观众的屏幕上打开一个 web页面。这些都是微不足道的例子,但他们显示出你可以使用远程共享对象来做不同的事情。其余的就要看你的想象力了。当声音一个变量时,你可以声明它的 类型:private var so:SharedObject;通用实例化一个共享对像的格式,如 图4-1:图4-1. Instantiating Sh

5、aredObject classgetRemote(name:String, remotePath:String = null, persistence:Object = false, secure:Boolean = false):SharedObject如果尚不存在共享对象,则此方法将 创建一个共享对象。你可以使用getLocal()方法建立一个本地共享对像。本书中没有使用本地共享 对像的例子。name:String 对象的名称。 该名称可以包含正斜杠 (/);例如,work/addresses 是合法名称。 共享对象名称中不允许使用空格,也不允 许使用以下字符: % : ” , ? ?

6、#remotePath:String (default = null) 将存储共享对象的服 务器的 URI。 此 URI 必须与传递给 SharedObject.connect() 方法的 NetConnection 对象的 URI 相同。persistence:Object (default = false) 指定共享对象的数据属性的特性是本地永久储存还是远程永久储存,或者是同时进行本地永久储存和远程永久储存。此参数 还可指定共享对象的本地存 储位置。 可接受的值包括:false,指定客户端或服务器上的共享对象不是永久性的。true,指定只有服务器上的共享对象是永久性的。共享对象的完整路径或

7、部分路径,指定客户端和服务器上的共享 对象都是永久性的。 客户端的共享对象存储在指定路径中,而服 务器中的共享 对象则存储在应用程序目录中的子目录内。4.2.1.设立共享对象存储:插槽当你设置了一个共享对像实例,你需要基于共享 对像的属性上 设置一个存储系 统。不同于早期版本的Flash Communication Server和Flash Media Server,Flash Media Server 3使用SharedObject.setProperty()方法来赋值到一个共享 对象的属性。在分配不同的共享对象属性,您可以使用各种数据类 型来创建 插槽。以下 显示一个简单的属性插槽:var

8、 memberName:String= name_txt.text;so.setProperty(”cliName”, memberName);共享对象有一个data 属性:cliname 。所以现在有一个字符名称存 储槽,可与 连接到相同应用程序的其他人共享。同样地,作为您的应用需求,您可以设定许多插槽,使用适当的数据类型作为 存储的数 据。每当共享对象的属性发生 变化,会触 发一个SyncEvent,要使用一个事件处理程序,来为所有连接到同一个共享对像上的连接更新资料,。4.2.2. Inspecting a Shared Object检查一个共享对像为了更好地了解一个共享对象是怎么回事,

9、看看它的内容。它应该会出现类似的内容,一个数组 或任何对象,已超过一个单一的元素。添加一个文件夹到您的服 务器端,文件夹命名为basicso ; 在这一章中,此文件夹将被用于所有的例子。在下面的例子中,几个不同类型的数据都被添加到插槽。属性包括字面以及变量,以说明可以放进共享对象数据的范 围。4.2.2.1. SyncEvent类当您使用远程共享的对象被其他客户使用,一个重要的 类 就是SyncEvent 。顾名思义,这个事件使用在同步事件中,在您的浏览器上和那些在其他浏览器上使用相同的远程共享对象。通过使用SYNC常数,一旦客户端连接到一个远程共 享对象,一个同步事件发生。每当一个客户端改变

10、了一个共享 对象的data属性,会调用一个同步事件。但是,由于各种不同的动作关联到共享对象产生的事件, 您需要一种方法,以确定事件的种类。4.2.2.2.changeList属性在ActionScript 3.0的,其中一个关键的属性,在成功地 处理共享对像有关动作所产生的事件,是 SyncEvent.changeList属性。该 changeList属 性是一个存储共享对象属性的数组。changeList 属性的一个关 键属性code:指示什么类型的事件发生。当第一次连接到一个共享 对象, code会生 成一个code 值“clear” 。此code值可以用来帮助,跟踪连接到同一个共享对象的

11、用户的数量。当一个远程用户的改变了共享对象的值,会 产生两个code事件。 一个“success”值表示客户成功改变值。一个“ change”值表明别人改变了共享对象。因此,当客户端改变了,他会接收到” success”代 码,以及其他任何连接到同一个共享 对象的客户端都会接收到 “success”代码值。对于第一个例子,无论是“clear”和“success”状态,都直接用来创造插槽,并指派值给共享对像,然后用来显 示这些 插槽的内容。为了看看所有这些是怎么工作的,你可以在下面一个应用程序中 trace()出来看看: 在BasicSO构造函数中添加一个NetConnection。它会产生一个

12、NetStatusEvent事件 在doSO函数中建立一个共享对像,把共享 对像连接到 NetConnection实例, 产生一个sync事件 在seeSo函数中,使用SyncEvent确定事件的类型。它使用在changelist属性数组的零元素。一发现“clear” ,表示您已成功连接到共享对象,并调用函数来设置共享对象属性。如果它发现“success” 表示客户端更改了共享对象这个应用程序的目的是:帮助你了解关于共享对像是怎么工作的一些东西,但由于设计,它着重于处理的步骤和如何改变共享对像中的值。暂时这并不共享任何 远端。以下步 骤显示了如何设置它: 建立一个BasicSO.fla 在文档

13、类中输入BasicSO 建立一个BasicSO.as文件 在BasicSO.as文件中输入以下代码:Example 4-1. BasicSO.asCode View:packageimport flash.display.Sprite;import .SharedObject;import flash.events.NetStatusEvent;import flash.events.SyncEvent;import .NetConnection;/import .ObjectEncoding;public class BasicSO extends Spriteprivate var tes

14、t_so:SharedObject;private var nc:NetConnection;private var monthDay:Date;private var good:Boolean;public function BasicSO ()/NetConnection.defaultObjectEncoding=.ObjectEncoding.AMF0;/Connectvar rtmpNow:String=”rtmp:/192.168.0.11/basicSO”;nc=new NetConnection;nc.connect (rtmpNow);nc.addEventListener

15、(NetStatusEvent.NET_STATUS,doSO);private function doSO (e:NetStatusEvent):voidgood=e.info.code = “NetConnection.Connect.Success”;if (good)/Set up shared objecttest_so=SharedObject.getRemote(”test”,nc.uri,false);monthDay=new Date;test_so.connect (nc);test_so.addEventListener (SyncEvent.SYNC,seeSO);pr

16、ivate function seeSO (se:SyncEvent):voidtrace (se.changeList0.code);switch (se.changeList0.code)case “clear” :loadSO ();break;case “success” :showSO ();break;private function loadSO ():voidtest_so.setProperty (”city”,”Katmandu”);test_so.setProperty (”dayOfMonth”,monthDay.getDate();test_so.setPropert

17、y (”verity”,true);test_so.setProperty (”bunch”,250);private function showSO ():voidtrace (test_so.data.city);trace (test_so.data.dayOfMonth);trace (test_so.data.verity);trace (test_so.data.bunch); 测试影片运行例子后,在输出窗口中会 显示:clearsuccessKatmandu15true250你可以看到,共享对象在ActionScript中具有基本数据类型与其他变量与属性一样,像其它对像和变量一样

18、可以提取。4.2.3.同步的共享对像每当任何共享对象的属性,或 “插槽”改变,这种改变一定会广播给所有这些连接。 处理这一事件的程序是SyncEvent.SYNC ,回调。每一次任何数据属性的变化,一个改变事件会触发SyncEvent.SYNC ,用 这种方式回调,在所有的连接中,所有改变的属性会被更新。一般 格式是如下:share_so.addEventListener (SyncEvent.SYNC,syncSO);.private function syncSO(event: SyncEvent)/用so.data的属性的值来更新 变量variable1= my_so.data.attr

19、ibute1;variable2= my_so.data.attribute2;variable3= my_so.data.attribute3;这种变化的过程中相当简单。在脚本中的某 处,某个用 户改 变了在共享对像data属性中的一个插槽。一旦属性被改变,触发SyncEvent.SYNC ,回调;和在此情况下,SyncEvent.SYNC ,回调容器中的代码,更新改变遍及应用程序中的连接。为在整个过程中正常运作,你需要 连接共享对象和服务器, SharedObject. Connect(NetConnection)。为 了能够与远程共享对象工作的有意 义,您将需要一条线连接共享对象,例如,

20、以FMS3使用 NetConnection实例作为一个参数。例如:billz_so.connect(nc);作出必要的连接共享对象,例如 billz_so发送和接收共享对象的变化,使用 Netconnection实例nc 。这本章中的所有例子,注意力在SharedObject.connect(NetConnection)语句,和以 往一样都不要忘记把它包含在您的应用程序中。(当您 调试 您的代码,通常你会 发现,共享对象连接已经离开了,没有它,您的共享对象,将不能正确运行)。4.3.简单例子:共享影片看看共享对象如何与远程网页工作, 这简单的项目使用一个影片剪 辑作为一个共享对象。 这个例子说

21、明如何设置并在Stage(你的舞台和所有连接到相同 共享对像的)范围内移动影片。在 创建在线幻灯片放映应用程序的工作中,像是与PowerPoint简报,你需要的所有观众看到指示器移 动到屏幕上的位置, 如果你不想让他们关注的焦点。使用一个 岛屿影片剪辑,作为一个指示器,这个应用程序有4个岛的名字在舞台的四个角落。四个名字,只是简单地放置在舞台,当 你在屏幕上移动指示器,对所有 连接到应用程序的屏幕上会跑到相同的位置。您将使用这些类和对象在应用程序中:ClassesNetConnectionSharedObjectNetStatusEventSyncEventMouseEventObjectsM

22、ovie Clip (1)请按照下列步骤操作,以制作 该项目:1. 建立一个MinSOmc. fla2. 如 图4-2中所示,在舞台的4 个角落,建立一个不同的 岛屿的名称3. 如 图4-2中所示,用绘图工具绘制一个岛屿(或者画一个箭头指示器或者其它东西)4. 选择指示器把它转换为影片剪辑,名称 为Island5. 把指示器从舞台中删除,因 为我们只需要从库中调用6. 建立一个MinSOmc.as.7. 在 MinSOmc.as中添加如下代 码Example 4-2. MinSOmc.asCode View:packageimport flash.display.Sprite;import .

23、SharedObject;import flash.events.NetStatusEvent;import flash.events.SyncEvent;import .NetConnection;import flash.events.MouseEvent;/import .ObjectEncoding;public class MinSOmc extends Spriteprivate var pointer_so:SharedObject;private var nc:NetConnection;private var good:Boolean;private var island:I

24、sland;public function MinSOmc()/NetConnection.defaultObjectEncoding=.ObjectEncoding.AMF0;/Connectvar rtmpNow:String=“rtmp:/192.168.0.11/basicSO“;nc=new NetConnection ;nc.connect (rtmpNow);nc.addEventListener (NetStatusEvent.NET_STATUS,doSO);island=new Island ;addChild (island);island.x=200;island.y=

25、200;island.addEventListener (MouseEvent.MOUSE_DOWN,beginDrag);island.addEventListener (MouseEvent.MOUSE_UP,endDrag);private function doSO (e:NetStatusEvent):voidgood=e.info.code = “NetConnection.Connect.Success“;if (good)/Shared objectpointer_so=SharedObject.getRemote(“point“,nc.uri,false);pointer_s

26、o.connect (nc);pointer_so.addEventListener (SyncEvent.SYNC,doUpdate);private function doUpdate (se:SyncEvent):voidfor (var cl:uint; cl “;chatName.addEventListener (FocusEvent.FOCUS_IN,cleanName);addChild (chatName);rtmpGo = “rtmp:/192.168.0.11/basicSO“;nc = new NetConnection( );nc.connect (rtmpGo);n

27、c.addEventListener (NetStatusEvent.NET_STATUS,doSO);private function doSO (e:NetStatusEvent):voidgood=e.info.code = “NetConnection.Connect.Success“;if (good)/Set up shared objecttext_so=SharedObject.getRemote(“test“,nc.uri,false);text_so.connect (nc);text_so.addEventListener (SyncEvent.SYNC,checkSO)

28、;private function checkSO (e:SyncEvent):voidfor (var chng:uint; chng“ | chatName.text=“);if (noName)textArea.appendText (“You must enter your name n“);elsetext_so.setProperty (“msg“,chatName.text +“: “+ textInput.text);textArea.appendText (chatName.text +“: “+textInput.text + “n“);textInput.text=“;p

29、rivate function checkKey (e:ComponentEvent):voidnoName=(chatName.text=“ | chatName.text=“);if (noName)textArea.appendText (“You must enter your name n“);elsetext_so.setProperty (“msg“,chatName.text +“: “+ textInput.text);textArea.appendText (chatName.text +“: “+textInput.text + “n“);textInput.text=“;Figure 4-6. Text chat with name-delineated messages

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报