`
hereson
  • 浏览: 1453960 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

FMS两种方式实现简易聊天室

    博客分类:
  • fms2
阅读更多

原理和代码都很简单,没什么好说的.

 

一:利用ShareObject的同步事件来将消息广播到所有客户端:

 

 

Java代码 复制代码
  1. <?xml version="1.0" encoding="utf-8"?>   
  2. <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" backgroundColor="white" layout="vertical" initialize="BasicPracticeSO();">   
  3.     <mx:Script>   
  4.         <![CDATA[   
  5.             private var nc:NetConnection;   
  6.             private var shareObject:SharedObject;   
  7.             private var monthDay:Date;   
  8.             private var isConnectSuccess:Boolean;   
  9.             private static const RTMP_URL:String="rtmp://localhost/BasicSO";   
  10.                
  11.                
  12.             private function BasicPracticeSO():void{   
  13.                 nc=new NetConnection;   
  14.                 nc.connect(RTMP_URL);   
  15.                 nc.addEventListener(NetStatusEvent.NET_STATUS,operateShareObject);   
  16.             }   
  17.                
  18.             private function operateShareObject(evt:NetStatusEvent):void{   
  19.                 isConnectSuccess=(evt.info.code=="NetConnection.Connect.Success");   
  20.                 if(isConnectSuccess){   
  21.                     shareObject=SharedObject.getRemote("userInfo",nc.uri,false);   
  22.                     monthDay=new Date();   
  23.                     shareObject.connect(nc);   
  24.                     shareObject.addEventListener(SyncEvent.SYNC,detectSO);   
  25.                 }   
  26.             }   
  27.                
  28.             private function detectSO(e:SyncEvent):void{   
  29.                 for(var chng:uint;chng<e.changeList.length;chng++){   
  30.                 switch(e.changeList[chng].code){   
  31.                     case "change":   
  32.                         updateAllClientMsg();   
  33.                         break;   
  34.                     case "clear":   
  35.                         break;   
  36.                     case "success":   
  37.                         break;   
  38.                     default:   
  39.                         break;   
  40.                     }   
  41.                 }   
  42.             }   
  43.                
  44.             private function updateAllClientMsg():void{   
  45.                 soList.text+=shareObject.data.msg+"\n";   
  46.             }   
  47.            
  48.                
  49.             private function addDataToShareObject():void{   
  50.                 shareObject.setProperty("msg",msgText.text);   
  51.                 soList.text+=msgText.text+"\n";   
  52.                 msgText.text="";   
  53.             }   
  54.         ]]>   
  55.     </mx:Script>   
  56.     <mx:Label text="ShareObject data:"/>   
  57.     <mx:TextArea id="soList" width="300" height="120">   
  58.            
  59.     </mx:TextArea>   
  60.     <mx:Form>   
  61.         <mx:FormHeading label="add data to ShareObject:"/>   
  62.         <mx:FormItem label="msg:">   
  63.             <mx:TextInput id="msgText"/>   
  64.         </mx:FormItem>   
  65.         <mx:FormItem>   
  66.             <mx:Button label="send Msg" click="addDataToShareObject();"/>   
  67.         </mx:FormItem>   
  68.     </mx:Form>   
  69. </mx:Application>  
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" backgroundColor="white" layout="vertical" initialize="BasicPracticeSO();">
	<mx:Script>
		<![CDATA[
			private var nc:NetConnection;
			private var shareObject:SharedObject;
			private var monthDay:Date;
			private var isConnectSuccess:Boolean;
			private static const RTMP_URL:String="rtmp://localhost/BasicSO";
			
			
			private function BasicPracticeSO():void{
				nc=new NetConnection;
				nc.connect(RTMP_URL);
				nc.addEventListener(NetStatusEvent.NET_STATUS,operateShareObject);
			}
			
			private function operateShareObject(evt:NetStatusEvent):void{
				isConnectSuccess=(evt.info.code=="NetConnection.Connect.Success");
				if(isConnectSuccess){
					shareObject=SharedObject.getRemote("userInfo",nc.uri,false);
					monthDay=new Date();
					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;
					case "clear":
						break;
					case "success":
						break;
					default:
						break;
					}
				}
			}
			
			private function updateAllClientMsg():void{
				soList.text+=shareObject.data.msg+"\n";
			}
		
			
			private function addDataToShareObject():void{
				shareObject.setProperty("msg",msgText.text);
				soList.text+=msgText.text+"\n";
				msgText.text="";
			}
		]]>
	</mx:Script>
	<mx:Label text="ShareObject data:"/>
	<mx:TextArea id="soList" width="300" height="120">
		
	</mx:TextArea>
	<mx:Form>
		<mx:FormHeading label="add data to ShareObject:"/>
		<mx:FormItem label="msg:">
			<mx:TextInput id="msgText"/>
		</mx:FormItem>
		<mx:FormItem>
			<mx:Button label="send Msg" click="addDataToShareObject();"/>
		</mx:FormItem>
	</mx:Form>
</mx:Application>

 

 

二:在FMS服务端通过编码方试广播消息到所有客户端:

 

     1.客户端代码:

     

     

Java代码 复制代码
  1. <?xml version="1.0" encoding="utf-8"?>   
  2. <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" backgroundColor="white" layout="vertical" initialize="initAppSO();">   
  3.     <mx:Script>   
  4.         <![CDATA[   
  5.             import com.client.ClientObj;   
  6.             private var nc:NetConnection;   
  7.             private var shareObject:SharedObject;   
  8.             private var monthDay:Date;   
  9.             private var isConnectSuccess:Boolean;   
  10.             private static const RTMP_URL:String="rtmp://localhost/BasicSO/chat";   
  11.                
  12.                
  13.             private function initAppSO():void{   
  14.                 nc=new NetConnection;   
  15.                 nc.connect(RTMP_URL);   
  16.                 var clientObj:ClientObj=new ClientObj(soList);   
  17.                 nc.client=clientObj;   
  18.                 nc.addEventListener(NetStatusEvent.NET_STATUS,checkStatus);   
  19.             }   
  20.                
  21.             private function checkStatus(evt:NetStatusEvent):void{   
  22.                 isConnectSuccess=(evt.info.code=="NetConnection.Connect.Success");   
  23.                 if(isConnectSuccess){   
  24.                     soList.text+="connect success"+"\n";   
  25.                 }   
  26.             }   
  27.                
  28.                
  29.             private function addDataToShareObject():void{   
  30.                 var msg:String=msgText.text;   
  31.                 var responder:Responder=new Responder(callback);   
  32.                 nc.call("writeFile",responder,msg);   
  33.                 msgText.text="";   
  34.             }   
  35.                
  36.             private function callback(str:String):void{   
  37.                 // ToDo something   
  38.             }   
  39.                
  40.         ]]>   
  41.     </mx:Script>   
  42.     <mx:Label text="chating list data:"/>   
  43.     <mx:TextArea id="soList" width="300" height="220">   
  44.     </mx:TextArea>   
  45.     <mx:HBox>   
  46.         <mx:Label text="msgText:"/>   
  47.         <mx:TextInput id="msgText"/>   
  48.         <mx:Button label="send Msg" click="addDataToShareObject();"/>   
  49.     </mx:HBox>   
  50. </mx:Application>  
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" backgroundColor="white" layout="vertical" initialize="initAppSO();">
	<mx:Script>
		<![CDATA[
			import com.client.ClientObj;
			private var nc:NetConnection;
			private var shareObject:SharedObject;
			private var monthDay:Date;
			private var isConnectSuccess:Boolean;
			private static const RTMP_URL:String="rtmp://localhost/BasicSO/chat";
			
			
			private function initAppSO():void{
				nc=new NetConnection;
				nc.connect(RTMP_URL);
				var clientObj:ClientObj=new ClientObj(soList);
				nc.client=clientObj;
				nc.addEventListener(NetStatusEvent.NET_STATUS,checkStatus);
			}
			
			private function checkStatus(evt:NetStatusEvent):void{
				isConnectSuccess=(evt.info.code=="NetConnection.Connect.Success");
				if(isConnectSuccess){
					soList.text+="connect success"+"\n";
				}
			}
			
			
			private function addDataToShareObject():void{
				var msg:String=msgText.text;
				var responder:Responder=new Responder(callback);
				nc.call("writeFile",responder,msg);
				msgText.text="";
			}
			
			private function callback(str:String):void{
				// ToDo something
			}
			
		]]>
	</mx:Script>
	<mx:Label text="chating list data:"/>
	<mx:TextArea id="soList" width="300" height="220">
	</mx:TextArea>
	<mx:HBox>
		<mx:Label text="msgText:"/>
		<mx:TextInput id="msgText"/>
		<mx:Button label="send Msg" click="addDataToShareObject();"/>
	</mx:HBox>
</mx:Application>

 

 

2.FMS服务器端代码:

 

这里我把聊天记录写到了服务器端的一个文件里.其实写不写都无所谓.

 

Java代码 复制代码
  1. application.onAppStart=function(){   
  2.     trace("app is started");   
  3. };   
  4.   
  5. application.onConnect=function(client,name){   
  6.     client.id=name;   
  7.     application.acceptConnection(client);   
  8.     var file=new File("chatfile.text");   
  9.        
  10.     client.writeFile=function(msg){   
  11.         file.open("text","append");   
  12.         if(file.isOpen){   
  13.             msg=client.id+":"+client.ip+":say:\n"+msg;   
  14.             trace(msg);   
  15.             file.write(msg);   
  16.             file.close();   
  17.         }   
  18.         //client.call("serverToClient",null,msg);   
  19.         for(var i=0;i<application.clients.length;i++){   
  20.             application.clients[i].call("serverToClient",null,msg);   
  21.         }   
  22.     }   
  23. };   
  24.   
  25.   
  26. application.onDisconnect=function(client){   
  27.        
  28.     for(var i=0;i<application.clients.length;i++){   
  29.         msg=application.clients[i].id+"  left!";   
  30.         application.clients[i].call("serverToClient",null,msg);   
  31.     }   
  32. }  
分享到:
评论

相关推荐

    简易聊天室flash多人聊天 FMS实现

    【标题】"简易聊天室flash多人聊天 FMS实现"揭示了这个项目的核心是构建一个基于Flash的多人在线聊天系统,采用FMS(Flash Media Server)作为后台技术来实现实时的通信功能。Flash是一种广泛应用于网页上的多媒体...

    FMS聊天室下载FMS

    【FMS聊天室下载FMS】相关知识点详解 FMS(Flash Media Server)是由Adobe公司开发的一款流媒体服务器软件,主要用于实时音频、视频的发布和交互。它支持HTTP Live Streaming (HLS)、RTMP(Real Time Messaging ...

    FMS制作聊天室例子

    【描述】:在“FMS制作聊天室例子”中,开发者可能通过ActionScript 3(AS3)编程语言与FMS进行交互,创建一个能够实时传递消息、实现用户间即时沟通的平台。由于描述中的...

    asp+fms聊天室

    【ASP+FMS语音聊天室】是一种基于ASP技术与FMS(Flash Media Server)构建的实时在线聊天系统。ASP,全称Active Server Pages,是微软开发的一种服务器端脚本环境,用于生成动态网页。FMS则是Adobe公司提供的流媒体...

    FMS聊天室+AS3.0

    【描述】"FMS+AS3.0多人聊天室源文件下载"说明我们可以获取到实现这一功能的完整源代码。这意味着开发者或学习者可以深入研究代码结构,理解其工作原理,并根据需要进行自定义修改或扩展。ActionScript 3.0是Flash...

    利用fms实现视频聊天程序

    FMS(Flash Media Server)是Adobe公司推出的一款强大的流媒体服务器,它为开发者提供了一种高效、稳定的方式来实现这样的功能。本教程将详细介绍如何利用FMS构建一个简单的视频聊天程序。 【描述】:“利用FMS实现...

    as3 + fms3聊天室

    【标题】"AS3 + FMS3聊天室"是一个基于ActionScript 3(AS3)编程语言和Flash Media Server 3(FMS3)技术构建的在线聊天室应用。这个项目提供了一个简单但实用的平台,让多个用户可以实时交流分享信息。 【描述】...

    FMS3系列(五):通过FMS实现时时视频聊天(Flash|Flex)

    在本篇博文中,我们将深入探讨“FMS3系列”的第五部分,主要关注如何通过Adobe Flash Media Server (FMS) 3实现实时视频聊天功能。这个话题对于开发交互性强、实时性高的网络应用来说至关重要,特别是对于那些需要...

    FMS视频聊天程序

    【描述】中的反复提及"FMS, flash, 视频聊天"强调了这一系统主要依赖于Adobe Flash技术和FMS服务器来实现视频聊天功能。Flash是一种用于创建动态网页内容的编程语言,特别适合开发交互性强的多媒体应用。视频聊天则...

    Flex +FMS实现视频聊天

    Flex+FMS写的视频聊天,在本机亲测通过。但唯一不足得是在别的机子上连接不成功。我也不知道为什么。望有才之士能完善。huzhaohui1992@qq.com 如能完善,请给我邮箱一份,在下感激不尽。

    Flex和Fms3打造在线聊天室 源码和文档

    Flex和FMS3是构建实时互动应用程序的强大工具,尤其适合创建在线聊天室这样的实时通信平台。这个源码和文档集合提供了详细的步骤和技术说明,帮助开发者理解如何利用这些技术实现一个功能完备的聊天室。 Flex是一种...

    fms之P2P视频聊天

    在这个“fms之P2P视频聊天”项目中,我们将探讨如何利用FMS和P2P技术来实现高清视频聊天功能,并可能将其扩展到更多的应用场景。 首先,P2P视频聊天的核心在于如何建立两端之间的连接。由于NAT(网络地址转换)的...

    FMS实现视频时时聊天其实很简单

    以上就是利用 FMS 实现视频实时聊天的核心技术点。从创建 NetConnection 对象到监听连接状态,再到发布视频流,每个步骤都是构建实时视频聊天应用的关键环节。通过这些知识点的学习,可以更好地理解和掌握 FMS 在...

    flash+fms2视频聊天室-附带源码

    flash+fms2视频聊天室-附带源码 源码在 html页面上有下载的超链接

    通过FMS实现时时视频聊天(Flash|Flex)源码

    【标题】中的“通过FMS实现时时视频聊天(Flash|Flex)源码”是指使用Adobe的Flash Media Server (FMS)技术,结合Flash和Flex这两种编程语言,开发出一款能够实现实时视频通信的应用程序。这个标题暗示了我们将在...

    fms.rar_flex_flex and fms_fms_fms rtmp_fms flex

    标题"Fms.rar_flex_flex and fms_fms_fms rtmp_fms flex"和描述中的关键词揭示了这个压缩包包含的是与Adobe Flex和Flash Media Server(FMS)相关的项目资源,主要用于创建一个实时通信应用,例如聊天室。Flex是一种...

    网页版视频聊天室 视频聊天程序 Feelink V2.5

    【网页版视频聊天室 视频聊天程序 Feelink V2.5】 在互联网技术日新月异的今天,视频聊天已经成为了人们日常沟通的重要方式。Feelink V2.5是一款专为网页设计的视频聊天软件,它提供了丰富的功能,旨在为用户带来...

    基于FMS的视频聊天源码

    【基于FMS的视频聊天源码】是一种使用Adobe Flash Media Server (FMS)技术实现的实时视频聊天应用程序的源代码。这个项目展示了如何利用Flex框架进行客户端开发,并与服务器端的FMS进行交互,实现视频流的传输和聊天...

    FMS经典资料(包含环境配置)

    利用FMS的功能,开发者可以轻松创建简单的聊天室应用。聊天室的基本架构涉及客户端与服务器之间的实时通信,通常采用数据包的形式交换文本消息。开发者需要关注如何高效地处理消息队列,以及如何设计用户界面来显示...

Global site tag (gtag.js) - Google Analytics