📄 chatroom.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 + -