利用ShareObject實現簡單聊天程序

<?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>
 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章