<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="initFun()" width="507" height="434">
<mx:Script>
<![CDATA[
import mx.collections.ArrayCollection;
import mx.controls.Alert;
private var nc:NetConnection;
private var clientID:Number;
private var soChat:SharedObject;
private var arr:Array = new Array();
[Bindable]
private var con:ArrayCollection;
private function initFun():void
{
nc = new NetConnection();
nc.objectEncoding = flash.net.ObjectEncoding.AMF0;
nc.addEventListener(NetStatusEvent.NET_STATUS,statusHandler);
nc.connect( "rtmp://localhost/SOSample" );
//监听键盘回车键
application.addEventListener(KeyboardEvent.KEY_DOWN,sendKeyHandler);
}
private function statusHandler(event:NetStatusEvent):void
{
if(event.info.code == "NetConnection.Connect.Success"){
connectToChat();
}
}
private function connectToChat():void
{
soChat = SharedObject.getRemote( "wxwred5", 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 );
soChat.send( "getName" );
}
public function getName():void
{
var msg:String=lTrim(rTrim(txtUser.text.valueOf()));
trace( "getName: " + txtUser.text );
if(msg.length==0){
Alert.show("禁止刷屏");
txtUser.text="";
}else{
soChat.setProperty("key",txtUser.text);
txtUser.text="";
}
}
public function newName(str:String):void
{
arr.push(str);
soChat.setProperty("arr",arr);
con = new ArrayCollection(arr);
}
private function sharedObjectSyncHandler( event:SyncEvent ):void
{
trace( "sharedObjectSyncHandler:code: " + event.changeList );
arr.push(event.target.data.key);
con = new ArrayCollection(arr);
}
private function netStatusHandler( event:NetStatusEvent ):void
{
trace( "netStatusHandler:code: " + event.info.code );
}
private function asyncErrorHandler( event:AsyncErrorEvent ):void
{
trace( "asyncErrorHandler:code: " + event.error );
}
private function sendKeyHandler(event:KeyboardEvent):void
{
//Enter 键
if(event.keyCode==13){
getName();
}
//监听组合键 Ctrl+Enter 键
if(event.keyCode==13&&event.ctrlKey){
Alert.show("监听组合键 Ctrl+Enter 键");
}
}
//去掉左空格
public function lTrim(str:String):String {
var regx:RegExp = /(^\s*)/g;
return str.substr(regx.exec(str)[0].toString().length);
}
//取得右空格
public function rTrim(str:String):String {
var regx:RegExp = /(\s*$)/g;
return str.substring(0, str.length - regx.exec(str)[0].toString().length);
}
]]>
</mx:Script>
<mx:Panel width="378" height="315" layout="absolute" y="50" x="70" title="聊天" fontSize="12">
<mx:TextInput id="txtUser" x="37" y="223" fontSize="12"/>
<mx:Button click="getName()" label="发送" x="220" y="223" fontSize="12"/>
<mx:List id="listView" height="203" dataProvider="{con}" width="237" x="37" y="10" fontFamily="Arial" fontSize="12" verticalScrollPolicy="on"></mx:List>
</mx:Panel>
</mx:Application>