⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 chatroom.as

📁 包括所有源文件类,加载容器类,FMS2.0服务端文件类 具体的请打开项目文件,所有文件都在那里 另外加点说明: config.xml,客户端和FMS服务端各有一个.两个设置要相同,里面是服务器运行路径
💻 AS
字号:
//********************************************************
//****author:junhua
//****homepage:http://www.junhuanet.cn/
//****email:TianJingrong@188.com
//********************************************************
package com.junhuanet.chatroom
{
	//********************************************************
	//****导入相关类包
	//********************************************************
	import flash.display.Sprite;
	import flash.display.Stage;
	import flash.display.StageScaleMode;
	import flash.display.StageAlign;
	import flash.ui.ContextMenu;
	import flash.ui.ContextMenuItem;
	import flash.ui.ContextMenuBuiltInItems;
	import flash.events.ContextMenuEvent;
	import flash.net.URLRequest;
	import flash.net.URLLoader;
	import flash.net.navigateToURL;
	import flash.system.Capabilities;
	import flash.display.MovieClip;
	import flash.events.MouseEvent;
	import flash.events.Event;
	import flash.net.NetConnection;
	import flash.events.NetStatusEvent;
	import flash.net.ObjectEncoding;
	import flash.net.Responder;
	import flash.utils.Timer;
    import flash.events.TimerEvent;
	import flash.net.NetStream;
	import flash.media.Camera;
	import flash.media.Microphone;
	import flash.media.*;
	import com.junhuanet.chatroom.publicsymbol.AlertVersion;
	import com.junhuanet.chatroom.login.Login;
	import com.junhuanet.chatroom.hall.Hall;
	import com.junhuanet.chatroom.reg.Reg;
	import com.junhuanet.chatroom.pwd.Pwd;
	import com.junhuanet.chatroom.room.Room;
	//********************************************************
	//****视频聊天室主类
	//********************************************************
	public class ChatRoom extends Sprite
	{
		public var container_mc:MovieClip;
		public var roomlist_mc:MovieClip;
		public var alert_mc:MovieClip;
		public var http:String;
		public var fms:String;
		public var objUser:Object=new Object();
		public var connect:NetConnection;
		public var stream:NetStream;
		public var roomList_array:Array=new Array();
		public var roomTimer:Timer;
		public var operaTimer:Timer;
		private var objTempData:Object=new Object();
		public function ChatRoom ()
		{
			initMenu ();
			checkPlayerVersion ();
		}
		public function connectServer ():void
		{
			if (objUser.userName!="")
			{
				connect=new NetConnection();
				connect.objectEncoding=ObjectEncoding.AMF0;
				connect.client=this;
				connect.connect ("rtmp://"+fms+"chatroomApp",objUser.userName);
				connect.addEventListener (NetStatusEvent.NET_STATUS,checkConnect);
			}
		}
		public function changeContainer (type:String):void
		{
			if (this.getChildByName("container_mc"))
			{
				removeChild (container_mc);
			}
			container_mc=new MovieClip();
			container_mc.name="container_mc";
			addChild (container_mc);
			var temp_mc:MovieClip;
			switch (type)
			{
				case "login" :
					temp_mc=new Login();
					break;
				case "reg" :
					temp_mc=new Reg();
					break;
				case "pwd" :
					temp_mc=new Pwd();
					break;
				case "hall" :
					temp_mc=new Hall();
					break;
				case "room" :
					temp_mc=new Room();
					break;
			}
			temp_mc.name="temp_mc";
			container_mc.addChild (temp_mc);
		}
		public function exitHall():void
		{
			changeContainer("login");
			connect.call("disconnectMe",null,null);
		}
		public function removeAlert():void
		{
			if(this.getChildByName("alert_mc"))
			{
				removeChild(alert_mc);
			}
		}
		public function newRoom(room:Object):void
		{
			connect.call("newRoom",null,room);
		}
		public function attachOwnerCamera(user:String):void
		{
			stream=new NetStream(connect);
			var _camera:Camera=Camera.getCamera();
			var _microphone:Microphone=Microphone.getMicrophone();
			_microphone.setUseEchoSuppression(true);
			stream.attachCamera(_camera);
			stream.attachAudio(_microphone);
			stream.publish(user,"live");
			var objTemp:Object=container_mc.getChildByName("temp_mc");
			objTemp.attachContent(user,_camera);
		}
		public function attachUserCamera(user:String):void
		{
			stream=new NetStream(connect);
			var objTemp:Object=container_mc.getChildByName("temp_mc");
			objTemp.attachUserStream(user,stream);
		}
		public function exitRoom(user:String):void
		{
			connect.call("checkExitRoom",null,user,objUser.userName);
		}
		public function setExitRoom(room:String,user:String):void
		{
			connect.call("checkExitRoom",null,room,user);
		}
		public function autoEnterRoom():void
		{
			connect.call("enterUserRoom",null,objUser.userName);
		}
		public function enterMyRoom(id:Number):void
		{
			connect.call("enterMyRoom",null,id);
		}
		public function sendUserMsg(id:Number,msg:String,col:String):void
		{
			connect.call("sendUserMsg",null,id,msg,col);
		}
		//********************************************************
		//****初始化场景参数
		//********************************************************
		private function initStage ():void
		{
			stage.align=StageAlign.TOP_LEFT;
			stage.showDefaultContextMenu=true;
			stage.scaleMode=StageScaleMode.NO_SCALE;
		}
		//********************************************************
		//****初始化右键菜单
		//********************************************************
		private function initMenu ():void
		{
			var menuRight:ContextMenu=new ContextMenu;
			menuRight.hideBuiltInItems ();
			var menuItem0:ContextMenuItem=new ContextMenuItem("版权所有: 俊华网");
			var menuItem1:ContextMenuItem=new ContextMenuItem("作    者: 俊华");
			menuItem0.addEventListener (ContextMenuEvent.MENU_ITEM_SELECT,goHomePage);
			menuItem1.addEventListener (ContextMenuEvent.MENU_ITEM_SELECT,goHomePage);
			menuRight.customItems.push (menuItem0,menuItem1);
			this.contextMenu=menuRight;
		}
		//********************************************************
		//****检查Player版本
		//********************************************************
		private function checkPlayerVersion ():void
		{
			var strVersion:String=Capabilities.version;
			var nVersion:int=int(strVersion.substr(4,1));
			if (nVersion < 9)
			{
				container_mc=new MovieClip  ;
				container_mc.name="container_mc";
				addChild (container_mc);
				alert_mc=new AlertVersion  ;
				alert_mc.x=stage.stageWidth - alert_mc.width / 2;
				alert_mc.y=stage.stageHeight - alert_mc.height / 2;
				container_mc.addChild (alert_mc);
			}
			else
			{
				initXML ();
			}
		}
		//********************************************************
		//****获取初始化数据
		//********************************************************
		private function initXML ():void
		{
			var ur:URLRequest=new URLRequest("config.xml");
			var ul:URLLoader=new URLLoader;
			ul.load (ur);
			ul.addEventListener (Event.COMPLETE,readXML);
		}
		private function readXML (event:Event):void
		{
			var xml:XML=XML(URLLoader(event.target).data);
			xml.ignoreWhitespace=true;
			http=xml.child("http").child(0).toXMLString();
			fms=xml.child("fms").child(0).toXMLString();
			initLogin ();
			initStage ();
		}
		//********************************************************
		//****初始化登陆界面
		//********************************************************
		private function initLogin ():void
		{
			container_mc=new MovieClip();
			container_mc.name="container_mc";
			addChild (container_mc);
			var temp_mc:MovieClip=new Login();
			temp_mc.name="temp_mc";
			container_mc.addChild (temp_mc);
		}
		//********************************************************
		//****检测播放器后执行函数
		//********************************************************
		private function goAdobePage (event:MouseEvent):void
		{
			var http:String="http://www.adobe.com/shockwave/download/download.cgi?P1_Prod_Version=ShockwaveFlash&promoid=BPCLF";
			var url:URLRequest=new URLRequest(http);
			navigateToURL (url,"_blank");
		}
		//********************************************************
		//****右键菜单功能函数
		//********************************************************
		private function goHomePage (event:ContextMenuEvent):void
		{
			var url:URLRequest=new URLRequest("http://www.junhuanet.cn/");
			navigateToURL (url,"_blank");
		}
		//********************************************************
		//****检查连接服务器状态
		//********************************************************
		private function checkConnect (event:NetStatusEvent):void
		{
			var objTemp:Object=new Object();
			objTemp=container_mc.getChildByName("temp_mc");
			switch (event.info.code)
			{
				case "NetConnection.Connect.Success" :
					objTemp.setText ("连接服务器成功,正在登陆大厅!");
					break;
				case "NetConnection.Connect.Rejected" :
					objTemp.setText ("连接失败,拒绝连接!");
					break;
				case "NetConnection.Connect.Failed" :
					objTemp.setText ("连接失败,请检查网络!");
					break;
			}
		}
		private function getHallList ():void
		{
			connect.call ("getHallList",null);
		}
		private function refreshHall(event:TimerEvent):void
		{
			getHallList();
		}
		private function pastOperaEnterRoom(event:TimerEvent):void
		{
			var user:String=objTempData.user;
			connect.call("getRoomUser",null,user);
		}
		private function pastOperaUserRoom(event:TimerEvent):void
		{
			var room:Object=objTempData.room;
			var user:Object=objTempData.user;
			setRoomUser(room,user);
			sendSysMsg(room.roomid,"<font color=\"#0000FF\">"+user.nickName+"</font> 进来了!");
		}
		private function refreshListTimer(event:TimerEvent):void
		{
			refreshList();
		}
		//******************************************************
		//*************服务端调用方法
		//******************************************************
		public function setUserInfo (obj:Object):void
		{
			objUser.nickName=obj.nickName;
			objUser.sex=obj.sex;
			objUser.email=obj.email;
			objUser.address=obj.address;
			changeContainer ("hall");
			operaTimer=new Timer(1000,1);
			operaTimer.addEventListener("timer",refreshListTimer);
			operaTimer.start();
		}
		public function refreshList():void
		{
			getHallList();
			roomTimer=new Timer(1000,0);
			roomTimer.addEventListener("timer",refreshHall);
			roomTimer.start();
		}
		public function onceLogin ():void
		{
			changeContainer ("login");
			var tempObj:Object=container_mc.getChildByName("temp_mc");
			tempObj.sexText ("请您先登陆!");
		}
		public function setHallList (room_array:Array):void
		{
			roomList_array=room_array;
			var objTemp:Object=new Object();
			objTemp=container_mc.getChildByName("temp_mc");
			objTemp.showTheRoomList (roomList_array);
		}
		public function enterOwnerRoom(user:String):void
		{
			roomTimer.stop();
			changeContainer("room");
			var oTimer:Timer=new Timer(1000,1);
			objTempData.user=user;
			oTimer.addEventListener("timer",pastOperaEnterRoom);
			oTimer.start();
		}
		public function enterUserRoom(room:Object,user:Object):void
		{
			roomTimer.stop();
			changeContainer("room");
			var oTimer:Timer=new Timer(1000,1);
			objTempData.room=room;
			objTempData.user=user;
			oTimer.addEventListener("timer",pastOperaUserRoom);
			oTimer.start();
		}
		public function setRoomUser(room:Object,user:Object):void
		{
			var tempObj:Object=container_mc.getChildByName("temp_mc");
			tempObj.setRoomUser(room,user);
		}
		public function successExitRoom(user:String):void
		{
			SoundMixer.stopAll();
			roomTimer.reset();
			changeContainer ("hall");
			refreshList();
		}
		public function systemMsg(msg:String):void
		{
			var objTemp:Object=container_mc.getChildByName("temp_mc");
			objTemp.addChatText(1,null,msg,null);
		}
		public function sendSysMsg(id:Number,msg:String):void
		{
			connect.call("systemMsg",null,id,msg);
		}
		public function playMusic(id:Number,path:String):void
		{
			connect.call("playMusic",null,id,path);
		}
		public function startPlayMusic(path:String)
		{
			var objTemp:Object=container_mc.getChildByName("temp_mc");
			objTemp.startPlayMusic(path);
		}
		public function showUserMsg(user:String,msg:String,col:String):void
		{
			var objTemp:Object=container_mc.getChildByName("temp_mc");
			objTemp.addChatText(0,user,msg,col);
		}
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -