`

别人的flex聊天室

    博客分类:
  • flex
阅读更多
package com.renaun.samples.net
{
import flash.net.NetConnection;
import flash.net.SharedObject;
import flash.events.NetStatusEvent;
import flash.events.SecurityErrorEvent;
import flash.events.AsyncErrorEvent;
import flash.events.IOErrorEvent
import flash.events.Event;
import flash.events.IEventDispatcher;
import mx.logging.LogLogger;

[Event(name="success", type="flash.events.Event")]
[Event(name="failed", type="flash.events.Event")]
/**
 * 	Note: This class was dynamic in ActionScript 2.0 but is now sealed. 
 *  To write callback methods for this class, you can either extend the 
 *  class and define the callback methods in your subclass, or you can 
 *  use the client  property to refer to an object and define the callback 
 *  methods on that object.
 */
dynamic public class FMSConnection extends NetConnection implements IEventDispatcher
{

	//--------------------------------------------------------------------------
	//
	//  Constructor
	//
	//--------------------------------------------------------------------------
	
	/**
	 *  Constructor
	 */
    public function FMSConnection() 
	{
		super();

	}
	
	public var clientID:Number;
	
	//--------------------------------------------------------------------------
	//
	//  Methods
	//
	//--------------------------------------------------------------------------

	/**
	 *  Connect
	 */
    override public function connect( url:String, ...args ):void
	{
		// Set object encoding to be compatible with Flash Media Server
		this.objectEncoding = flash.net.ObjectEncoding.AMF0;
		NetConnection.defaultObjectEncoding
		
		// Add status/security listeners
		this.addEventListener( NetStatusEvent.NET_STATUS, netStatusHandler );
		this.addEventListener( SecurityErrorEvent.SECURITY_ERROR, netSecurityError );
		this.addEventListener( AsyncErrorEvent.ASYNC_ERROR, asyncErrorHandler );
		this.addEventListener( IOErrorEvent.IO_ERROR, ioErrorHandler );		
		
		// TODO does not pass ...args into the super function
		super.connect( url );
	}


	/**
	 *  setID
	 */
	public function setId( id:Number ):*
	{
//LogLogger.debug( "FMSConnection::setId: id=" + id,"s");

		if( isNaN( id ) ) return;
		clientID = id;
		return "Okay";
	}

	/**
	 * 	Status Handler for the NetConnection class
	 */
	private function netStatusHandler( event:NetStatusEvent ):void
	{
		switch( event.info.code ) {
			case "NetConnection.Connect.Success":
//Logger.debug( "FMSConnection:netStatusHandler:Success: connected: " + this.connected );
				dispatchEvent( new Event( "success" ) );
			break;
			case "NetConnection.Connect.Failed":
//Logger.debug( "FMSConnection:netStatusHandler:Failed: connected: " + this.connected + " - " + event.info.code );
				dispatchEvent( new Event( "failed" ) );
			break;			
			default:
//Logger.debug( "FMSConnection:netStatusHandler:code: " + event.info.code );
			break;
		}
	}

	private function netSecurityError( event:SecurityErrorEvent ):void {
//Logger.error( "FMSConnection:netSecurityError: " + event );
	}		

	private function asyncErrorHandler( event:AsyncErrorEvent ):void {
//Logger.error( "FMSConnection:asyncErrorHandler: " + event.type + " - " + event.error );
	}	

	private function ioErrorHandler( event:IOErrorEvent ):void {
//Logger.error( "FMSConnection:asyncErrorHandler: " + event.type + " - " + event.text );
	}	

}
}
 
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" 
	layout="vertical" horizontalAlign="center" verticalAlign="middle">
	<mx:Style>
		Application {
			background-image: "";
			background-color: #336699;	
		}
		Panel, TabNavigator {
			padding-bottom:10;
			padding-left:10;
			padding-right:10;
			padding-top:10;	
		}
		.chatBox {
			background-color: #EEEEEE;
		}
	</mx:Style>
	<mx:Script>
		<![CDATA[
			import mx.collections.ArrayCollection;
			import mx.controls.Text;
			import com.renaun.samples.net.FMSConnection;
			import mx.controls.Alert;
			import flash.net.SharedObject;
			
			[Bindable]
			private var nc:FMSConnection;
			[Bindable]
			private var btnText:String = "Login";
			
			[Bindable]
			private var dpUsers:ArrayCollection
			private var chatUsers:Array;
			
			private var clientID:Number;
			
			private var soChat:SharedObject;
			
			private function connectUser():void
			{
				NetConnection.defaultObjectEncoding = flash.net.ObjectEncoding.AMF0;
				SharedObject.defaultObjectEncoding  = flash.net.ObjectEncoding.AMF0;				
				
				if( txtUser.text != "" && btnText == "Login" ) {
					nc = new FMSConnection();
					nc.addEventListener( "success", connectionSuccessHandler );
					// works with nc.connect( "rtmp://localhost/SOSample" ); also
					nc.connect( "rtmp://192.168.200.14/red" );
				} else {
					if( btnText == "Logout" ) {
						// Close Connections
						soChat.close();
						nc.close();
						btnText = "Login";
				 	} else {
						Alert.show( "Invalid Name!" );
					}
				}
				keyEvent();
				
			}
			
			private function connectionSuccessHandler( event:Event ):void
			{
				btnText = "Logout";

				// Get Server Client ID
				clientID = nc.clientID;
				
				// Make SO and other Connection calls
				connectToChat();
			}
			
			private function connectToChat():void
			{
				soChat = SharedObject.getRemote( "videoConferenceChat", nc.uri, true );
				soChat.addEventListener( NetStatusEvent.NET_STATUS, netStatusHandler );
				soChat.addEventListener( AsyncErrorEvent.ASYNC_ERROR, asyncErrorHandler );
				soChat.addEventListener( SyncEvent.SYNC, sharedObjectSyncHandler );
				soChat.client = this;
				soChat.connect( nc );
//				trace("helloWorld");
				// Get the names for all the connected users
				soChat.send( "getName" );
			}

			public function sendMessage( msg:String ):void
			{
				soChat.send( "newMessage",  
						"<font color=\"#" + cmpColorPicker.selectedColor.toString(16) + "\"><b>" + txtUser.text + "</b></font> - " + msg );

				txtMsg.htmlText = "";
			}

			public function newMessage( msg:String ):void
			{
//Logger.info( "newMessage: " + msg );				
				txtChatBox.htmlText += msg + "\n";
			}
			public function newName( name:String, chatID:Number ):void
			{
//Logger.info( "newName: name: " + name + " chatID: " + chatID );
				// initialize
				if( chatUsers == null )
					chatUsers = new Array();
				
				// Only add new users to array
				var isNew:Boolean = true;
				for( var i:int = 0; i < chatUsers.length;i++ ) {
					if( chatUsers[ i ].data == chatID ) {
						isNew = false;
					}
				}
				if( isNew )
					chatUsers.push( { label: name, data: chatID } );
				
				// Sort Users
				chatUsers.sortOn( "label", Array.CASEINSENSITIVE );
				
				dpUsers = new ArrayCollection( chatUsers );	
				
			}			
			public function getName():void
			{
//Logger.info( "getName: " + txtUser.text );
				// Clear out User array
				chatUsers = new Array();
				// Getting Users name is basically forcing each connect user to re-send their name
				soChat.send( "newName", txtUser.text, clientID );
			}					

	private function sharedObjectSyncHandler( event:SyncEvent ):void
	{
		trace(event.toString());
//		Logger.debug( "sharedObjectSyncHandler:code: " + event.changeList );
	}

	private function netStatusHandler( event:NetStatusEvent ):void
	{
		trace(event.info);
//		Logger.debug( "netStatusHandler:code: " + event.info.code );
	}
	private function asyncErrorHandler( event:AsyncErrorEvent ):void
	{
		trace(event.toString());
//		Logger.debug( "asyncErrorHandler:code: " + event.error );
	}			
		]]>
	</mx:Script>
	<mx:Panel
		width="90%" height="90%"
		title="Basic Chat Application using Flex 3 and Red5" 
		layout="vertical">
		
		<mx:HBox width="100%">
			<mx:Label text="Name:"/>
			<mx:TextInput id="txtUser" enabled="{ ( btnText == 'Login' ) }"/>
			<mx:ColorPicker id="cmpColorPicker" showTextField="false" selectedColor="0x000000"/>			
			<mx:Button 
				id="btnLogin"
				label="{ btnText }"
				click="connectUser()"/>
		</mx:HBox>
		
		<mx:HDividedBox
			width="100%" height="100%">
			<mx:VBox 
				width="25%"	height="100%">
				<mx:Label text="Chat Users:" />
				<mx:List
					id="lstUsers"
					dataProvider="{ dpUsers }" 
					width="100%"
					height="100%" />
			</mx:VBox>
			
			<mx:VBox 
				width="75%"	height="100%">
				<mx:TabNavigator
					width="100%" height="100%">
					<mx:VBox label="Main Chat">
						<mx:TextArea 
							fontSize="18"
							id="txtChatBox"
							styleName="chatBox"
							editable="false"
							width="100%" height="100%" fontWeight="bold" textAlign="left"/>
					</mx:VBox>
				</mx:TabNavigator>
					
				<mx:HBox width="100%">
					<mx:TextInput width="100%" id="txtMsg"/>
					<mx:Button 
						id="btnMessage"
						label="Send Message"
						click="sendMessage( txtMsg.text )" />
				</mx:HBox>
			</mx:VBox>
		</mx:HDividedBox>
		
	</mx:Panel>
	<mx:Script>
		<![CDATA[
			
			public function keyEvent(){
				txtMsg.addEventListener(KeyboardEvent.KEY_DOWN,sendM)
			}
			public function sendM(e:KeyboardEvent){
				
				if(e.keyCode==13){
					sendMessage(txtMsg.text);
				}
			}
		]]>
	</mx:Script>
</mx:Application>
 
分享到:
评论
1 楼 sjbrising 2009-09-24  
这个没有服务器的程序么??

相关推荐

    刚学会Flex自己做的一个简单的聊天室

    在本例中,“刚学会Flex自己做的一个简单的聊天室”是一个初学者用Flex实现的简单聊天室应用,这展示了Flex的基本用法和功能。 1. Flex基础概念: - Flex框架:它是基于Apache OpenSource的Spark和MX组件集,提供...

    Flex聊天室

    用flex开的的一个聊天室入门小例子,只是实现简单功能!!

    基于Flex的Flash聊天室的实现

    《基于Flex的Flash聊天室实现详解》 在Web开发领域,构建实时互动的聊天室是一项常见的需求,而基于Adobe Flex的Flash技术曾是实现此类应用的主流选择之一。本文将深入探讨如何使用Flex来创建一个功能完备的Flash...

    FLEX 开源聊天室

    《深入理解FLEX开源聊天室:构建实时交互的在线社区》 在当今互联网时代,实时通信已经成为各种在线应用的核心功能之一。"FLEX 开源聊天室"作为一个支持多人互动交流的平台,它允许用户进行私聊、群聊,以及创建...

    Flex视频聊天室源码

    Flex视频聊天室源码是一种基于Adobe Flex框架开发的实时通讯应用程序,主要用于实现视频聊天功能。Flex是基于ActionScript 3.0的开放源代码SDK,它允许开发者创建丰富的互联网应用程序(RIA),这些程序可以在多种...

    用red5部署的flex的简单聊天室源代码

    在本文中,我们将深入探讨如何使用Red5部署一个基于Flex的简单聊天室源代码。Red5是一款开源的流媒体服务器,而Flex是一种用于构建富互联网应用程序(RIA)的开发工具,通常与Adobe Flash Player一起使用。这个示例...

    FluorineFx+Flex视频聊天室源代码

    FluorineFx+Flex视频聊天室源代码是一款基于开源RTMP服务器FluorineFx构建的多人在线交流平台,其主要特点在于提供实时的视频和文字聊天功能,同时还包括了小喇叭全服务器喊话这样的特色功能。让我们深入探讨一下这...

    flex3 聊天室 视频,音频

    在“flex3 聊天室 视频,音频”这个项目中,我们看到的是一个集成了视频和音频功能的聊天室应用。 Red5是一个开源的流媒体服务器,它支持实时传输协议(RTMP),可以处理音频、视频和数据流。在Flex3聊天室中,Red5...

    Flex +.net 聊天室

    Flex + .NET 聊天室是一个集成技术的实例,它结合了Adobe Flex前端开发框架与Microsoft .NET后端技术,构建了一个实时的在线交流平台。在这个系统中,Flex作为用户界面层,提供了丰富的交互体验,而.NET则作为服务器...

    Flex视频聊天室

    【Flex视频聊天室】是一个基于Adobe Flash Media Server (FMS) 开发的在线交互平台,主要功能是提供实时的文本和视频通信。这个项目的核心技术是Adobe Flex,它是一种用于构建富互联网应用程序(RIA)的开发框架,...

    flex 多个聊天实例

    实际学习时,你可能会从创建基本的Flex项目开始,然后逐步添加聊天功能,实现用户注册、登录,创建和加入聊天室,发送和接收消息,到最后的测试和部署。如果能访问到原文链接,将能得到更详尽的步骤和示例代码。

    Flex实现的视频聊天室

    在本项目"Flex实现的视频聊天室"中,开发者利用Flex的强大功能,创建了一个可供多人实时交流的在线视频聊天平台。这个聊天室允许用户通过网络摄像头分享视频,并进行音频通信,提供了类似于现实生活中面对面交谈的...

    flex、java聊天室

    本项目名为“flex、java聊天室”,结合提供的标签“源码”和“工具”,我们可以推断这是一个使用Adobe Flex作为前端UI框架,Java作为后端服务器平台的聊天应用实例。下面将详细介绍Flex和Java在聊天室实现中的关键...

    flex4 socket 聊天室

    flex4 socket 聊天室 源码 直接导入就可以用

    flex聊天室服务端

    NULL 博文链接:https://xiaoa7.iteye.com/blog/267087

    flex 图文混排聊天室 客户端

    【标题】:“Flex图文混排聊天室客户端” 在IT领域,Flex是一种基于Adobe Flash Player运行时的开源框架,主要用于构建富互联网应用程序(RIA)。这个“Flex图文混排聊天室客户端”项目显然是一款使用Flex技术开发...

    基于Java_BlazeDS_Flex_服务器消息推的聊天室

    Java BlazeDS Flex 服务器消息推技术是Web应用程序中实现实时通信的一种有效方法,尤其适用于构建交互性强的聊天室等应用。BlazeDS是Adobe提供的一个开源项目,它为Java服务器和Flex客户端之间的数据交换提供了丰富...

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

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

Global site tag (gtag.js) - Google Analytics