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

FLEX提高篇---------FMS简易聊天室加强版

阅读更多

<!----><!----> <!---->

今天写了下简易聊天室的加强版 , 其实功能也十分有很 , 不过比前面提到的简易聊天室要智能了许多 , 这个聊天室的主要功能有以下 :

 

<!---->1.       <!---->同一用户不能重复登陆 , 否则服务端拒绝 ;

<!---->2.       <!---->可以得到聊天室里人员的列表 ;

<!---->3.       <!---->新用户上线提示 ;

<!---->4.       <!---->用户离线提示 ;

<!---->5.       <!---->发送文本消息 ;

<!---->6.       <!---->新用户上线 , 更新所有聊天室成员列表名单 ;

<!---->7.       <!---->用户离线 , 更新所有聊天室成员列表名单 ;

 

技术上并没有什么花样儿 , 还是如下几个 :

<!---->1.       <!---->客户端与服务端的建立连接 ;

<!---->2.       <!---->监听连接状态 ;

<!---->3.       <!---->客户端调用服务端函数 ;

<!---->4.       <!---->服务端调用客户端函数

 

先看看粗糙的效果图:

 

 

 

 

 

 

 

再看看代码吧:

 

先看客户端的:

 

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="vertical" xmlns:com="com.*" backgroundColor="white">
	<mx:Style source="css.css"></mx:Style>
	<mx:Script>
		<![CDATA[
			import com.client.clientInvockObj;
			import mx.controls.TextInput;
			import com.carlcalderon.arthropod.Debug;
			import mx.utils.StringUtil;
			public var nc:NetConnection;
			
			private static const RTMP_URL:String="rtmp://localhost/chatinglist";
			public var loginName:String;
			private var isConnectSuccess:Boolean;
			
			
			private function initApp():void{
				nc=new NetConnection();
				nc.connect(RTMP_URL,loginName);
				nc.addEventListener(NetStatusEvent.NET_STATUS,checkStatus);
				var obj:clientInvockObj=new clientInvockObj(chatList,chatContent);
				nc.client=obj;
			}
			
			private function checkStatus(e:NetStatusEvent):void{
				trace(e.info.code);
				Debug.log(e.info.code,Debug.BLUE);	
				isConnectSuccess=(e.info.code=="NetConnection.Connect.Success");
				if(isConnectSuccess){
					nc.call("getMsg",new Responder(getMsgResult,getMsgFault));
					loginBtn.enabled=false;
					sendBtn.enabled=true;
					Debug.log("client connect success!");
					
				}
			}
			
			private function getMsgResult(chatMsgArray:Array):void{
				Debug.log("callBack:");
				for(var i:uint=0;i<chatMsgArray.length;i++){
					chatContent.text+=chatMsgArray[i]+"\n";
				}
			}
			
			private function getMsgFault():void{
				
			}
			
			public function sendLogin():void{
				if(StringUtil.trim(userName.text).length>0){
					loginName=userName.text;
					initApp();
				}
			}
			
			public function sendMessage():void{
				nc.call("sendMsg",null,loginName,msg.text);
				msg.text="";
			}
			
			
		]]>
	</mx:Script>
	<mx:HBox width="100%">
		<mx:VBox width="200" height="100%">
			<mx:Label text="用户列表:"/>
			<mx:List id="chatList" width="200" height="400"  labelField="userName" cornerRadius="7"/>
		</mx:VBox>
		<mx:VBox  width="100%">
		<mx:HBox id="loginPanel"  width="100%" height="100%">
			<mx:TextInput id="userName"/>
			<mx:Button label="登陆" id="loginBtn" click="sendLogin();"/>
		</mx:HBox>
			<mx:TextArea id="chatContent" width="250" height="400"/>
			<mx:HBox width="100%" height="100%">
				<mx:TextInput id="msg"/>
				<mx:Button label="发送消息" id="sendBtn" click="sendMessage();" enabled="false"/>
			</mx:HBox>
		</mx:VBox>
	<mx:VBox>
</mx:VBox>
	</mx:HBox>
</mx:Application>

 

 

还有一个用于绑定到客户端NetConnection的client类,供FMS调用:

 

 

package com.client
{
	import mx.controls.List;
	import mx.controls.TextArea;
	
	public class clientInvockObj
	{
		private var chatList:List;
		private var chatContent:TextArea;
		public function clientInvockObj(list:List,chatContent:TextArea)
		{
			this.chatList=list;
			this.chatContent=chatContent;
		}
		
		public function getUserList(userList:Array):void{
				chatList.dataProvider=userList;
			}
		
		public function getMsgInfo(msg:String):void{
			chatContent.text+=msg+"\n";
		}
	}
}
 

 

 

下面是FMS服务端的:

 

 

application.onAppStart=function(){
	trace("App started");
	this.chatMsgArray=new Array();
	this.userListArray=new Array();
}

application.onConnect=function(client,userName){
	trace(" try  connect ")
	if(checkOnline(userName)){
		this.rejectConnection(client);
		return;
	}
	this.acceptConnection(client);
	trace("connected");
	client.userName=userName;
	trace(userName);
	application.userListArray.push(userName);
	sendUserList();
	sendMsgToClient("欢迎 "+userName+"进入聊天室.");
	
	client.getMsg=function(){
		trace("response client");
		return application.chatMsgArray;
	}
	
	client.sendMsg=function(loginUser,msg){
		trace("ClientName:"+loginUser);
		var chatInfo=loginUser+"--说:"+msg+"\n";
		application.chatMsgArray.push(chatInfo);
		sendMsgToClient(chatInfo);
	}
}

application.onDisconnect=function(client){
	trace("用户:"+client.userName+"----下线.");
	removeLeftUser(client.userName);
	sendUserList();
	sendMsgToClient("用户:"+client.userName+"----下线.");
}

function removeLeftUser(userName){
	for(var i=0;i<application.userListArray.length;i++){
		if(application.userListArray[i]==userName){
			application.userListArray.splice(i,1);
		}
	}
}











function sendMsgToClient(chatInfo){
	var leng=application.clients.length;
	for(var i=0;i<leng;i++){
		application.clients[i].call("getMsgInfo",null,chatInfo);
	}
}

function sendUserList(){
	var leng=application.clients.length;
	trace("client num:"+leng);
	for(var i=0;i<leng;i++){
		trace("getUserList----"+i);
		application.clients[i].call("getUserList",null,application.userListArray);
	}
}

function checkOnline(userName){
	var len=application.userListArray.length;
	for(var i=0;i<len;i++){
		if(application.userListArray[i]==userName){
			return true;
		}
	}
	return false;
}
 

对不住大家,代码都没有写注释,因为跟我前面的那篇几乎一样,所以大家不明白可以参看前面的那篇.

 

 

  • 大小: 94.2 KB
  • 大小: 22.6 KB
分享到:
评论
8 楼 runthu 2008-09-21  
xmlns:com="com.*"


package com.client

明显的错误
7 楼 runthu 2008-09-20  
引用
按照你写的,总是报连不上服务器的错误,能给一份源码吗?
rcymonkey@163.com
致谢。

被JavaEye用户民主投票评为差帖,积分-30分。
这有可能是因为你的回贴是灌水性回贴,JavaEye严禁灌水性回贴,您在发贴前请仔细阅读 JavaEye版规和提问的智慧,如有异议,可以在JavaEye站务讨论圈子申诉。
6 楼 runthu 2008-09-17  
按照你写的,总是报连不上服务器的错误,能给一份源码吗?
rcymonkey@163.com
致谢。
5 楼 abo 2008-07-22  
客户端需要插件吗?
4 楼 gakaki 2008-07-21  
learning flash media server 3 有本orelly的书来着。。。
3 楼 upup1000 2008-07-21  
FMS是收费的吧,哈哈。
2 楼 hacker47 2008-07-17  
不好意思,刚学FMS没几天.
1 楼 gakaki 2008-07-17  
水平不高 对不起 是不是服务器端推送到客户端用SOCKET那种的

相关推荐

    FMS+FLEX-----使用远程共享对象实现多人实时在线聊天

    FMS+FLEX-----使用远程共享对象实现多人实时在线聊天 说明:这是我在网上看到的,收集并整理了一下。 因为我的积分不多了,所以虽然不是原创,但还是要一点资源分的。大家见谅。 压缩包中有说明文档和源码。说明...

    FMS聊天室下载FMS

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

    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是一种...

    JUKI重机DDL-9000C-FMS-WB-PBN中文说明书.pdf

    《JUKI重机DDL-9000C-FMS-WB-PBN中文说明书》是针对JUKI公司的一款高端缝纫设备DDL-9000C-FMS-WB-PBN的操作指南,主要涵盖该设备的技术规格、操作方法、维护保养等方面的信息。以下是该设备的一些关键知识点: 1. *...

    Flex +FMS实现视频聊天

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

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

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

    PyPI 官网下载 | mypy-boto3-fms-1.11.11.0.tar.gz

    PyPI上的资源“mypy-boto3-fms-1.11.11.0.tar.gz”是一个Python库,用于加强Boto3库的类型检查功能,确保代码更加健壮和易于维护。 Boto3是AWS(Amazon Web Services)官方的Python SDK,它允许开发者轻松地与AWS...

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

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

    FLEX资源------Flash Media Managment Server中文版下载

    本文将深入探讨FMS的功能、应用以及中文版的特点。 FMS的核心功能在于其强大的媒体处理能力,它能有效地分发、管理和优化多媒体内容。它支持多种格式,如Flash Video (FLV) 和H.264,使得内容能够流畅地在各种设备...

    流媒体服务器---fms3教程

    4. 互动功能:提供数据消息传递,实现用户间的交互,如聊天室、游戏等。 5. 安全性:FMS3提供访问控制、加密等安全措施,保护内容不被非法访问。 四、FMS3应用开发 1. Flex SDK:使用Flex SDK可以创建与FMS3交互的...

    Python库 | mypy-boto3-fms-1.10.42.1.tar.gz

    1. 完善的类型定义:此版本为FMS的所有API调用提供了详细的类型定义,增强了代码的可读性和可维护性。 2. 错误检测:mypy-boto3-fms可以帮助开发者在调用FMS API时,提前发现并修复可能的类型错误。 3. 更新的API...

    数据库课程设计_L-FMS-Website-Static-Pages.zip

    数据库课程设计_L-FMS-Website-Static-Pages

    Python库 | aws-cdk.aws-fms-1.138.0.tar.gz

    总之,aws-cdk.aws-fms-1.138.0是Python开发者在AWS环境中实施云安全策略的得力助手,它通过编程的方式提高了安全策略的部署效率和一致性,让开发者能够更专注于创新,而不是繁琐的安全管理任务。对于那些重视安全并...

    Python库 | mypy-boto3-fms-1.16.9.0.tar.gz

    《Python库mypy-boto3-fms:强化类型检查与AWS FMS集成》 Python作为一门强大且灵活的编程语言,其丰富的库生态系统是其深受开发者喜爱的重要原因。在众多的Python库中,mypy-boto3-fms是一个值得关注的工具,它...

    FMS聊天室+AS3.0

    【标题】"FMS聊天室+AS3.0"是一个基于Adobe Flash Media Server (FMS) 和...通过深入学习和分析这些源代码,开发者不仅可以掌握如何利用FMS和AS3.0创建聊天室,还可以借鉴其设计模式和最佳实践,提高自己的编程技能。

    PyPI 官网下载 | aws-cdk.aws-fms-1.106.0.tar.gz

    标题中的"PyPI 官网下载 | aws-cdk.aws-fms-1.106.0.tar.gz"表明这是一个在Python Package Index (PyPI) 官网上可以找到的软件包,名为`aws-cdk.aws-fms-1.106.0`,并且是以`.tar.gz`格式提供的。`aws-cdk`是Amazon ...

    Python库 | mypy-boto3-fms-1.17.70.post2.tar.gz

    这个库是针对AWS(Amazon Web Services)的Financial Management Services(FMS)的一个类型检查工具,用于增强Boto3库的类型安全性和开发体验。Boto3是Amazon官方提供的Python SDK,它允许开发者轻松地与AWS服务...

    PyPI 官网下载 | mypy-boto3-fms-1.14.8.0.tar.gz

    标题中的“PyPI 官网下载 | mypy-boto3-fms-1.14.8.0.tar.gz”指的是这个资源是从Python的官方包管理器PyPI(Python Package Index)上下载的一个压缩包,名为“mypy-boto3-fms-1.14.8.0.tar.gz”。PyPI是Python...

    FMS制作聊天室例子

    4. **实时通信**:FMS的RTMP协议使得聊天室可以实现实时通信,用户发送的消息能即时被其他在线用户看到,增强了互动性。 5. **数据共享**:除了音频和视频流,FMS还支持数据共享。在聊天室中,用户发送的文字信息...

Global site tag (gtag.js) - Google Analytics