Toggle navigation
Toggle navigation
此项目
正在载入...
Sign in
李勇
/
McuClient
转到一个项目
Toggle navigation
项目
群组
代码片段
帮助
Toggle navigation pinning
Project
Activity
Repository
Pipelines
Graphs
Issues
0
Merge Requests
0
Wiki
Network
Create a new issue
Builds
Commits
Authored by
AlexWang
2017-06-20 12:21:46 +0800
Browse Files
Options
Browse Files
Download
Email Patches
Plain Diff
Commit
c1654e42cdf3e23d7d872496d5c23978cbccf566
c1654e42
1 parent
f4d772e7
实际内部Confer内部处理用户禁言及全局禁言
PDU新增字段
显示空白字符变更
内嵌
并排对比
正在显示
2 个修改的文件
包含
222 行增加
和
182 行删除
src/apes/ConferApe.js
src/pdus/pro.js
src/apes/ConferApe.js
查看文件 @
c1654e4
...
...
@@ -25,12 +25,12 @@ class ConferApe extends Ape {
ApeConsts
.
CONFERENCE_SESSION_TAG
);
this
.
rosters
=
{};
//用户列表
this
.
timerCounter
=
new
TimerCounter
();
//计时器
this
.
rosters
=
{};
//用户列表
this
.
timerCounter
=
new
TimerCounter
();
//计时器
//第三方消息控制 parent和Iframe直接的通讯
this
.
thirdMessage
=
new
ThirdMessage
();
this
.
thirdMessage
.
on
(
ThirdMessage
.
RECIVE_MESSAGE
,
this
.
onThirdReciveParentMessage
.
bind
(
this
));
this
.
thirdMessage
=
new
ThirdMessage
();
this
.
thirdMessage
.
on
(
ThirdMessage
.
RECIVE_MESSAGE
,
this
.
onThirdReciveParentMessage
.
bind
(
this
));
// Ape Models
this
.
registerKey
(
this
.
_session_id
,
this
.
_session_name
,
this
.
_session_tag
,
new
ArrayBuffer
);
...
...
@@ -49,9 +49,9 @@ class ConferApe extends Ape {
this
.
on
(
pdu
.
RCPDU_SESSION_JOIN_RESPONSE
,
this
.
_joinSessionHandler
.
bind
(
this
));
this
.
on
(
pdu
.
RCPDU_SEND_CONFERENCE_DATA_REQUEST
,
this
.
conferMsgComingHandler
.
bind
(
this
));
//这个是课堂消息类型,flash里在使用这里不再使用,各个模块的消息由模块自己来处理
this
.
on
(
pdu
.
RCPDU_CONFERENCE_RECORD_REQUEST
,
this
.
onSendConferRecordRequestHandler
.
bind
(
this
));
//发送录制和停止录制消息
this
.
on
(
pdu
.
RCPDU_THIRD_BROADCAST_DATA_REQUEST
,
this
.
onThirdBroadcastDataHandler
.
bind
(
this
));
//第三方广播消息
this
.
on
(
pdu
.
RCPDU_SEND_CONFERENCE_DATA_REQUEST
,
this
.
conferMsgComingHandler
.
bind
(
this
));
//这个是课堂消息类型,flash里在使用这里不再使用,各个模块的消息由模块自己来处理
this
.
on
(
pdu
.
RCPDU_CONFERENCE_RECORD_REQUEST
,
this
.
onSendConferRecordRequestHandler
.
bind
(
this
));
//发送录制和停止录制消息
this
.
on
(
pdu
.
RCPDU_THIRD_BROADCAST_DATA_REQUEST
,
this
.
onThirdBroadcastDataHandler
.
bind
(
this
));
//第三方广播消息
}
//加入课堂
...
...
@@ -64,9 +64,9 @@ class ConferApe extends Ape {
userDataPdu
.
skype
=
''
;
nodeInfoRecordPdu
.
userData
=
userDataPdu
.
toArrayBuffer
();
nodeInfoRecordPdu
.
deviceType
=
GlobalConfig
.
deviceType
;
//设备类型
nodeInfoRecordPdu
.
deviceType
=
GlobalConfig
.
deviceType
;
//设备类型
loger
.
log
(
'开始加入->'
,
nodeInfoRecordPdu
);
loger
.
log
(
'开始加入->'
,
nodeInfoRecordPdu
);
let
item
=
new
pdu
[
'RCRegistryRosterItemPdu'
];
item
.
nodeId
=
nodeInfoRecordPdu
.
nodeId
;
...
...
@@ -92,51 +92,51 @@ class ConferApe extends Ape {
this
.
sendUniform
(
adapterPdu
,
true
);
}
//获取角色信息
getNodeInfo
()
{
getNodeInfo
()
{
let
nodeInfoRecordPdu
=
new
pdu
[
'RCNodeInfoRecordPdu'
];
nodeInfoRecordPdu
.
nodeId
=
GlobalConfig
.
nodeId
;
nodeInfoRecordPdu
.
name
=
GlobalConfig
.
userName
;
nodeInfoRecordPdu
.
role
=
ApeConsts
.
userTypesToId
[
GlobalConfig
.
userRole
]
||
1
;
//NR_NORMAL用户的身份,根据用户登录时的身份设置;
nodeInfoRecordPdu
.
level
=
GlobalConfig
.
level
;
nodeInfoRecordPdu
.
nodeId
=
GlobalConfig
.
nodeId
;
nodeInfoRecordPdu
.
selfSilence
=
JSON
.
stringify
(
GlobalConfig
.
selfSilence
);
nodeInfoRecordPdu
.
name
=
GlobalConfig
.
userName
;
nodeInfoRecordPdu
.
role
=
ApeConsts
.
userTypesToId
[
GlobalConfig
.
userRole
]
||
1
;
//NR_NORMAL用户的身份,根据用户登录时的身份设置;
nodeInfoRecordPdu
.
level
=
GlobalConfig
.
level
;
//nodeInfoRecordPdu.audioRecords= GlobalConfig.audioRecords;
//nodeInfoRecordPdu.videoRecords= GlobalConfig.videoRecords;
//nodeInfoRecordPdu.status= GlobalConfig.status;
nodeInfoRecordPdu
.
userData
=
GlobalConfig
.
userData
;
nodeInfoRecordPdu
.
userId
=
GlobalConfig
.
userId
;
nodeInfoRecordPdu
.
handUpTime
=
GlobalConfig
.
handUpTime
;
nodeInfoRecordPdu
.
userData
=
GlobalConfig
.
userData
;
nodeInfoRecordPdu
.
userId
=
GlobalConfig
.
userId
;
nodeInfoRecordPdu
.
handUpTime
=
GlobalConfig
.
handUpTime
;
//nodeInfoRecordPdu.deviceType= GlobalConfig.deviceType;
//nodeInfoRecordPdu.mobileDirection= GlobalConfig.mobileDirection;
nodeInfoRecordPdu
.
microphones
=
GlobalConfig
.
microphones
;
nodeInfoRecordPdu
.
cameras
=
GlobalConfig
.
cameras
;
nodeInfoRecordPdu
.
openCamera
=
GlobalConfig
.
openCamera
;
nodeInfoRecordPdu
.
openMicrophones
=
GlobalConfig
.
openMicrophones
;
nodeInfoRecordPdu
.
videoQuality
=
GlobalConfig
.
videoQuality
;
nodeInfoRecordPdu
.
userIp
=
GlobalConfig
.
userIp
;
nodeInfoRecordPdu
.
curVideoQuality
=
GlobalConfig
.
curVideoQuality
;
nodeInfoRecordPdu
.
micGain
=
GlobalConfig
.
micGain
;
nodeInfoRecordPdu
.
speakerVolume
=
GlobalConfig
.
speakerVolume
;
nodeInfoRecordPdu
.
micCode
=
GlobalConfig
.
micCode
;
nodeInfoRecordPdu
.
curCamera
=
GlobalConfig
.
curCamera
;
nodeInfoRecordPdu
.
curMicrophone
=
GlobalConfig
.
curMicrophone
;
nodeInfoRecordPdu
.
country
=
GlobalConfig
.
country
;
//国家
nodeInfoRecordPdu
.
city
=
GlobalConfig
.
city
;
//城市
nodeInfoRecordPdu
.
province
=
GlobalConfig
.
province
;
//服务商
nodeInfoRecordPdu
.
isp
=
GlobalConfig
.
isp
;
//服务商
nodeInfoRecordPdu
.
microphones
=
GlobalConfig
.
microphones
;
nodeInfoRecordPdu
.
cameras
=
GlobalConfig
.
cameras
;
nodeInfoRecordPdu
.
openCamera
=
GlobalConfig
.
openCamera
;
nodeInfoRecordPdu
.
openMicrophones
=
GlobalConfig
.
openMicrophones
;
nodeInfoRecordPdu
.
videoQuality
=
GlobalConfig
.
videoQuality
;
nodeInfoRecordPdu
.
userIp
=
GlobalConfig
.
userIp
;
nodeInfoRecordPdu
.
curVideoQuality
=
GlobalConfig
.
curVideoQuality
;
nodeInfoRecordPdu
.
micGain
=
GlobalConfig
.
micGain
;
nodeInfoRecordPdu
.
speakerVolume
=
GlobalConfig
.
speakerVolume
;
nodeInfoRecordPdu
.
micCode
=
GlobalConfig
.
micCode
;
nodeInfoRecordPdu
.
curCamera
=
GlobalConfig
.
curCamera
;
nodeInfoRecordPdu
.
curMicrophone
=
GlobalConfig
.
curMicrophone
;
nodeInfoRecordPdu
.
country
=
GlobalConfig
.
country
;
//国家
nodeInfoRecordPdu
.
city
=
GlobalConfig
.
city
;
//城市
nodeInfoRecordPdu
.
province
=
GlobalConfig
.
province
;
//服务商
nodeInfoRecordPdu
.
isp
=
GlobalConfig
.
isp
;
//服务商
//用户的MS列表
let
msListAll
=
GlobalConfig
.
msListAll
;
for
(
let
k
=
0
;
k
<
msListAll
.
length
;
k
++
){
let
msItem
=
msListAll
[
k
];
if
(
msItem
){
let
msListAll
=
GlobalConfig
.
msListAll
;
for
(
let
k
=
0
;
k
<
msListAll
.
length
;
k
++
)
{
let
msItem
=
msListAll
[
k
];
if
(
msItem
)
{
let
msListItemPdu
=
new
pdu
[
'MsListItemPdu'
];
msListItemPdu
.
ip
=
msItem
.
ip
||
""
;
msListItemPdu
.
port
=
msItem
.
port
||
""
;
msListItemPdu
.
country
=
msItem
.
country
||
""
;
msListItemPdu
.
province
=
msItem
.
province
||
""
;
msListItemPdu
.
city
=
msItem
.
city
||
""
;
msListItemPdu
.
ip
=
msItem
.
ip
||
""
;
msListItemPdu
.
port
=
msItem
.
port
||
""
;
msListItemPdu
.
country
=
msItem
.
country
||
""
;
msListItemPdu
.
province
=
msItem
.
province
||
""
;
msListItemPdu
.
city
=
msItem
.
city
||
""
;
nodeInfoRecordPdu
.
msList
.
push
(
msListItemPdu
);
}
}
...
...
@@ -144,15 +144,15 @@ class ConferApe extends Ape {
}
//更新角色数据
updateUserInfo
()
{
updateUserInfo
()
{
let
nodeInfoRecordPdu
=
this
.
getNodeInfo
();
loger
.
log
(
'更新用户信息->'
,
nodeInfoRecordPdu
);
loger
.
log
(
'更新用户信息->'
,
nodeInfoRecordPdu
);
let
userDataPdu
=
new
pdu
[
'RCNodeInfoUserDataPdu'
];
userDataPdu
.
qq
=
''
;
userDataPdu
.
skype
=
''
;
nodeInfoRecordPdu
.
userData
=
userDataPdu
.
toArrayBuffer
();
nodeInfoRecordPdu
.
deviceType
=
GlobalConfig
.
deviceType
;
//设备类型
nodeInfoRecordPdu
.
deviceType
=
GlobalConfig
.
deviceType
;
//设备类型
let
item
=
new
pdu
[
'RCRegistryRosterItemPdu'
];
item
.
nodeId
=
nodeInfoRecordPdu
.
nodeId
;
...
...
@@ -193,8 +193,8 @@ class ConferApe extends Ape {
let
conferSendPdu
=
new
pdu
[
'RCConferenceSendDataRequestPdu'
];
conferSendPdu
.
type
=
pdu
.
RCPDU_SEND_CONFERENCE_DATA_REQUEST
;
conferSendPdu
.
initiator
=
this
.
_classInfo
.
nodeId
;
//发起人
conferSendPdu
.
peer
=
parseInt
(
_messageInfo
.
to
);
//发送给谁,公聊的时候是0,私聊的时候是指定的用户id
conferSendPdu
.
initiator
=
this
.
_classInfo
.
nodeId
;
//发起人
conferSendPdu
.
peer
=
parseInt
(
_messageInfo
.
to
);
//发送给谁,公聊的时候是0,私聊的时候是指定的用户id
conferSendPdu
.
userData
=
this
.
_rCArrayBufferUtil
.
strToUint8Array
(
"h5"
+
_messageInfo
.
message
);
//conferSendPdu.userData =UTF8.setBytesFromString(_messageInfo.message);
...
...
@@ -216,7 +216,7 @@ class ConferApe extends Ape {
sendConferRecordMsg
(
_param
)
{
if
(
!
this
.
mcu
.
connected
)
{
loger
.
warn
(
GlobalConfig
.
getCurrentStatus
());
return
{
"code"
:
ApeConsts
.
RETURN_FAILED
,
"data"
:
"已经断开连接"
};
return
{
"code"
:
ApeConsts
.
RETURN_FAILED
,
"data"
:
"已经断开连接"
};
}
if
(
_param
==
null
)
{
loger
.
warn
(
"控制录制状的消息发送失败,参数错误"
,
_param
);
...
...
@@ -235,13 +235,13 @@ class ConferApe extends Ape {
let
conferRecordSendPdu
=
new
pdu
[
'RCConferenceRecordRequestPdu'
];
conferRecordSendPdu
.
type
=
pdu
.
RCPDU_CONFERENCE_RECORD_REQUEST
;
conferRecordSendPdu
.
peer
=
0
;
//channel 为0
conferRecordSendPdu
.
peer
=
0
;
//channel 为0
conferRecordSendPdu
.
isPublic
=
true
;
conferRecordSendPdu
.
initiator
=
this
.
_classInfo
.
nodeId
;
//发起人
conferRecordSendPdu
.
initiator
=
this
.
_classInfo
.
nodeId
;
//发起人
conferRecordSendPdu
.
record
=
GlobalConfig
.
recordStatus
;
//conferRecordSendPdu.classTime = GlobalConfig.classTimestamp;//不能使用课堂进行时间,这个时间结束课堂的时候会被清除
conferRecordSendPdu
.
classTime
=
GlobalConfig
.
recordTimestamp
;
//课堂录制的累积时间,不会被清除
conferRecordSendPdu
.
classTime
=
GlobalConfig
.
recordTimestamp
;
//课堂录制的累积时间,不会被清除
conferRecordSendPdu
.
filename
=
GlobalConfig
.
recordFileName
||
GlobalConfig
.
classId
+
"_"
+
EngineUtils
.
creatTimestampYMD
()
+
".rec"
;
this
.
sendChatUniform
(
conferRecordSendPdu
);
// to, message
...
...
@@ -251,8 +251,8 @@ class ConferApe extends Ape {
//开启录制
startRecord
()
{
//如果录制的时间长超出设定的最大录制时间就不再录制
if
(
GlobalConfig
.
recordTimestamp
>=
GlobalConfig
.
allowRecordMaxTime
){
loger
.
warn
(
'不能再录制,录制时间已经达到最大限制'
,
GlobalConfig
.
recordTimestamp
);
if
(
GlobalConfig
.
recordTimestamp
>=
GlobalConfig
.
allowRecordMaxTime
)
{
loger
.
warn
(
'不能再录制,录制时间已经达到最大限制'
,
GlobalConfig
.
recordTimestamp
);
return
;
}
...
...
@@ -260,33 +260,32 @@ class ConferApe extends Ape {
//如果是host
if
(
GlobalConfig
.
isHost
)
{
GlobalConfig
.
classStopTime
=
EngineUtils
.
creatTimestampStr
();
this
.
sendConferRecordMsg
({
"recordStatus"
:
true
});
this
.
sendConferRecordMsg
({
"recordStatus"
:
true
});
this
.
_emit
(
MessageTypes
.
CLASS_STATUS_INFO_CHANGE
);
this
.
_emit
(
MessageTypes
.
CLASS_RECORD_START
);
//课堂开始录制
this
.
_emit
(
MessageTypes
.
CLASS_RECORD_START
);
//课堂开始录制
}
}
//停止录制
stopRecord
(
isForce
)
{
loger
.
log
(
'stopRecord'
,
"isHost"
,
GlobalConfig
.
isHost
,
"recordStatus"
,
GlobalConfig
.
recordStatus
);
if
(
isForce
&&
isForce
==
true
)
{
if
(
isForce
&&
isForce
==
true
)
{
//强制停止,可以是host之外的身份(比如当前课堂老师异常退出,没有老师,会随机选择一个人来做释放操作)
if
(
GlobalConfig
.
recordStatus
)
{
GlobalConfig
.
classStopTime
=
EngineUtils
.
creatTimestampStr
();
this
.
sendConferRecordMsg
({
"recordStatus"
:
false
});
this
.
sendConferRecordMsg
({
"recordStatus"
:
false
});
this
.
_emit
(
MessageTypes
.
CLASS_STATUS_INFO_CHANGE
);
}
}
else
{
}
else
{
//身份是host,并且当前正在录制中
if
(
GlobalConfig
.
isHost
&&
GlobalConfig
.
recordStatus
)
{
GlobalConfig
.
classStopTime
=
EngineUtils
.
creatTimestampStr
();
this
.
sendConferRecordMsg
({
"recordStatus"
:
false
});
this
.
sendConferRecordMsg
({
"recordStatus"
:
false
});
this
.
_emit
(
MessageTypes
.
CLASS_STATUS_INFO_CHANGE
);
}
}
}
//主动离开课堂,发送通知到服务器
leaveClass
()
{
let
nodeInfoRecordPdu
=
this
.
mcu
.
mcuClassInfo
.
self
;
...
...
@@ -328,10 +327,25 @@ class ConferApe extends Ape {
GlobalConfig
.
classStopTime
=
EngineUtils
.
creatTimestampStr
();
this
.
stopRecord
();
this
.
_emit
(
MessageTypes
.
CLASS_STATUS_INFO_CHANGE
);
this
.
sendUpdaterClassStatusInfo
({
"actionType"
:
0
,
isStopAllPublishMedia
:
true
});
this
.
sendUpdaterClassStatusInfo
({
"actionType"
:
0
,
isStopAllPublishMedia
:
true
});
loger
.
log
(
'restorClass'
);
}
// 全局禁言
silenceClass
(
isSilence
)
{
if
(
GlobalConfig
.
isHost
)
{
GlobalConfig
.
silence
=
!!
isSilence
;
//禁言状态改变
this
.
_emit
(
MessageTypes
.
CLASS_SILENCE_CHANGE
,
GlobalConfig
.
silence
);
//同步禁言状态
this
.
sendUpdaterClassStatusInfo
();
}
else
{
loger
.
warn
(
'没有开始课堂的权限'
);
}
}
//开始上课
startClass
(
_param
)
{
if
(
GlobalConfig
.
isHost
)
{
...
...
@@ -342,8 +356,7 @@ class ConferApe extends Ape {
//如果录制的文件名不存在,需要创建一个名字
let
timestampYMD
=
EngineUtils
.
creatTimestampYMD
();
GlobalConfig
.
recordFileName
=
GlobalConfig
.
recordFileName
||
GlobalConfig
.
siteId
+
"/"
+
timestampYMD
+
"/"
+
GlobalConfig
.
classId
+
"_"
+
timestampYMD
+
".rec"
;
//4、文件名称 $RECORD_HOME/`site id`/`日期`/`filename` 例:/data/record/su/20161216/`filename`
GlobalConfig
.
siteId
+
"/"
+
timestampYMD
+
"/"
+
GlobalConfig
.
classId
+
"_"
+
timestampYMD
+
".rec"
;
//4、文件名称 $RECORD_HOME/`site id`/`日期`/`filename` 例:/data/record/su/20161216/`filename`
if
(
GlobalConfig
.
classStatus
==
ApeConsts
.
CLASS_STATUS_WAIT
)
{
//之前是为开始状态,第一次点开始
...
...
@@ -356,7 +369,7 @@ class ConferApe extends Ape {
//课堂状态改变
this
.
_emit
(
MessageTypes
.
CLASS_STATUS_INFO_CHANGE
);
//同步课堂状态
this
.
sendUpdaterClassStatusInfo
({
"actionType"
:
1
,
isStopAllPublishMedia
:
true
});
this
.
sendUpdaterClassStatusInfo
({
"actionType"
:
1
,
isStopAllPublishMedia
:
true
});
//开始计时
this
.
startTimerCounter
();
...
...
@@ -375,8 +388,8 @@ class ConferApe extends Ape {
GlobalConfig
.
classStopTime
=
EngineUtils
.
creatTimestampStr
();
this
.
stopRecord
();
this
.
_emit
(
MessageTypes
.
CLASS_STATUS_INFO_CHANGE
,
_param
);
this
.
sendUpdaterClassStatusInfo
({
"actionType"
:
2
,
isStopAllPublishMedia
:
true
});
this
.
_emit
(
MessageTypes
.
CLASS_STATUS_INFO_CHANGE
,
_param
);
this
.
sendUpdaterClassStatusInfo
({
"actionType"
:
2
,
isStopAllPublishMedia
:
true
});
this
.
stopTimerCounter
();
}
...
...
@@ -390,58 +403,77 @@ class ConferApe extends Ape {
this
.
stopTimerCounter
();
this
.
restorClass
();
//把所有人都踢出课堂
this
.
sendConferMsg
({
"to"
:
0
,
"message"
:
"所有人退出课堂"
,
"actionType"
:
ApeConsts
.
CLASS_ACTION_CLOSE_ALL
});
this
.
sendConferMsg
({
"to"
:
0
,
"message"
:
"所有人退出课堂"
,
"actionType"
:
ApeConsts
.
CLASS_ACTION_CLOSE_ALL
});
}
//更新设备信息
updateDeviceInfo
(
_param
){
loger
.
log
(
'更新用户的设备信息->'
,
_param
);
updateDeviceInfo
(
_param
)
{
loger
.
log
(
'更新用户的设备信息->'
,
_param
);
this
.
updateUserInfo
();
}
// 禁言控制
controlSilenceStatus
(
_param
)
{
//控制用户的禁言状态
if
(
!
_param
||
!
_param
.
nodeId
)
{
loger
.
log
(
'控制禁言状态->失败->参数错误'
,
_param
);
return
;
}
let
msgObj
=
{};
msgObj
.
nodeId
=
_param
.
nodeId
;
msgObj
.
silence
=
_param
.
silence
||
''
;
this
.
sendConferMsg
({
"to"
:
_param
.
nodeId
,
"message"
:
JSON
.
stringify
(
msgObj
),
"actionType"
:
ApeConsts
.
USER_ACTION_SILENCE_STATUS_CHANGE
});
}
changeSilenceStatus
(
_param
)
{
loger
.
log
(
'切换禁言状态->'
,
_param
);
GlobalConfig
.
selfSilence
=
_param
.
silence
;
this
.
updateUserInfo
();
}
//控制举手状态
controlHandUpStatus
(
_param
)
{
controlHandUpStatus
(
_param
)
{
//控制用户的举手状态
if
(
!
_param
||!
_param
.
nodeId
){
loger
.
log
(
'控制举手状态->失败->参数错误'
,
_param
);
if
(
!
_param
||
!
_param
.
nodeId
)
{
loger
.
log
(
'控制举手状态->失败->参数错误'
,
_param
);
return
;
}
let
msgObj
=
{};
msgObj
.
nodeId
=
_param
.
nodeId
;
msgObj
.
isHandUp
=
false
;
if
(
_param
&&
_param
.
isHandUp
==
true
){
msgObj
.
isHandUp
=
true
;
let
msgObj
=
{};
msgObj
.
nodeId
=
_param
.
nodeId
;
msgObj
.
isHandUp
=
false
;
if
(
_param
&&
_param
.
isHandUp
==
true
)
{
msgObj
.
isHandUp
=
true
;
}
this
.
sendConferMsg
({
"to"
:
_param
.
nodeId
,
"message"
:
JSON
.
stringify
(
msgObj
),
"actionType"
:
ApeConsts
.
CLASS_ACTION_HANDUP_STATUS_CHANGE
});
this
.
sendConferMsg
({
"to"
:
_param
.
nodeId
,
"message"
:
JSON
.
stringify
(
msgObj
),
"actionType"
:
ApeConsts
.
CLASS_ACTION_HANDUP_STATUS_CHANGE
});
}
//切换举手状态
changeHandUpStatus
(
_param
){
loger
.
log
(
'切换举手状态->'
,
_param
);
if
(
_param
&&
_param
.
isHandUp
==
true
){
changeHandUpStatus
(
_param
)
{
loger
.
log
(
'切换举手状态->'
,
_param
);
if
(
_param
&&
_param
.
isHandUp
==
true
)
{
//举手
GlobalConfig
.
handUpTime
=
EngineUtils
.
creatTimestamp
();
}
else
{
GlobalConfig
.
handUpTime
=
0
;
//默认0是没有举手的状态(大于0就是举手)
GlobalConfig
.
handUpTime
=
EngineUtils
.
creatTimestamp
();
}
else
{
GlobalConfig
.
handUpTime
=
0
;
//默认0是没有举手的状态(大于0就是举手)
}
this
.
updateUserInfo
();
}
//课堂的场景模块发送改变
sceneTableChange
(
_param
){
if
(
GlobalConfig
.
isRecordPlayBack
){
sceneTableChange
(
_param
)
{
if
(
GlobalConfig
.
isRecordPlayBack
)
{
return
;
}
loger
.
log
(
'切换文档-媒体-屏幕模块切换->'
,
_param
);
loger
.
log
(
'切换文档-媒体-屏幕模块切换->'
,
_param
);
//如果是host身份
if
(
GlobalConfig
.
isHost
)
{
if
(
_param
){
GlobalConfig
.
currentSceneTableId
=
parseInt
(
_param
.
currentSceneTableId
)
||
0
;
//当前场景显示的模块 0=文档模块、1=屏幕共享、2=媒体共享
if
(
_param
)
{
GlobalConfig
.
currentSceneTableId
=
parseInt
(
_param
.
currentSceneTableId
)
||
0
;
//当前场景显示的模块 0=文档模块、1=屏幕共享、2=媒体共享
//保存数据到Sass
this
.
_emit
(
MessageTypes
.
CLASS_STATUS_INFO_CHANGE
);
//同步消息给其他人
this
.
sendUpdaterClassStatusInfo
({
"actionType"
:
1
,
isStopAllPublishMedia
:
false
});
this
.
sendUpdaterClassStatusInfo
({
"actionType"
:
1
,
isStopAllPublishMedia
:
false
});
}
}
}
//更新课堂信息
sendUpdaterClassStatusInfo
(
_param
)
{
...
...
@@ -452,7 +484,7 @@ class ConferApe extends Ape {
this
.
_emit
(
MessageTypes
.
MCU_ERROR
,
MessageTypes
.
ERR_APE_INTERFACE_PARAM_WRONG
);
return
;
}
let
itemIdx
=
ApeConsts
.
CONFERENCE_OBJ_TABLE_ID
;
// itemIdx=_param.itemIdx;
let
itemIdx
=
ApeConsts
.
CONFERENCE_OBJ_TABLE_ID
;
// itemIdx=_param.itemIdx;
let
modelPdu
=
this
.
packPdu
(
_param
,
itemIdx
);
loger
.
log
(
modelPdu
);
if
(
modelPdu
==
null
)
{
...
...
@@ -463,19 +495,17 @@ class ConferApe extends Ape {
let
tableItemPdu
=
new
pdu
[
'RCRegistryTableItemPdu'
];
tableItemPdu
.
itemIdx
=
itemIdx
;
tableItemPdu
.
owner
=
0
;
//收到flash的是这个值,不清楚先写固定
tableItemPdu
.
owner
=
0
;
//收到flash的是这个值,不清楚先写固定
tableItemPdu
.
registerObjId
=
ApeConsts
.
CONFERENCE_OBJ_TABLE_ID
;
tableItemPdu
.
itemData
=
modelPdu
.
toArrayBuffer
();
//updater
let
tableUpdateItem
=
new
pdu
[
'RCRegistryTableUpdateItemPdu'
];
//optional RCPduType_E type = 1 [default = RCPDU_REG_TABLE_UPDATE_PDU];
//repeated RCRegistryTableItemPdu items = 2;
tableUpdateItem
.
type
=
pdu
.
RCPDU_REG_TABLE_UPDATE_PDU
;
//
tableUpdateItem
.
type
=
pdu
.
RCPDU_REG_TABLE_UPDATE_PDU
;
//
tableUpdateItem
.
items
.
push
(
tableItemPdu
);
let
updateObjPdu
=
new
pdu
[
'RCRegistryUpdateObjPdu'
];
updateObjPdu
.
objId
=
ApeConsts
.
CONFERENCE_OBJ_TABLE_ID
;
updateObjPdu
.
subType
=
tableUpdateItem
.
type
;
...
...
@@ -493,7 +523,6 @@ class ConferApe extends Ape {
this
.
sendUniform
(
adapterPdu
,
true
);
}
/////收到消息处理/////////////////////////////////////////////////////////////////////////////////
//加入channel成功
onJoinChannelHandlerSuccess
()
{
...
...
@@ -506,12 +535,12 @@ class ConferApe extends Ape {
//如果是host ,开始录制
this
.
startRecord
();
}
else
if
(
GlobalConfig
.
classStatus
==
ApeConsts
.
CLASS_STATUS_WAIT
&&
GlobalConfig
.
isHost
&&
GlobalConfig
.
isAutoStartClass
&&
!
GlobalConfig
.
isRecordPlayBack
){
}
else
if
(
GlobalConfig
.
classStatus
==
ApeConsts
.
CLASS_STATUS_WAIT
&&
GlobalConfig
.
isHost
&&
GlobalConfig
.
isAutoStartClass
&&
!
GlobalConfig
.
isRecordPlayBack
)
{
//自动开始上课的4个条件
//1.如果自己是host,2.Sass配置的是自动开始上课,3.并且当前是未开始状态,4.当前不是录制回放,开始自动上课
loger
.
log
(
'自动开始上课->classStatus:'
,
GlobalConfig
.
classStatus
,
" isHost:"
,
GlobalConfig
.
isHost
,
" isAutoStartClass:"
,
GlobalConfig
.
isAutoStartClass
,
" isRecordPlayBack:"
,
GlobalConfig
.
isRecordPlayBack
);
loger
.
log
(
'自动开始上课->classStatus:'
,
GlobalConfig
.
classStatus
,
" isHost:"
,
GlobalConfig
.
isHost
,
" isAutoStartClass:"
,
GlobalConfig
.
isAutoStartClass
,
" isRecordPlayBack:"
,
GlobalConfig
.
isRecordPlayBack
);
this
.
startClass
();
}
}
...
...
@@ -519,7 +548,7 @@ class ConferApe extends Ape {
//开启计时器
startTimerCounter
()
{
this
.
stopTimerCounter
();
if
(
this
.
timerCounter
)
{
if
(
this
.
timerCounter
)
{
this
.
timerCounter
.
startTimer
();
}
...
...
@@ -527,7 +556,7 @@ class ConferApe extends Ape {
//停止计时器
stopTimerCounter
()
{
if
(
this
.
timerCounter
)
{
if
(
this
.
timerCounter
)
{
this
.
timerCounter
.
stopTimer
();
}
...
...
@@ -543,15 +572,14 @@ class ConferApe extends Ape {
loger
.
warn
(
'当前课堂已经暂停或者未开始,不计时'
,
"classStatus-->"
,
GlobalConfig
.
classStatus
);
return
;
}
GlobalConfig
.
classTimestamp
=
GlobalConfig
.
classTimestamp
+
1
;
//计时
GlobalConfig
.
classTimestamp
=
GlobalConfig
.
classTimestamp
+
1
;
//计时
//老师身份的时候要记录录制的时间
if
(
GlobalConfig
.
isHost
){
GlobalConfig
.
recordTimestamp
=
GlobalConfig
.
recordTimestamp
+
1
;
if
(
GlobalConfig
.
isHost
)
{
GlobalConfig
.
recordTimestamp
=
GlobalConfig
.
recordTimestamp
+
1
;
}
//loger.log('课堂进行时间',GlobalConfig.classTimestamp);
this
.
_emit
(
MessageTypes
.
CLASS_UPDATE_TIMER
,
{
"classTimestamp"
:
GlobalConfig
.
classTimestamp
});
this
.
_emit
(
MessageTypes
.
CLASS_UPDATE_TIMER
,
{
"classTimestamp"
:
GlobalConfig
.
classTimestamp
});
if
(
GlobalConfig
.
classTimestamp
%
GlobalConfig
.
updateClassInfoDelay
==
0
)
{
//如果是host身份,需要同步时间给其他人,同时把当前的状态上传到服务器
...
...
@@ -560,12 +588,12 @@ class ConferApe extends Ape {
this
.
_emit
(
MessageTypes
.
CLASS_STATUS_INFO_CHANGE
);
//同步消息给其他人
this
.
sendUpdaterClassStatusInfo
({
"actionType"
:
1
,
isStopAllPublishMedia
:
false
});
this
.
sendUpdaterClassStatusInfo
({
"actionType"
:
1
,
isStopAllPublishMedia
:
false
});
}
}
//进行MS动态选点,选择最快的MS服务器地址(录制回放不做处理)
if
(
!
GlobalConfig
.
isRecordPlayBack
&&
GlobalConfig
.
classTimestamp
%
GlobalConfig
.
msDynamicChooseIpDelay
==
0
)
{
if
(
!
GlobalConfig
.
isRecordPlayBack
&&
GlobalConfig
.
classTimestamp
%
GlobalConfig
.
msDynamicChooseIpDelay
==
0
)
{
this
.
_emit
(
MessageTypes
.
SWITCH_MS_IP
);
}
}
...
...
@@ -573,22 +601,22 @@ class ConferApe extends Ape {
tableUpdateHandler
(
owner
,
itemIdx
,
itemData
)
{
try
{
let
model
=
this
.
unPackPdu
(
owner
,
itemIdx
,
itemData
);
loger
.
log
(
'课堂数据更新->'
,
model
);
loger
.
log
(
'课堂数据更新->'
,
model
);
//处理课堂更新的信息
if
(
model
&&
model
.
classStatusInfo
)
{
GlobalConfig
.
setClassStatusInfo
(
model
.
classStatusInfo
);
if
(
model
.
classStatusInfo
.
isStopAllPublishMedia
)
{
if
(
model
.
classStatusInfo
.
isStopAllPublishMedia
)
{
//课堂状态发送改变 需要对当前正在推的流进行停止,因为录制的问题;
this
.
_emit
(
MessageTypes
.
STOP_ALL_MEDIA_PUBLISH
);
}
}
//通知应用层更新课堂状态
let
classInfo
=
GlobalConfig
.
classStatusInfo
;
let
classInfo
=
GlobalConfig
.
classStatusInfo
;
loger
.
log
(
'通知应用层更新课堂状态->CLASS_UPTATE_STATUS'
)
this
.
_emit
(
MessageTypes
.
CLASS_UPTATE_STATUS
,
classInfo
);
this
.
_emit
(
MessageTypes
.
CLASS_UPTATE_STATUS
,
classInfo
);
//如果MCU已经断开连接,停止计时器
if
(
!
this
.
mcu
.
connected
)
{
...
...
@@ -609,7 +637,6 @@ class ConferApe extends Ape {
}
}
conferMsgComingHandler
(
_data
)
{
//flash RCConferenceSendDataRequestPdu
//loger.warn('conferMsgComingHandler needs to be handled.');
...
...
@@ -623,22 +650,33 @@ class ConferApe extends Ape {
chatMsg
.
toNodeID
=
chatReceivePdu
.
peer
;
chatMsg
.
message
=
this
.
_rCArrayBufferUtil
.
uint8ArrayToStr
(
chatReceivePdu
.
userData
,
2
);
chatMsg
.
actionType
=
chatReceivePdu
.
actionType
;
loger
.
log
(
"conferMsgComingHandler"
,
chatMsg
);
//{"fromNodeID":418883112,"toNodeID":0,"message":"所有人退出课堂","actionType":1}
loger
.
log
(
"conferMsgComingHandler"
,
chatMsg
);
//{"fromNodeID":418883112,"toNodeID":0,"message":"所有人退出课堂","actionType":1}
switch
(
chatMsg
.
actionType
)
{
case
ApeConsts
.
CLASS_ACTION_CLOSE_ALL
:
loger
.
log
(
chatMsg
.
message
);
//收到课堂关闭,所有人都退出,执行自己关闭的流程
this
.
_emit
(
MessageTypes
.
CLASS_RUN_EXIT
,{
'type'
:
1
});
this
.
_emit
(
MessageTypes
.
CLASS_RUN_EXIT
,
{
'type'
:
1
});
break
;
case
ApeConsts
.
CLASS_ACTION_HANDUP_STATUS_CHANGE
:
console
.
log
(
'chatMsg'
,
chatMsg
);
let
msgObj
=
null
;
try
{
msgObj
=
JSON
.
parse
(
chatMsg
.
message
);
if
(
msgObj
&&
msgObj
.
nodeId
==
GlobalConfig
.
nodeId
){
console
.
log
(
'chatMsg'
,
chatMsg
);
let
msgObj
=
null
;
try
{
msgObj
=
JSON
.
parse
(
chatMsg
.
message
);
if
(
msgObj
&&
msgObj
.
nodeId
==
GlobalConfig
.
nodeId
)
{
this
.
changeHandUpStatus
(
msgObj
);
}
}
catch
(
err
){
}
catch
(
err
)
{
loger
.
warn
(
'chatMsg->JSON数据解析失败'
);
}
break
;
case
ApeConsts
.
USER_ACTION_SILENCE_STATUS_CHANGE
:
let
msgObj
=
null
;
try
{
msgObj
=
JSON
.
parse
(
chatMsg
.
message
);
if
(
msgObj
&&
msgObj
.
nodeId
==
GlobalConfig
.
nodeId
)
{
this
.
changeSilenceStatus
(
msgObj
);
}
}
catch
(
err
)
{
loger
.
warn
(
'chatMsg->JSON数据解析失败'
);
}
break
;
...
...
@@ -649,13 +687,13 @@ class ConferApe extends Ape {
//-------------第三方消息------------------------------
//收到父级页面的消息,需要广播发送出去
onThirdReciveParentMessage
(
_msg
){
loger
.
log
(
'收到页面的消息->广播给其他模块->'
,
_msg
);
this
.
sendThirdBroadcastData
({
to
:
0
,
message
:
_msg
});
onThirdReciveParentMessage
(
_msg
)
{
loger
.
log
(
'收到页面的消息->广播给其他模块->'
,
_msg
);
this
.
sendThirdBroadcastData
({
to
:
0
,
message
:
_msg
});
}
//发送第三方广播消息
sendThirdBroadcastData
(
_param
){
loger
.
log
(
"发送第三方广播消息->"
,
_param
);
sendThirdBroadcastData
(
_param
)
{
loger
.
log
(
"发送第三方广播消息->"
,
_param
);
if
(
this
.
_classInfo
==
null
||
EngineUtils
.
isEmptyObject
(
this
.
_classInfo
))
{
loger
.
log
(
'发送第三方广播消息->失败->SDK还未初始化数据!'
);
if
(
GlobalConfig
.
getCurrentStatus
().
code
==
0
||
GlobalConfig
.
getCurrentStatus
().
code
==
1
)
{
...
...
@@ -667,8 +705,8 @@ class ConferApe extends Ape {
let
thirdBroadcastSendPdu
=
new
pdu
[
'RCThirdSendBroadcastDataRequestPdu'
];
thirdBroadcastSendPdu
.
type
=
pdu
.
RCPDU_THIRD_BROADCAST_DATA_REQUEST
;
thirdBroadcastSendPdu
.
initiator
=
this
.
_classInfo
.
nodeId
;
//发起人
thirdBroadcastSendPdu
.
peer
=
parseInt
(
_param
.
to
)
||
0
;
//发送给谁,公聊的时候是0,私聊的时候是指定的用户id
thirdBroadcastSendPdu
.
initiator
=
this
.
_classInfo
.
nodeId
;
//发起人
thirdBroadcastSendPdu
.
peer
=
parseInt
(
_param
.
to
)
||
0
;
//发送给谁,公聊的时候是0,私聊的时候是指定的用户id
thirdBroadcastSendPdu
.
isPublic
=
true
;
thirdBroadcastSendPdu
.
message
=
this
.
_rCArrayBufferUtil
.
strToUint8Array
(
"h5"
+
_param
.
message
);
...
...
@@ -681,9 +719,8 @@ class ConferApe extends Ape {
}
}
//监听第三方消息通道消息
onThirdBroadcastDataHandler
(
_data
)
{
onThirdBroadcastDataHandler
(
_data
)
{
//loger.log("监听第三方消息通道消息->",_data);
let
thirdBroadcastReceivePdu
=
pdu
[
'RCThirdSendBroadcastDataRequestPdu'
].
decode
(
_data
);
let
thirdMessage
=
{};
...
...
@@ -692,7 +729,7 @@ class ConferApe extends Ape {
//loger.log("监听第三方消息通道消息->1", thirdMessage);
thirdMessage
.
message
=
this
.
_rCArrayBufferUtil
.
uint8ArrayToStr
(
thirdBroadcastReceivePdu
.
message
,
2
);
loger
.
log
(
"监听第三方消息通道消息->"
,
thirdMessage
);
if
(
this
.
thirdMessage
)
{
if
(
this
.
thirdMessage
)
{
this
.
thirdMessage
.
sendMessageToParent
(
thirdMessage
.
message
);
}
}
...
...
@@ -703,8 +740,8 @@ class ConferApe extends Ape {
try
{
let
conferRecordSendPdu
=
pdu
[
'RCConferenceRecordRequestPdu'
].
decode
(
_data
);
// {"initiator":820461225,"record":false,"classTime":3213,"filename":"h5dev/20170410/1437784290_20170410.rec"}
loger
.
log
(
"录制回放控制操作成功->"
,
conferRecordSendPdu
);
if
(
conferRecordSendPdu
&&
conferRecordSendPdu
.
record
==
true
||
conferRecordSendPdu
.
record
==
"true"
){
loger
.
log
(
"录制回放控制操作成功->"
,
conferRecordSendPdu
);
if
(
conferRecordSendPdu
&&
conferRecordSendPdu
.
record
==
true
||
conferRecordSendPdu
.
record
==
"true"
)
{
//每次开启录制的时候,需要把当前显示的文档数据更新一次,否则无法录制已经显示的文件
this
.
_emit
(
MessageTypes
.
CLASS_RECORD_SUCCESS
);
}
...
...
@@ -726,20 +763,20 @@ class ConferApe extends Ape {
//更新人员列表数据
rosterUpdateHandler
(
nodeId
,
nodeData
)
{
nodeData
.
userRole
=
ApeConsts
.
userTypes
[
nodeData
.
role
];
nodeData
.
userRole
=
ApeConsts
.
userTypes
[
nodeData
.
role
];
//如果是自己的信息,不处理跳过
if
(
nodeId
==
GlobalConfig
.
nodeId
)
{
//loger.log("自己加入课堂的消息->",nodeId,"role-->", nodeData.role, ApeConsts.userTypes[nodeData.role]);
//自己加入的时候,需要做一下判断操作,如果满足以下3个条件就要暂停课堂:
// 1.当前课堂只有自己;2.自己的身份不是host;3当前的课堂状态为(CLASS_STATUS_STARTED= 1;//直播中)
let
rosterLen
=
Object
.
keys
(
this
.
rosters
).
length
;
if
(
rosterLen
<
1
&&!
GlobalConfig
.
isHost
&&
GlobalConfig
.
classStatus
==
ApeConsts
.
CLASS_STATUS_STARTED
){
let
rosterLen
=
Object
.
keys
(
this
.
rosters
).
length
;
if
(
rosterLen
<
1
&&
!
GlobalConfig
.
isHost
&&
GlobalConfig
.
classStatus
==
ApeConsts
.
CLASS_STATUS_STARTED
)
{
loger
.
warn
(
"当前课堂没有老师->暂停课堂"
);
this
.
pauseClass
({
isForce
:
true
});
this
.
pauseClass
({
isForce
:
true
});
this
.
stopRecord
(
true
);
}
//处理用户信息
this
.
unPackRosterInfo
(
nodeId
,
nodeData
);
this
.
unPackRosterInfo
(
nodeId
,
nodeData
);
return
;
}
...
...
@@ -752,10 +789,10 @@ class ConferApe extends Ape {
if
(
nodeData
.
role
==
ApeConsts
.
NR_HOST
&&
GlobalConfig
.
isHost
)
{
this
.
kickOutRoster
();
return
;
}
else
if
(
nodeData
.
userId
==
GlobalConfig
.
userId
&&
GlobalConfig
.
userId
!=
"0"
){
loger
.
log
(
"异地登陆->userId->"
,
GlobalConfig
.
userId
);
}
else
if
(
nodeData
.
userId
==
GlobalConfig
.
userId
&&
GlobalConfig
.
userId
!=
"0"
)
{
loger
.
log
(
"异地登陆->userId->"
,
GlobalConfig
.
userId
);
this
.
_emit
(
MessageTypes
.
MCU_ERROR
,
MessageTypes
.
ERR_CLASS_REMOTE_LANDING
);
this
.
_emit
(
MessageTypes
.
CLASS_RUN_EXIT
,{
'type'
:
1
});
this
.
_emit
(
MessageTypes
.
CLASS_RUN_EXIT
,
{
'type'
:
1
});
}
}
/*if (parseInt(nodeId) > GlobalConfig.nodeId) {
...
...
@@ -779,10 +816,10 @@ class ConferApe extends Ape {
}*/
//处理用户信息
this
.
unPackRosterInfo
(
nodeId
,
nodeData
);
this
.
unPackRosterInfo
(
nodeId
,
nodeData
);
}
//处理用户信息
unPackRosterInfo
(
nodeId
,
nodeData
)
{
unPackRosterInfo
(
nodeId
,
nodeData
)
{
let
rosterExists
=
this
.
rosters
[
nodeId
];
this
.
rosters
[
nodeId
]
=
nodeData
;
let
userDataObj
=
null
;
...
...
@@ -795,19 +832,19 @@ class ConferApe extends Ape {
let
newNodeData
=
nodeData
;
newNodeData
.
userData
=
userDataObj
;
//如果是监课,不告诉其他人
if
(
nodeData
.
role
==
ApeConsts
.
NR_INVISIBLE
&&
GlobalConfig
.
userRole
!=
ApeConsts
.
invisible
)
{
if
(
nodeData
.
role
==
ApeConsts
.
NR_INVISIBLE
&&
GlobalConfig
.
userRole
!=
ApeConsts
.
invisible
)
{
loger
.
log
(
"NR_INVISIBLE"
);
return
;
}
if
(
!
rosterExists
)
{
loger
.
log
(
"人员加入->"
,
newNodeData
);
this
.
_emit
(
MessageTypes
.
CLASS_INSERT_ROSTER
,
{
"nodeId"
:
nodeId
,
"nodeData"
:
newNodeData
});
loger
.
log
(
"人员加入->"
,
newNodeData
);
this
.
_emit
(
MessageTypes
.
CLASS_INSERT_ROSTER
,
{
"nodeId"
:
nodeId
,
"nodeData"
:
newNodeData
});
this
.
emitRosterChange
();
}
else
{
//loger.log("更新人员列表数据,rosterExists已经存在",rosterExists);
loger
.
log
(
"人员更新信息->"
,
newNodeData
);
this
.
_emit
(
MessageTypes
.
CLASS_UPDATE_ROSTER
,
{
"nodeId"
:
nodeId
,
"nodeData"
:
newNodeData
});
loger
.
log
(
"人员更新信息->"
,
newNodeData
);
this
.
_emit
(
MessageTypes
.
CLASS_UPDATE_ROSTER
,
{
"nodeId"
:
nodeId
,
"nodeData"
:
newNodeData
});
}
}
...
...
@@ -815,7 +852,7 @@ class ConferApe extends Ape {
//踢出用户
kickOutRoster
()
{
this
.
_emit
(
MessageTypes
.
MCU_ERROR
,
MessageTypes
.
ERR_CLASS_KICK_OUT
);
this
.
_emit
(
MessageTypes
.
CLASS_RUN_EXIT
,{
'type'
:
1
});
this
.
_emit
(
MessageTypes
.
CLASS_RUN_EXIT
,
{
'type'
:
1
});
}
//视频模块发生更新,人员状态需要更新
...
...
@@ -824,7 +861,7 @@ class ConferApe extends Ape {
//如果视频消息中channel的占用人 fromNodeId在人员列表中不存在,需要释放这channel,因为这个有可能是之前没释放成功的
if
(
_param
&&
_param
.
status
==
ApeConsts
.
CHANNEL_STATUS_OPENING
&&
this
.
rosters
[
_param
.
fromNodeId
]
==
null
)
{
loger
.
log
(
"媒体模块被占用->占有人已经不存在课堂中->释放->"
,
_param
);
this
.
_emit
(
MessageTypes
.
CLASS_NONENTITY_ROSTER
,
{
"nodeId"
:
_param
.
fromNodeId
});
this
.
_emit
(
MessageTypes
.
CLASS_NONENTITY_ROSTER
,
{
"nodeId"
:
_param
.
fromNodeId
});
}
/* if (_param && _param.status == ApeConsts.CHANNEL_STATUS_OPENING) {
...
...
@@ -855,8 +892,8 @@ class ConferApe extends Ape {
}*/
}
//设备状态更新
updaterUserDeviecStatusChange
(
_data
){
loger
.
log
(
"音视频设备状态更新->"
,
_data
);
updaterUserDeviecStatusChange
(
_data
)
{
loger
.
log
(
"音视频设备状态更新->"
,
_data
);
this
.
updateUserInfo
();
}
...
...
@@ -865,15 +902,15 @@ class ConferApe extends Ape {
if
(
GlobalConfig
.
nodeId
==
nodeId
)
{
loger
.
log
(
"自己离开课堂"
);
// 自己退出
this
.
_emit
(
MessageTypes
.
CLASS_RUN_EXIT
,{
'type'
:
0
});
this
.
_emit
(
MessageTypes
.
CLASS_RUN_EXIT
,
{
'type'
:
0
});
}
else
{
let
user
=
this
.
rosters
[
nodeId
];
if
(
user
){
loger
.
log
(
nodeId
,
"->离开课堂->身份->"
,
user
.
role
);
let
user
=
this
.
rosters
[
nodeId
];
if
(
user
)
{
loger
.
log
(
nodeId
,
"->离开课堂->身份->"
,
user
.
role
);
}
delete
this
.
rosters
[
nodeId
];
this
.
emitRosterChange
();
this
.
_emit
(
MessageTypes
.
CLASS_DELETE_ROSTER
,
{
"nodeId"
:
nodeId
});
this
.
_emit
(
MessageTypes
.
CLASS_DELETE_ROSTER
,
{
"nodeId"
:
nodeId
});
//当前人员列表中抽一个人来检查离开人员是否占用频道
for
(
let
key
in
this
.
rosters
)
{
...
...
@@ -881,10 +918,10 @@ class ConferApe extends Ape {
//如果抽到的人是自己就处理以下操作
if
(
randNodeId
==
GlobalConfig
.
nodeId
)
{
loger
.
log
(
randNodeId
,
"有权限检查离开的人员是否占用channel"
);
this
.
_emit
(
MessageTypes
.
CLASS_NONENTITY_ROSTER
,
{
"nodeId"
:
nodeId
});
this
.
_emit
(
MessageTypes
.
CLASS_NONENTITY_ROSTER
,
{
"nodeId"
:
nodeId
});
//如果离开的人员是老师,需要暂停当前的课堂
if
(
user
&&
user
.
role
==
ApeConsts
.
NR_HOST
)
{
if
(
user
&&
user
.
role
==
ApeConsts
.
NR_HOST
)
{
this
.
pauseClass
();
//强制停止录制
this
.
stopRecord
(
true
);
...
...
@@ -912,28 +949,29 @@ class ConferApe extends Ape {
return
null
;
}
let
classStatusInfo
=
new
pdu
[
'RCClassStatusInfoPdu'
];
classStatusInfo
.
nodeId
=
GlobalConfig
.
nodeId
;
//mcu中的唯一ID
classStatusInfo
.
nodeId
=
GlobalConfig
.
nodeId
;
//mcu中的唯一ID
classStatusInfo
.
userId
=
GlobalConfig
.
userId
;
classStatusInfo
.
userName
=
GlobalConfig
.
userName
;
classStatusInfo
.
siteId
=
GlobalConfig
.
siteId
;
//站点号
classStatusInfo
.
siteId
=
GlobalConfig
.
siteId
;
//站点号
classStatusInfo
.
classId
=
GlobalConfig
.
classId
;
classStatusInfo
.
className
=
GlobalConfig
.
className
;
classStatusInfo
.
classType
=
GlobalConfig
.
classType
;
//课堂类型
classStatusInfo
.
classStatus
=
GlobalConfig
.
classStatus
;
//课堂的状态
classStatusInfo
.
classStartTime
=
GlobalConfig
.
classStartTime
;
//课堂点击开始时间
classStatusInfo
.
classStopTime
=
GlobalConfig
.
classStopTime
;
//最后一次停止的时间(点暂停或结束),每次发送数据都获取当前时间戳
classStatusInfo
.
classTimestamp
=
GlobalConfig
.
classTimestamp
;
//相对于点开始课堂的时间戳
classStatusInfo
.
classBeginTime
=
GlobalConfig
.
classBeginTime
;
//课堂创建的时间,这个是Sass返回的
classStatusInfo
.
classEndTime
=
GlobalConfig
.
classEndTime
;
//课堂结束的时间,这个是Sass返回的
classStatusInfo
.
recordStatus
=
GlobalConfig
.
recordStatus
;
//当前录制状态
classStatusInfo
.
recordTimestamp
=
GlobalConfig
.
recordTimestamp
;
//相对于首次开始录制的时间戳
classStatusInfo
.
recordFileName
=
GlobalConfig
.
recordFileName
;
//录制的文件名
classStatusInfo
.
recordDownloadUrl
=
GlobalConfig
.
recordDownloadUrl
;
//下载地址
classStatusInfo
.
serverTimestamp
=
GlobalConfig
.
serverTimestamp
;
//当前的系统时间戳
classStatusInfo
.
activeDocId
=
GlobalConfig
.
activeDocId
;
//当前激活的文档id
classStatusInfo
.
activeDocCurPage
=
GlobalConfig
.
activeDocCurPage
;
//当前激活的文档的当前页
classStatusInfo
.
isStopAllPublishMedia
=
_param
.
isStopAllPublishMedia
||
false
;
classStatusInfo
.
currentSceneTableId
=
GlobalConfig
.
currentSceneTableId
;
classStatusInfo
.
classType
=
GlobalConfig
.
classType
;
//课堂类型
classStatusInfo
.
classStatus
=
GlobalConfig
.
classStatus
;
//课堂的状态
classStatusInfo
.
classStartTime
=
GlobalConfig
.
classStartTime
;
//课堂点击开始时间
classStatusInfo
.
classStopTime
=
GlobalConfig
.
classStopTime
;
//最后一次停止的时间(点暂停或结束),每次发送数据都获取当前时间戳
classStatusInfo
.
classTimestamp
=
GlobalConfig
.
classTimestamp
;
//相对于点开始课堂的时间戳
classStatusInfo
.
classBeginTime
=
GlobalConfig
.
classBeginTime
;
//课堂创建的时间,这个是Sass返回的
classStatusInfo
.
classEndTime
=
GlobalConfig
.
classEndTime
;
//课堂结束的时间,这个是Sass返回的
classStatusInfo
.
recordStatus
=
GlobalConfig
.
recordStatus
;
//当前录制状态
classStatusInfo
.
recordTimestamp
=
GlobalConfig
.
recordTimestamp
;
//相对于首次开始录制的时间戳
classStatusInfo
.
recordFileName
=
GlobalConfig
.
recordFileName
;
//录制的文件名
classStatusInfo
.
recordDownloadUrl
=
GlobalConfig
.
recordDownloadUrl
;
//下载地址
classStatusInfo
.
serverTimestamp
=
GlobalConfig
.
serverTimestamp
;
//当前的系统时间戳
classStatusInfo
.
activeDocId
=
GlobalConfig
.
activeDocId
;
//当前激活的文档id
classStatusInfo
.
activeDocCurPage
=
GlobalConfig
.
activeDocCurPage
;
//当前激活的文档的当前页
classStatusInfo
.
isStopAllPublishMedia
=
_param
.
isStopAllPublishMedia
||
false
;
classStatusInfo
.
currentSceneTableId
=
GlobalConfig
.
currentSceneTableId
;
classStatusInfo
.
silence
=
GlobalConfig
.
silence
;
//loger.log("classStatusInfo--->", classStatusInfo);
/*
...
...
src/pdus/pro.js
查看文件 @
c1654e4
...
...
@@ -896,6 +896,7 @@ message RCNodeInfoRecordPdu {
optional
string
province
=
27
;
optional
string
isp
=
28
;
repeated
MsListItemPdu
msList
=
29
;
optional
string
selfSilence
=
30
;
}
message
RCVotingPollSettingsPdu
{
...
...
@@ -991,6 +992,7 @@ message RCClassStatusInfoPdu {
optional
uint32
active_doc_cur_page
=
21
;
//当前激活的文档的当前页
optional
bool
isStopAllPublishMedia
=
22
;
//是否停止推流
optional
uint32
currentSceneTableId
=
23
;
//文档区域的当前模块id
optional
bool
silence
=
24
;
//课堂禁言
}
message
RCConferenceRecordRequestPdu
{
...
...
请
注册
或
登录
后发表评论