51CTO下载Flex+Red5语音视频聊天程序实现Word文件下载.docx
- 文档编号:19893482
- 上传时间:2023-01-11
- 格式:DOCX
- 页数:9
- 大小:18.59KB
51CTO下载Flex+Red5语音视频聊天程序实现Word文件下载.docx
《51CTO下载Flex+Red5语音视频聊天程序实现Word文件下载.docx》由会员分享,可在线阅读,更多相关《51CTO下载Flex+Red5语音视频聊天程序实现Word文件下载.docx(9页珍藏版)》请在冰豆网上搜索。
String,IConnection>
onlineList=newHashMap<
String,IConnection>
();
//在线用户表
//程序运行时志向
publicbooleanappStart(IScopeapp){
if(!
super.appStart(app)){
returnfalse;
}
appScope=app;
returntrue;
}
@Override
publicbooleanappConnect(IConnectionarg0,Object[]arg1){
/**
*
用户首次连接server时触发,检查用户是否重复登录,将用户添加到在线用户表中
*/
StringuserId=arg0.getClient().getId();
if(!
super.appConnect(arg0,arg1)){
returnfalse;
if(arg1!
=null){
userName=(String)arg1[0];
if(onlineList.get(userName)!
=null){
rejectClient("
请不要重复登录"
);
onlineList.put(userName,arg0);
listSO=getSharedObject(appScope,"
listSO"
false);
listSO.setAttribute(userId,userName);
System.out.println("
Theuser:
"
+userName+"
"
loginedsuccessfully"
*通知所有人当前用户登录
*@paramparams
publicvoidgetOnloadUser(Object[]params){
StringclientName=params[0].toString();
if(null==clientName||"
.equals(clientName)){
return;
}
//给所有客户端数据
IScopescope=Red5.getConnectionLocal().getScope();
Iteratorit=scope.getConnections().iterator();
for(;
it.hasNext();
){
Setconnections=(Set)it.next();
IConnectiontempConn=(IConnection)connections.iterator().next();
if(tempConninstanceofIServiceCapableConnection){
IServiceCapableConnectionsc=(IServiceCapableConnection)tempConn;
sc.invoke("
result_getOnloadUser"
newObject[]{clientName});
//聊天
publicvoidsayToAll(Object[]params){
IConnectionconn=Red5.getConnectionLocal();
Stringuser_id=conn.getClient().getId();
StringclientName=(String)listSO.getAttribute(user_id);
System.out.println("
************发言者是:
+clientName);
StringsayToName=params[0]==null?
:
params[0].toString().trim();
StringsayWhat=params[1]==null?
params[1].toString().trim();
if("
.equals(sayToName)||"
All"
.equals(sayToName))//发消息给聊天室的所有人.
{
Setconnections=(Set)it.next();
IConnectiontempConn=(IConnection)connections.iterator().next();
//调用客户端showMessage方法。
showMessage"
newObject[]{clientName+"
toAll:
+sayWhat});
}else{
IConnectiontempConn=onlineList.get(sayToName);
if(tempConninstanceofIServiceCapableConnection){
IServiceCapableConnectionsc=(IServiceCapableConnection)tempConn;
sc.invoke("
to"
+sayToName+"
IServiceCapableConnectionsc=(IServiceCapableConnection)conn;
//用户断开连接的时候触发
publicvoidappDisconnect(IConnectionconn){
Stringdis_user_id=conn.getClient().getId();
Stringuser=(String)listSO.getAttribute(dis_user_id);
//根据ID删除对应在线纪录
onlineList.remove(user);
//删除用户列表共享对象的对应属性
listSO.removeAttribute(dis_user_id);
//服务器端调用客户端flash方法。
disconnectMessage"
newObject[]{user});
}
//视频邀请
publicvoidvideoInvite(Object[]params){
************视频邀请者是:
不可以邀请0或者多个人"
showInviteMessage"
;
+sayToName});
//同意邀请后调用邀请方方法
publicvoidagreeVideoInvite(Object[]params){
<
paramslength"
+params.length);
//邀请者
StringinviteUserName=params[0]==null?
//被邀请者
StringotherUserName=params[1]==null?
***邀请者是:
+inviteUserName);
***被邀请者是:
+otherUserName);
.equals(inviteUserName))//发消息给聊天室的所有人.
出错了"
*********调用成功"
IConnectiontempConn=onlineList.get(inviteUserName);
showVideo"
newObject[]{otherUserName});
*********调用结束"
Flex3代码部分
?
xmlversion="
1.0"
encoding="
utf-8"
>
mx:
WindowedApplicationxmlns:
mx="
layout="
absolute"
Script>
!
[CDATA[
importmx.events.CloseEvent;
importmx.collections.ArrayCollection;
importmx.controls.Alert;
privatevarlistSO:
SharedObject;
privatevaruserArr:
Array;
privatevarconn:
NetConnection;
privatevarlocalUsername:
String;
privatevarstm:
NetStream;
privatevarstm2:
//摄像头
privatevarcam:
Camera;
//麦克风
privatevarmic:
Microphone;
privatevarvideo_0:
Video;
privatevarvideo_1:
[Bindable]
publicvarcards:
ArrayCollection;
//视频邀请集合
publicvarvideoUsers:
protectedfunctionlogin(event:
MouseEvent):
void
{
//TODOAuto-generatedmethodstub
localUsername=txt_name.text;
if(localUsername=="
){
Alert.show("
用户名不能为空"
return;
}else{
if(conn==null){
conn=newNetConnection();
conn.client=this;
conn.addEventListener(NetStatusEvent.NET_STATUS,_statusHandler);
conn.connect("
rtmp:
//192.168.0.10/szftest"
localUsername);
//状态监听
privatefunction_statusHandler(evt:
NetStatusEvent):
void{
if(evt.info.code=="
NetConnection.Connect.Success"
){
this.currentState="
chat"
连接成功"
_setListSO();
//创建用户列表共享对象
this.showJoinInInfo(localUsername);
NetConnection.Connect.Failed"
连接失败"
NetConnection.Connect.Closed"
连接关闭"
publicfunctionshowJoinInInfo(message:
String):
void
//conn.call("
getOnloadUser"
newResponder(result_getUsers);
conn.call("
null,message);
publicfunctionresult_getOnloadUser(str:
String):
void{
txt_chatmsg.text+=str+"
加入聊天室"
+"
\n"
//创建用户列表共享对象
privatefunction_setListSO():
void{
listSO=SharedObject.getRemote("
conn.uri,false);
listSO.connect(conn);
listSO.addEventListener(SyncEvent.SYNC,_listSOSyncHandler);
//用户列表共享对象被更新之后事件
privatefunction_listSOSyncHandler(evt:
SyncEvent):
_showUserList();
//更新用户列表
//更新用户列表
privatefunction_showUserList():
void{
cards=newArrayCollection(
[{label:
}]
userArr=newArray();
//用户数组更新
for(vartmp:
StringinlistSO.data){
userArr.push(listSO.data[tmp]);
//添加ArrayCollection
for(vari:
int=0;
i<
userArr.length;
i++){
cards.addItem({label:
userArr[i]});
//将数组添加到列表中显示出来
userList.dataProvider=cards;
users.dataProvider=cards;
publicfunctionshowMessage(message:
txt_chatmsg.text+=message+"
protectedfunctionsendMessage(event:
//TODOAuto-generatedmethodstub
varsendString:
String=txt_yousay.text;
//varsendTo:
String=users.selectedItem.userName==null?
users.selectedItem.userId;
varsendTo:
String=userList.selectedItem.label;
txt_yousay.text="
sayToAll"
null,sendTo,sendString);
//断线通知
publicfunctiondisconnectMessage(disUser:
txt_chatmsg.text+=disUser+"
退出聊天室\n"
protectedfunctionvideo_clickHandler(event:
videoInvite"
null,sendTo);
//显示自己的视频
publicfunction_publishVideo():
stm=newN
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 51 CTO 下载 Flex Red5 语音 视频 聊天 程序 实现