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

一:利用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>  
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>  
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. }  
简易聊天室本次实验的目的是通过以下题目掌握JSP内置对象,包括:request,response,session,application等。 (1)制作简易聊天室,能够实现简单的页面聊天功能。 (2)制作网页计数器,要求相同的窗口内刷新页面访问次数并不增加,并且用图片来显数字。1、 熟悉request、response、session、application、out等内置对象; 2、 选择制作网页计数器程序需准备数字图片;1、进入jsp子目录,编写简易聊天室的JSP程序,聊天室的需要实现的基本功能:输入昵称、聊天。 2.根据功能编写页面代码。二、网页计算器 利用内置对象application <html> <head> <base href="<%=basePath%>"> <title>My JSP 'Counter.jsp' starting page</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <!-- <link rel="stylesheet" type="text/css" href="styles.css"> --> </head> <body> 您是第位访问者! </body> </html> 简易聊天室本次实验的目的是通过以下题目掌握JSP内置对象,包括:request,response,session,application等。 (1)制作简易聊天室,能够实现简单的页面聊天功能。 (2)制作网页计数器,要求相同的窗口内刷新页面访问次数并不增加,并且用图片来显数字。1、 熟悉request、response、session、application、out等内置对象; 2、 选择制作网页计数器程序需准备数字图片;1、进入jsp子目录,编写简易聊天室的JSP程序,聊
实验:内置对象使用 一、实验目的 1、掌握各个内置对象的含义; 2、理解并熟练应用session、application对象。 二、实验内容 1、设计聊天室,在聊天室中,需要通过JSP内置对象application来实时保存特定数量的当前聊天信息。 聊天室的设计包括:用户进行登录,选择聊天室,进行聊天,退出聊天室。 在聊天室中,用户只需输入一个用户名就可以进入聊天室,但是如果当前有人在使用该用户名,那么就必须换一个唯一的用户名。 具体要求:  用户登录成功后,程序会要求用户选择聊天室。可以不设置用户自行建立聊天室的功能,而且在聊天中途不能从一个聊天室切换到另一个聊天室。  进入聊天室后,用户可以从用户信息窗口看到该聊天室中所有用户的用户名,也可以在聊天窗口中看到随时更新的聊天信息。用户可以给所有人或某一个聊天用户发送公共的聊天信息,这个聊天内容大家都可以看到。用户也可以给某个用户发送私人的聊天信息,这种信息属于私聊信息,只有发送者和接收者可以看到。此外,聊天窗口还会出现一些系统公告,比如某某上站、某某离开等消息,另外用户还可以自己定义聊天信息和聊天用户信息刷新的时间间隔。  在用户单击“退出”按钮后,页面关闭,同时application和session中保存的信息都将丢失。 三、实验方法 1、用户登录信息使用request对象getParameter()方法得到用户登陆的一些信息; 2、公聊信息可以使用application对象,私聊信息使用session对象。 3、聊天的信息要不断刷新页面,使用户实时看到聊天信息。 4、用户退出时,有两种情况需要考虑:一是用户点击“退出”按钮,二是关闭浏览器,强制退出窗口,可查阅windows感知浏览器关闭的事件的相应方法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值