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>
分享到:
相关推荐
在本例中,“刚学会Flex自己做的一个简单的聊天室”是一个初学者用Flex实现的简单聊天室应用,这展示了Flex的基本用法和功能。 1. Flex基础概念: - Flex框架:它是基于Apache OpenSource的Spark和MX组件集,提供...
用flex开的的一个聊天室入门小例子,只是实现简单功能!!
《基于Flex的Flash聊天室实现详解》 在Web开发领域,构建实时互动的聊天室是一项常见的需求,而基于Adobe Flex的Flash技术曾是实现此类应用的主流选择之一。本文将深入探讨如何使用Flex来创建一个功能完备的Flash...
《深入理解FLEX开源聊天室:构建实时交互的在线社区》 在当今互联网时代,实时通信已经成为各种在线应用的核心功能之一。"FLEX 开源聊天室"作为一个支持多人互动交流的平台,它允许用户进行私聊、群聊,以及创建...
Flex视频聊天室源码是一种基于Adobe Flex框架开发的实时通讯应用程序,主要用于实现视频聊天功能。Flex是基于ActionScript 3.0的开放源代码SDK,它允许开发者创建丰富的互联网应用程序(RIA),这些程序可以在多种...
在本文中,我们将深入探讨如何使用Red5部署一个基于Flex的简单聊天室源代码。Red5是一款开源的流媒体服务器,而Flex是一种用于构建富互联网应用程序(RIA)的开发工具,通常与Adobe Flash Player一起使用。这个示例...
FluorineFx+Flex视频聊天室源代码是一款基于开源RTMP服务器FluorineFx构建的多人在线交流平台,其主要特点在于提供实时的视频和文字聊天功能,同时还包括了小喇叭全服务器喊话这样的特色功能。让我们深入探讨一下这...
在“flex3 聊天室 视频,音频”这个项目中,我们看到的是一个集成了视频和音频功能的聊天室应用。 Red5是一个开源的流媒体服务器,它支持实时传输协议(RTMP),可以处理音频、视频和数据流。在Flex3聊天室中,Red5...
Flex + .NET 聊天室是一个集成技术的实例,它结合了Adobe Flex前端开发框架与Microsoft .NET后端技术,构建了一个实时的在线交流平台。在这个系统中,Flex作为用户界面层,提供了丰富的交互体验,而.NET则作为服务器...
【Flex视频聊天室】是一个基于Adobe Flash Media Server (FMS) 开发的在线交互平台,主要功能是提供实时的文本和视频通信。这个项目的核心技术是Adobe Flex,它是一种用于构建富互联网应用程序(RIA)的开发框架,...
实际学习时,你可能会从创建基本的Flex项目开始,然后逐步添加聊天功能,实现用户注册、登录,创建和加入聊天室,发送和接收消息,到最后的测试和部署。如果能访问到原文链接,将能得到更详尽的步骤和示例代码。
在本项目"Flex实现的视频聊天室"中,开发者利用Flex的强大功能,创建了一个可供多人实时交流的在线视频聊天平台。这个聊天室允许用户通过网络摄像头分享视频,并进行音频通信,提供了类似于现实生活中面对面交谈的...
本项目名为“flex、java聊天室”,结合提供的标签“源码”和“工具”,我们可以推断这是一个使用Adobe Flex作为前端UI框架,Java作为后端服务器平台的聊天应用实例。下面将详细介绍Flex和Java在聊天室实现中的关键...
flex4 socket 聊天室 源码 直接导入就可以用
NULL 博文链接:https://xiaoa7.iteye.com/blog/267087
【标题】:“Flex图文混排聊天室客户端” 在IT领域,Flex是一种基于Adobe Flash Player运行时的开源框架,主要用于构建富互联网应用程序(RIA)。这个“Flex图文混排聊天室客户端”项目显然是一款使用Flex技术开发...
Java BlazeDS Flex 服务器消息推技术是Web应用程序中实现实时通信的一种有效方法,尤其适用于构建交互性强的聊天室等应用。BlazeDS是Adobe提供的一个开源项目,它为Java服务器和Flex客户端之间的数据交换提供了丰富...
Flex和FMS3是构建实时互动应用程序的强大工具,尤其适合创建在线聊天室这样的实时通信平台。这个源码和文档集合提供了详细的步骤和技术说明,帮助开发者理解如何利用这些技术实现一个功能完备的聊天室。 Flex是一种...