加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

[FMS]一步一步学Flash Media Server(四)

发布时间:2020-12-15 18:22:36 所属栏目:百科 来源:网络整理
导读:今天我们讲一个非常简单的多人聊天功能,同样我们也没有服务端代码,今天要用到一个新东西----SharedObject 先看一段代码,更改一下上一节中的代码: ? package ?net.smilecn.chat{ ???? ???? import ?flash.display.Sprite; ???? ?flash.net.NetConnection; ???

今天我们讲一个非常简单的多人聊天功能,同样我们也没有服务端代码,今天要用到一个新东西----SharedObject

先看一段代码,更改一下上一节中的代码:

?

package ?net.smilecn.chat{
????
????
import ?flash.display.Sprite;
????
?flash.net.NetConnection;
????
?flash.net.SharedObject;
????
?flash.events.NetStatusEvent;
????
?flash.events.SyncEvent;
????
?flash.events.MouseEvent;
????
?fl.controls.TextArea;
????
?fl.controls.Button;
????
?fl.controls.TextInput;

????
????
public ? class ?Chat? extends ?Sprite{
????????
????????
private ?var?nc:NetConnection;
????????
?var?rtmpUrl:String? = " rtmp://localhost/chat ;
????????
?var?button:Button;
????????
?var?textArea:TextArea;
????????
?var?textInput:TextInput;
????????
?var?chatMsg_so:SharedObject;
????????
?var?userName:String? user001 ;
????
????????
?function?Chat(): void {
????????????textArea
new ?TextArea();
????????????textArea.setSize?(
200 , 300 );
????????????textArea.move?(
20 );
????????????addChild?(textArea);

????????????textInput
?TextInput();
????????????textInput.width?
140 ;
????????????textInput.move?(
330 );
????????????addChild?(textInput);

????????????button
?Button();
????????????button.width
50 ;
????????????button.label
发送 ;
????????????button.move?(
170 );
????????????addChild(button);
????????????button.addEventListener?(MouseEvent.CLICK,sendMsg);
????????????
????????????
????????????nc
?NetConnection();
????????????nc.addEventListener?(NetStatusEvent.NET_STATUS,netStatusHandler);
????????????nc.connect?(rtmpUrl);
????????}
????????
????????
?function?netStatusHandler(event:NetStatusEvent): {
????????????
if (event.info.code? == NetConnection.Connect.Success ){
????????????????chatMsg_so
SharedObject.getRemote( chatMsg false );
????????????????chatMsg_so.connect?(nc);
????????????????chatMsg_so.addEventListener?(SyncEvent.SYNC,checkSO);
????????????}
????????}
????????
????????
?function?checkSO?(event:SyncEvent): {
?????????????
for ?(var?i:uint;?i < event.changeList.length;?i ++ )
?????????????{
????????????????????
switch ?(event.changeList[i].code)
????????????????????{
????????????????????????
case clear ?:
????????????????????????????trace(
);
????????????????????????????
break ;
????????????????????????
success ?:
?????????????????????????????trace?(chatMsg_so.data.msg);
?????????????????????????????
;

????????????????????????
change ?:
?????????????????????????????textArea.appendText?(chatMsg_so.data.msg?
+ );
?????????????????????????????
;
???????????????????}
?????????????}
????????}
????????
????????
?function?sendMsg?(e:MouseEvent): {
?????????????chatMsg_so.setProperty?(
msg : ?textInput.text);
?????????????textArea.appendText?(userName?
?textInput.text? );
?????????????textInput.text?
"" ;
????????}


????}
????
}



要看到效果,我们先了布一份EXE的文件,相当一个客户端,然后把userName改一个名字,前一个是user001,这个我们就改成user002,将那个EXE打开,再将FLASH里的这个发布,试着打上文字点发布,看看是不是达到了聊天的效果.

接下来来讲解一下代码:

在连接成功之后,有这样一句代码:chatMsg_so=SharedObject.getRemote("chatMsg",false);

chatMsg_so是我们定义的一个SharedObject实例,SharedObject--共享对象,官方的解释是这样的:

SharedObject 类用于在用户计算机或服务器上读取和存储有限的数据量。 使用共享对象,可在永久贮存在本地计算机或远程服务器上的多个客户端 SWF 文件和对象之间实现实时数据共享。 本地共享对象类似于浏览器 Cookie,远程共享对象类似于实时数据传输设备。

SharedObject可以用来存储数据,这里我们用到它是存储我们的聊天数据.

getRemote方法是得到一个远程共享对象,就是FMS上的一个共享对象,名字叫chatMsg,地址是nc.uri,最后一个参数是是否以文件的形式保存下来,false表示不保存,当服务器上有这样一个名为chatMsg的共享对象时,这个方法就会得到这个共享对象,如果没有这相共享对象,就会创建一个名为chatMsg的共享对象.

我们的代码中,第一个客户连进去后会创建一个共享对象,其它用户再进去,就是得到这个共享对象.

chatMsg_so.addEventListener (SyncEvent.SYNC,checkSO);

这句代码是侦听共享对象的状态

event.changeList[i].code就是状态,这里我们用了三个状态----clear,success,change

clear是清除数据时(我们的代码中第一个人进去时会触发)
success是成功(我们的代码中自己发消息时会触发)
change是改变(我们的代码中别人发消息时会触发)

我们实现这个聊天功能实际是每个人去改变这个共享对象,然后共享对象改变了就会通知所有的客户端,其它人就会收到这个消息(注意自己不会收到change消息).

这个聊天在实际中用处不大,这里只是介绍共享对象的一个使用方式,而且这种聊天还有很多功能都没有实现.(本人不喜欢用共享对象)

在后面我们会讲解怎么写服务端代码,这两节都没有写服务端代码.下节继续.


转载:http://blog.csdn.net/arrowyoung/article/details/2421965

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读