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-30 11:55:32 +0800
Browse Files
Options
Browse Files
Download
Email Patches
Plain Diff
Commit
6b912647c119be471c30be7f55a60ed080d8ac32
6b912647
1 parent
d2c630d9
增加音频共享接口
显示空白字符变更
内嵌
并排对比
正在显示
6 个修改的文件
包含
204 行增加
和
107 行删除
src/EngineEntrance.js
src/MessageTypes.js
src/Sass.js
src/apes/ConferApe.js
src/apes/CursorApe.js
src/apes/MusicSharedApe.js
src/EngineEntrance.js
查看文件 @
6b91264
...
...
@@ -60,10 +60,10 @@ export default class MessageEntrance extends Emiter {
this
.
sdkInfo
=
_sdkInfo
;
loger
.
warn
(
this
.
sdkInfo
);
//检查是否是移动端
GlobalConfig
.
isMobile
=
mdetect
.
isMobileUA
();
if
(
GlobalConfig
.
isMobile
){
GlobalConfig
.
isMobile
=
mdetect
.
isMobileUA
();
if
(
GlobalConfig
.
isMobile
)
{
loger
.
warn
(
"当前设备是移动设备"
);
}
else
{
}
else
{
loger
.
warn
(
"当前设备是PC"
);
}
...
...
@@ -89,6 +89,7 @@ export default class MessageEntrance extends Emiter {
_sass
.
on
(
_sass
.
CLASS_SAVE_RECORD_INFO_SUCCESS
,
this
.
_sassSaveClassRecordInfoSuccessHandler
.
bind
(
this
));
//保存课堂录制信息
_sass
.
on
(
_sass
.
DELETE_DOCUMENT_SUCCESS
,
this
.
_sassDeleteDocumentSuccess
.
bind
(
this
));
//sass删除文档成功
_sass
.
on
(
_sass
.
DELETE_MEDIASHARE_SUCCESS
,
this
.
_sassDeleteMediaShareSuccess
.
bind
(
this
));
//sass删除媒体文件成功
_sass
.
on
(
_sass
.
DELETE_MUSICSHARE_SUCCESS
,
this
.
_sassDeleteMusicShareSuccess
.
bind
(
this
));
//sass删除MUSIC文件成功
//选点模块
_ipManager
=
new
IpManager
();
...
...
@@ -234,6 +235,10 @@ export default class MessageEntrance extends Emiter {
this
.
mediaSharedStop
=
this
.
_sendMediaSharedStop
.
bind
(
this
);
//停止
this
.
mediaSharedUpdate
=
this
.
_sendMediaSharedUpdate
.
bind
(
this
);
//更新媒体的状态
//音频共享模块
this
.
musicSharedUpload
=
this
.
_sendMusicSharedUpload
.
bind
(
this
);
//上传
this
.
musicSharedDelete
=
this
.
_sassDeletMusicShare
.
bind
(
this
);
//删除,先通过Sass删除,删除成功之后才删除MCU的
this
.
musicSharedPlay
=
this
.
_sendMusicSharedPlay
.
bind
(
this
);
//Music播放
this
.
musicSharedStop
=
this
.
_sendMusicSharedStop
.
bind
(
this
);
//Music停止
this
.
musicSharedUpdate
=
this
.
_sendMusicSharedUpdate
.
bind
(
this
);
//Music更新媒体的状态
...
...
@@ -720,10 +725,10 @@ export default class MessageEntrance extends Emiter {
loger
.
log
(
'加入课堂->.'
);
loger
.
warn
(
"课堂服务信息->"
);
loger
.
warn
(
'MCU服务器地址->mcu->'
,
GlobalConfig
.
MCUServerIP
,
GlobalConfig
.
MCUServerPort
);
loger
.
warn
(
'MCU服务器地址->mcu->'
,
GlobalConfig
.
MCUServerIP
,
GlobalConfig
.
MCUServerPort
);
loger
.
warn
(
'推流地址->MS->'
,
GlobalConfig
.
MS_PUBLISH_IP
,
GlobalConfig
.
MS_PUBLISH_PORT
);
loger
.
warn
(
'RTMP播流地址->RTMP->'
,
GlobalConfig
.
MS_PLAY_RTMP_IP
,
GlobalConfig
.
MS_PLAY_RTMP_PORT
);
loger
.
warn
(
'HLS播流地址->HLS->'
,
GlobalConfig
.
MS_PLAY_HLS_IP
,
GlobalConfig
.
MS_PLAY_HLS_PORT
);
loger
.
warn
(
'RTMP播流地址->RTMP->'
,
GlobalConfig
.
MS_PLAY_RTMP_IP
,
GlobalConfig
.
MS_PLAY_RTMP_PORT
);
loger
.
warn
(
'HLS播流地址->HLS->'
,
GlobalConfig
.
MS_PLAY_HLS_IP
,
GlobalConfig
.
MS_PLAY_HLS_PORT
);
if
(
_mcu
)
{
_mcu
.
joinMCU
(
GlobalConfig
.
getClassInfo
());
...
...
@@ -800,7 +805,7 @@ export default class MessageEntrance extends Emiter {
joinClassSuccessCallBackData
.
ssTunnelAppURL
=
GlobalConfig
.
ssTunnelAppURL
;
joinClassSuccessCallBackData
.
currentSceneTableId
=
GlobalConfig
.
currentSceneTableId
;
//文档区域的模块显示
joinClassSuccessCallBackData
.
serverAndLoacTimeDistanc
=
GlobalConfig
.
serverAndLoacTimeDistanc
;
joinClassSuccessCallBackData
.
serverAndLoacTimeDistanc
=
GlobalConfig
.
serverAndLoacTimeDistanc
;
loger
.
log
(
'加入课堂成功->'
);
loger
.
log
(
joinClassSuccessCallBackData
);
...
...
@@ -946,11 +951,17 @@ export default class MessageEntrance extends Emiter {
loger
.
log
(
'删除文档成功->'
,
_param
);
this
.
_sendDocumentDelete
(
_param
);
}
_sassDeleteMediaShareSuccess
(
_param
)
{
loger
.
log
(
'删除媒体文件成功->'
,
_param
);
this
.
_sendMediaSharedDelete
(
_param
);
}
_sassDeleteMusicShareSuccess
(
_param
)
{
loger
.
log
(
'删除Music文件成功->'
,
_param
);
this
.
_sendMusicSharedDelete
(
_param
);
}
//ConferApe
//开始上课
_sendStartClass
(
_param
)
{
...
...
@@ -1189,7 +1200,7 @@ export default class MessageEntrance extends Emiter {
// if(GlobalConfig.classType==ApeConsts.CLASS_TYPE_2&&GlobalConfig.videoCDNAddrList.length>0){
//20170629-直播课堂和移动端设备的时候支持
if
(
GlobalConfig
.
classType
==
ApeConsts
.
CLASS_TYPE_2
||
GlobalConfig
.
isMobile
)
{
if
(
GlobalConfig
.
classType
==
ApeConsts
.
CLASS_TYPE_2
||
GlobalConfig
.
isMobile
)
{
if
(
GlobalConfig
.
videoCDNAddrList
.
length
>
0
)
{
//videoCDNAddrList中rtmppush和hls是混在一起的,需要分离开;
let
listLen
=
GlobalConfig
.
videoCDNAddrList
.
length
;
...
...
@@ -1210,9 +1221,9 @@ export default class MessageEntrance extends Emiter {
}
}
}
else
{
loger
.
error
(
'videoCDNAddr数据无效->'
,
GlobalConfig
.
videoCDNAddr
);
loger
.
error
(
'videoCDNAddr数据无效->'
,
GlobalConfig
.
videoCDNAddr
);
}
}
else
{
}
else
{
loger
.
warn
(
'非直播课堂或不是移动端->不需要videoCDN加速'
);
}
...
...
@@ -1675,7 +1686,33 @@ export default class MessageEntrance extends Emiter {
}
}
//删除
// 删除Music
_sassDeletMusicShare
(
_param
)
{
if
(
!
_mcu
.
connected
)
{
loger
.
warn
(
GlobalConfig
.
getCurrentStatus
());
return
;
}
//判断传入的参数是否存在
if
(
_param
==
null
||
EngineUtils
.
isEmptyObject
(
_param
))
{
loger
.
error
(
'删除媒体文件失败->参数错误'
,
_param
);
this
.
_emit
(
MessageTypes
.
MCU_ERROR
,
MessageTypes
.
ERR_MUSICSHARE_DELETE_FAILED_PARAM
);
return
;
}
//判断必要的参数字段值
if
(
_param
.
itemIdx
==
null
||
isNaN
(
_param
.
itemIdx
)
||
_param
.
fileId
==
null
||
_param
.
fileId
==
""
)
{
loger
.
error
(
'删除媒体文件失败->'
,
_param
);
this
.
_emit
(
MessageTypes
.
MCU_ERROR
,
MessageTypes
.
ERR_MUSICSHARE_DELETE_FAILED_PARAM
);
return
;
}
loger
.
log
(
'删除媒体文件->'
,
_param
);
if
(
_sass
)
{
_sass
.
sassDeletMusicShare
(
_param
);
}
}
//删除媒体
_sendMediaSharedDelete
(
_param
)
{
if
(
!
_mcu
.
connected
)
{
loger
.
warn
(
GlobalConfig
.
getCurrentStatus
());
...
...
@@ -1686,6 +1723,17 @@ export default class MessageEntrance extends Emiter {
}
}
//删除媒体
_sendMusicSharedDelete
(
_param
)
{
if
(
!
_mcu
.
connected
)
{
loger
.
warn
(
GlobalConfig
.
getCurrentStatus
());
return
;
}
if
(
_musicShareApe
)
{
_musicShareApe
.
musicSharedDelete
(
_param
);
}
}
//音乐更新
_sendMusicSharedUpdate
(
_param
)
{
if
(
!
_mcu
.
connected
)
{
...
...
@@ -1934,7 +1982,7 @@ export default class MessageEntrance extends Emiter {
joinClassSuccessCallBackData
.
ssTunnelAppURL
=
GlobalConfig
.
ssTunnelAppURL
;
joinClassSuccessCallBackData
.
currentSceneTableId
=
GlobalConfig
.
currentSceneTableId
;
//文档区域的模块显示
joinClassSuccessCallBackData
.
serverAndLoacTimeDistanc
=
GlobalConfig
.
serverAndLoacTimeDistanc
;
joinClassSuccessCallBackData
.
serverAndLoacTimeDistanc
=
GlobalConfig
.
serverAndLoacTimeDistanc
;
loger
.
log
(
joinClassSuccessCallBackData
);
//和加入课堂成功使用同样的消息处理
this
.
_emit
(
MessageTypes
.
CLASS_JOIN_SUCCESS
,
joinClassSuccessCallBackData
);
...
...
src/MessageTypes.js
查看文件 @
6b91264
...
...
@@ -89,6 +89,10 @@ MessageTypes.DOC_BROADCAST = "doc_broadcast"; //
MessageTypes
.
MEDIA_SHARED_DELETE
=
"media_shared_delete"
;
//删除媒体文件
MessageTypes
.
MEDIA_SHARED_UPDATE
=
"media_shared_update"
;
//更新媒体文件(添加、变更)
//音频共享
MessageTypes
.
MUSIC_SHARED_DELETE
=
"music_shared_delete"
;
//删除音频文件
MessageTypes
.
MUSIC_SHARED_UPDATE
=
"music_shared_update"
;
//更新音频文件(添加、变更)
//答题卡和点名共用
MessageTypes
.
START_ANSWER_QUESTION
=
"start_answer_question"
;
//开始答题
MessageTypes
.
UPDATE_ANSWER_QUESTION
=
"update_answer_question"
;
//更新答题数据
...
...
@@ -151,6 +155,10 @@ MessageTypes.ERR_SDK_FAILED = 700; // sdk还没初始化
MessageTypes
.
ERR_INTERFACE_NONE
=
701
;
//调用的接口不存在
MessageTypes
.
ERR_INTERFACE_PARAMS_ERROR
=
702
;
//调用的接口,传递的参数不正确
//音频共享
MessageTypes
.
ERR_MUSICSHARE_DELETE_FAILED
=
720
;
//删除媒体共享文件失败
MessageTypes
.
ERR_MUSICSHARE_DELETE_FAILED_PARAM
=
721
;
//删除媒体共享文件,参数错误
MessageTypes
.
ERR_INIT_RECORD_PLAY_BACK_FAILED
=
910
;
//初始化录制回放失败
MessageTypes
.
ERR_GET_RECORD_PLAY_BACK_DATA_FAILED
=
911
;
//获取录制回放数据失败
...
...
src/Sass.js
查看文件 @
6b91264
...
...
@@ -234,7 +234,7 @@ class Sass extends Emiter {
meetingNumber String 课堂号 对应的是classId
*/
var
timestamp
=
new
Date
().
getTime
();
var
authId
=
MD5
(
GlobalConfig
.
classId
+
""
+
timestamp
);
//课堂号+时间戳 的字符串,转成MD5
var
authId
=
MD5
(
GlobalConfig
.
classId
+
""
+
timestamp
);
//课堂号+时间戳 的字符串,转成MD5
let
url
=
`
http
:
//${GlobalConfig.portal}/3m/api/meeting/detail.do?meetingNumber=${GlobalConfig.classId}×tamp=${timestamp}&authId=${authId}`;
loger
.
log
(
'5.获取课堂课堂的完整信息 '
);
loger
.
log
(
url
);
...
...
@@ -279,12 +279,12 @@ class Sass extends Emiter {
0 成功, 1 验证信息错误
*/
sassDeleteDocument
(
_param
)
{
if
(
GlobalConfig
.
isRecordPlayBack
)
{
if
(
GlobalConfig
.
isRecordPlayBack
)
{
loger
.
log
(
'录制回放中,能删除文档'
);
return
;
}
var
timestamp
=
new
Date
().
getTime
();
var
authId
=
MD5
(
_param
.
docId
+
""
+
_param
.
classId
+
""
+
timestamp
);
// docId+classId+timestamp的字符串,转成MD5
var
authId
=
MD5
(
_param
.
docId
+
""
+
_param
.
classId
+
""
+
timestamp
);
// docId+classId+timestamp的字符串,转成MD5
let
url
=
`
http
:
//${GlobalConfig.portal}/3m/api/document/deleteRelation.do?docId=${_param.docId}&classId=${GlobalConfig.classId}×tamp=${timestamp}&authId=${authId}`;
loger
.
log
(
'sassDeleteDocument'
,
url
);
...
...
@@ -316,14 +316,55 @@ class Sass extends Emiter {
});
}
//删除Music共享文件
sassDeletMusicShare
(
_param
)
{
if
(
GlobalConfig
.
isRecordPlayBack
)
{
loger
.
log
(
'录制回放中,能删除文件'
);
return
;
}
console
.
warn
(
'删除Music共享实现...'
);
var
timestamp
=
new
Date
().
getTime
();
var
authId
=
MD5
(
_param
.
fileId
+
""
+
_param
.
classId
+
""
+
timestamp
);
// docId+classId+timestamp的字符串,转成MD5
let
url
=
`
http
:
//${GlobalConfig.portal}/3m/api/media/deleteRelation.do?mediaId=${_param.fileId}&classId=${GlobalConfig.classId}×tamp=${timestamp}&authId=${authId}`;
loger
.
log
(
'删除媒体共享文件'
,
url
);
fetch
(
url
,
{
timeout
:
5000
})
.
then
(
ret
=>
{
if
(
ret
.
ok
)
{
return
ret
.
json
();
}
else
{
loger
.
error
(
`删除媒体共享文件
-
网络异常
.
状态码
:
$
{
ret
.
status
}
`
);
this
.
_emit
(
MessageTypes
.
MCU_ERROR
,
MessageTypes
.
ERR_MUSICSHARE_DELETE_FAILED
);
throw
''
;
}
})
.
then
(
ret
=>
{
//code 0 成功, 1 验证信息错误
if
(
ret
.
code
===
0
)
{
loger
.
log
(
'删除媒体共享文件 完成'
);
this
.
_emit
(
Sass
.
DELETE_MUSICSHARE_SUCCESS
,
_param
);
}
else
{
loger
.
warn
(
'删除媒体共享文件 失败.'
);
this
.
_emit
(
MessageTypes
.
MCU_ERROR
,
MessageTypes
.
ERR_MUSICSHARE_DELETE_FAILED
);
}
})
.
catch
(
err
=>
{
loger
.
error
(
`删除媒体共享文件
-
异常
.
状态码
:
$
{
err
}
`
);
this
.
_emit
(
MessageTypes
.
MCU_ERROR
,
MessageTypes
.
ERR_MUSICSHARE_DELETE_FAILED
);
});
}
//删除媒体共享文件
sassDeletMediaShare
(
_param
)
{
if
(
GlobalConfig
.
isRecordPlayBack
)
{
if
(
GlobalConfig
.
isRecordPlayBack
)
{
loger
.
log
(
'录制回放中,能删除文件'
);
return
;
}
var
timestamp
=
new
Date
().
getTime
();
var
authId
=
MD5
(
_param
.
fileId
+
""
+
_param
.
classId
+
""
+
timestamp
);
// docId+classId+timestamp的字符串,转成MD5
var
authId
=
MD5
(
_param
.
fileId
+
""
+
_param
.
classId
+
""
+
timestamp
);
// docId+classId+timestamp的字符串,转成MD5
let
url
=
`
http
:
//${GlobalConfig.portal}/3m/api/sharedMedia/deleteRelation.do?fileId=${_param.fileId}&classId=${GlobalConfig.classId}×tamp=${timestamp}&authId=${authId}`;
loger
.
log
(
'删除媒体共享文件'
,
url
);
...
...
@@ -356,7 +397,6 @@ class Sass extends Emiter {
});
}
//保存课堂的当前信息-----------------------------------------------------
/*保存课堂的当前信息,首次是插入,后面是更新
/api/meeting/saveInfo.do
...
...
@@ -370,13 +410,13 @@ class Sass extends Emiter {
code 0 成功 1 课堂号为空 2 无效的课堂号 3 验证信息错误*/
saveClassStatusInfo
(
_param
)
{
if
(
GlobalConfig
.
isRecordPlayBack
)
{
if
(
GlobalConfig
.
isRecordPlayBack
)
{
loger
.
log
(
'录制回放中,不需要保存课堂信息'
);
return
;
}
//{"classStatusInfo":classStatusInfo}
var
timestamp
=
new
Date
().
getTime
();
var
authId
=
MD5
(
GlobalConfig
.
classId
+
""
+
timestamp
);
// (classId+timestamp)的字符串,转成MD5
var
authId
=
MD5
(
GlobalConfig
.
classId
+
""
+
timestamp
);
// (classId+timestamp)的字符串,转成MD5
let
classStatusInfo
=
JSON
.
stringify
(
_param
.
classStatusInfo
);
let
url
=
`
http
:
//${GlobalConfig.portal}/3m/api/meeting/saveInfo.do`;
loger
.
log
(
'saveClassStatusInfo'
,
url
);
...
...
@@ -420,7 +460,7 @@ class Sass extends Emiter {
//保存录制的信息,主要是录制文件的名称,必须和MCU录制的文件名相同
saveClassRecordContrlInfo
(
_param
)
{
if
(
GlobalConfig
.
isRecordPlayBack
)
{
if
(
GlobalConfig
.
isRecordPlayBack
)
{
loger
.
log
(
'录制回放中,不需要保存'
);
return
;
}
...
...
@@ -445,7 +485,7 @@ class Sass extends Emiter {
let
url
=
`
http
:
//${GlobalConfig.portal}/3m/recordingMeeting/insertRecordingMeeting.do`;
loger
.
log
(
'saveClassRecordContrlInfo'
,
url
);
fetch
(
encodeURI
(
url
),
{
fetch
(
encodeURI
(
url
),
{
method
:
'POST'
,
headers
:
{
"Content-Type"
:
"application/x-www-form-urlencoded"
...
...
@@ -475,11 +515,10 @@ class Sass extends Emiter {
});
}
//答题卡-------------------------------------------------------
//创建答题数据
creatQuestion
(
_param
){
if
(
GlobalConfig
.
isRecordPlayBack
){
creatQuestion
(
_param
)
{
if
(
GlobalConfig
.
isRecordPlayBack
)
{
loger
.
log
(
'录制回放中->创建答题数据->不做操作'
);
return
;
}
...
...
@@ -491,17 +530,17 @@ class Sass extends Emiter {
"options": {},//选项数组,没有就传[]
"option": []//学生选择的答案,没有就传[]
}*/
if
(
!
_param
){
loger
.
warn
(
'创建答题数据->参数错误->param:'
,
_param
);
if
(
!
_param
)
{
loger
.
warn
(
'创建答题数据->参数错误->param:'
,
_param
);
this
.
_emit
(
Sass
.
SASS_CREAT_QUESTION_FAILED
);
return
;
}
let
classId
=
GlobalConfig
.
classId
;
//课堂号
let
classId
=
GlobalConfig
.
classId
;
//课堂号
var
timestamp
=
new
Date
().
getTime
();
let
authId
=
MD5
(
classId
+
""
+
timestamp
);
let
authId
=
MD5
(
classId
+
""
+
timestamp
);
let
type
=
parseInt
(
_param
.
type
);
//1单选,2多选,3判断,4点名
let
content
=
_param
.
content
||
""
;
let
type
=
parseInt
(
_param
.
type
);
//1单选,2多选,3判断,4点名
let
content
=
_param
.
content
||
""
;
let
timeLimit
=
parseInt
(
_param
.
timeLimit
);
let
correct
=
_param
.
correct
.
toString
();
let
options
=
JSON
.
stringify
(
_param
.
options
);
...
...
@@ -509,7 +548,7 @@ class Sass extends Emiter {
let
url
=
`
http
:
//${GlobalConfig.portal}/3m/api/question/add.do`;
loger
.
log
(
'创建答题数据'
,
url
);
fetch
(
encodeURI
(
url
),
{
fetch
(
encodeURI
(
url
),
{
method
:
'POST'
,
headers
:
{
"Content-Type"
:
"application/x-www-form-urlencoded; charset=utf-8"
...
...
@@ -529,17 +568,17 @@ class Sass extends Emiter {
}
})
.
then
(
ret
=>
{
if
(
ret
.
code
==
0
)
{
if
(
ret
.
code
==
0
)
{
//errorCode int 0 正常 1 没有指定的课堂 4 验证信息错误(authId)
// {"code":0,"id":1}
let
question
=
{};
question
.
questionId
=
ret
.
id
;
question
.
type
=
type
;
question
.
content
=
_param
.
content
||
[];
question
.
timeLimit
=
timeLimit
;
question
.
correct
=
_param
.
correct
||
[];
question
.
options
=
_param
.
options
||
[];
loger
.
log
(
'创建答题数据->完成->'
,
question
);
let
question
=
{};
question
.
questionId
=
ret
.
id
;
question
.
type
=
type
;
question
.
content
=
_param
.
content
||
[];
question
.
timeLimit
=
timeLimit
;
question
.
correct
=
_param
.
correct
||
[];
question
.
options
=
_param
.
options
||
[];
loger
.
log
(
'创建答题数据->完成->'
,
question
);
this
.
_emit
(
Sass
.
SASS_CREAT_QUESTION_SUCCESS
,
question
);
}
else
{
loger
.
warn
(
'创建答题数据->失败.'
,
ret
);
...
...
@@ -552,13 +591,13 @@ class Sass extends Emiter {
});
}
//保存答题数据
sendAnswer
(
_param
){
if
(
GlobalConfig
.
isRecordPlayBack
){
sendAnswer
(
_param
)
{
if
(
GlobalConfig
.
isRecordPlayBack
)
{
loger
.
log
(
'录制回放中->保存答题数据->不做操作'
);
return
;
}
if
(
!
_param
){
loger
.
warn
(
'保存答题数据->参数错误->param:'
,
_param
);
if
(
!
_param
)
{
loger
.
warn
(
'保存答题数据->参数错误->param:'
,
_param
);
this
.
_emit
(
Sass
.
SASS_SEND_ANSWER_FAILED
);
return
;
}
...
...
@@ -571,13 +610,13 @@ class Sass extends Emiter {
userId String 用户id
userName String 用户名字*/
let
classId
=
GlobalConfig
.
classId
;
//课堂号
let
classId
=
GlobalConfig
.
classId
;
//课堂号
var
timestamp
=
new
Date
().
getTime
();
let
authId
=
MD5
(
classId
+
""
+
timestamp
);
let
authId
=
MD5
(
classId
+
""
+
timestamp
);
let
type
=
parseInt
(
_param
.
type
);
//1单选,2多选,3判断,4点名
let
type
=
parseInt
(
_param
.
type
);
//1单选,2多选,3判断,4点名
let
questionId
=
parseInt
(
_param
.
questionId
);
//题目id
let
questionId
=
parseInt
(
_param
.
questionId
);
//题目id
let
answer
=
_param
.
answer
.
toString
();
let
userId
=
_param
.
userId
;
let
userName
=
_param
.
userName
;
...
...
@@ -585,7 +624,7 @@ class Sass extends Emiter {
let
url
=
`
http
:
//${GlobalConfig.portal}/3m/api/question/answer.do`;
loger
.
log
(
'保存答题数据'
,
url
);
fetch
(
encodeURI
(
url
),
{
fetch
(
encodeURI
(
url
),
{
method
:
'POST'
,
headers
:
{
"Content-Type"
:
"application/x-www-form-urlencoded; charset=utf-8"
...
...
@@ -605,10 +644,10 @@ class Sass extends Emiter {
}
})
.
then
(
ret
=>
{
if
(
ret
.
code
==
0
)
{
if
(
ret
.
code
==
0
)
{
// 0 正常 1 没有指定的课堂 4 验证信息错误(authId) 5 没有指定的题目 6 题目不属于该课堂
//{"code":0}
let
question
=
_param
;
let
question
=
_param
;
loger
.
log
(
'保存答题数据->完成'
);
this
.
_emit
(
Sass
.
SASS_SEND_ANSWER_SUCCESS
,
question
);
}
else
{
...
...
@@ -622,23 +661,23 @@ class Sass extends Emiter {
});
}
//查询题目数据
getQuestion
(
_param
){
if
(
GlobalConfig
.
isRecordPlayBack
){
getQuestion
(
_param
)
{
if
(
GlobalConfig
.
isRecordPlayBack
)
{
loger
.
log
(
'录制回放中->查询题目数据->不做操作'
);
return
;
}
if
(
!
_param
){
loger
.
warn
(
'查询题目数据->参数错误->param:'
,
_param
);
if
(
!
_param
)
{
loger
.
warn
(
'查询题目数据->参数错误->param:'
,
_param
);
this
.
_emit
(
Sass
.
SASS_GET_QUESTION_FAILED
);
return
;
}
//questionId long 题目id
let
questionId
=
parseInt
(
_param
.
questionId
);
//题目id
let
questionId
=
parseInt
(
_param
.
questionId
);
//题目id
let
url
=
`
http
:
//${GlobalConfig.portal}/3m/api/question/get.do`;
loger
.
log
(
'查询题目数据'
,
url
);
//接口中用的是GET
fetch
(
encodeURI
(
url
),
{
fetch
(
encodeURI
(
url
),
{
method
:
'POST'
,
headers
:
{
"Content-Type"
:
"application/x-www-form-urlencoded; charset=utf-8"
...
...
@@ -657,16 +696,16 @@ class Sass extends Emiter {
}
})
.
then
(
ret
=>
{
if
(
ret
.
code
==
0
)
{
if
(
ret
.
code
==
0
)
{
//0 正常 5 没有指定的题目
//{"timeLimit":90,"code":0,"options":"[\"A\",\"B\",\"C\"]","id":22,"type":2,"content":"题目"}
loger
.
log
(
'查询题目数据->完成'
);
let
question
=
{};
question
.
questionId
=
ret
.
id
||
questionId
;
question
.
type
=
ret
.
type
;
question
.
timeLimit
=
ret
.
timeLimit
;
question
.
options
=
ret
.
options
;
question
.
content
=
ret
.
content
;
let
question
=
{};
question
.
questionId
=
ret
.
id
||
questionId
;
question
.
type
=
ret
.
type
;
question
.
timeLimit
=
ret
.
timeLimit
;
question
.
options
=
ret
.
options
;
question
.
content
=
ret
.
content
;
this
.
_emit
(
Sass
.
SASS_GET_QUESTION_SUCCESS
,
question
);
}
else
{
...
...
@@ -680,23 +719,23 @@ class Sass extends Emiter {
});
}
//查询答题结果数据
getQuestionResult
(
_param
){
if
(
GlobalConfig
.
isRecordPlayBack
){
getQuestionResult
(
_param
)
{
if
(
GlobalConfig
.
isRecordPlayBack
)
{
loger
.
log
(
'录制回放中->查询答题结果数据->不做操作'
);
return
;
}
if
(
!
_param
){
loger
.
warn
(
'查询答题结果数据->参数错误->param:'
,
_param
);
if
(
!
_param
)
{
loger
.
warn
(
'查询答题结果数据->参数错误->param:'
,
_param
);
this
.
_emit
(
Sass
.
SASS_GET_QUESTION_RESULT_FAILED
);
return
;
}
//questionId long 题目id
let
questionId
=
parseInt
(
_param
.
questionId
);
//题目id
let
questionId
=
parseInt
(
_param
.
questionId
);
//题目id
let
url
=
`
http
:
//${GlobalConfig.portal}/3m/api/question/results.do`;
loger
.
log
(
'查询答题结果数据'
,
url
);
fetch
(
encodeURI
(
url
),
{
fetch
(
encodeURI
(
url
),
{
method
:
'POST'
,
headers
:
{
"Content-Type"
:
"application/x-www-form-urlencoded; charset=utf-8"
...
...
@@ -715,7 +754,7 @@ class Sass extends Emiter {
}
})
.
then
(
ret
=>
{
if
(
ret
.
code
==
0
)
{
if
(
ret
.
code
==
0
)
{
//int 0 正常5 没有指定的题目
/* list array 数组
userId string 用户id
...
...
@@ -724,9 +763,9 @@ class Sass extends Emiter {
{"timeLimit":0,"content":"test question","id":11,"code":0,"type":3,"options":"["True", "False"]"}*/
loger
.
log
(
'查询答题结果数据->完成'
);
let
result
=
_param
||
{};
result
.
questionId
=
questionId
;
result
.
list
=
ret
.
list
;
let
result
=
_param
||
{};
result
.
questionId
=
questionId
;
result
.
list
=
ret
.
list
;
this
.
_emit
(
Sass
.
SASS_GET_QUESTION_RESULT_SUCCESS
,
result
);
}
else
{
loger
.
warn
(
'查询答题结果数据->失败.'
,
ret
);
...
...
@@ -746,24 +785,25 @@ Sass.prototype.SUCCESS = Sass.SUCCESS = 'Sass_success';
Sass
.
prototype
.
CLASS_INIT_SUCCESS
=
Sass
.
CLASS_INIT_SUCCESS
=
'sass_class_init_success'
;
Sass
.
prototype
.
CLASS_GET_CLASS_PARAM
=
Sass
.
CLASS_GET_CLASS_PARAM
=
'sass_class_getClassParam.message'
;
Sass
.
prototype
.
CLASS_GET_CLASS_DETAIL
=
Sass
.
CLASS_GET_CLASS_DETAIL
=
'sass_class_getClassDetail_message'
;
Sass
.
prototype
.
DELETE_DOCUMENT_SUCCESS
=
Sass
.
DELETE_DOCUMENT_SUCCESS
=
'sass_class_deleteDocumentSuccess_message'
;
//删除文档成功
Sass
.
prototype
.
DELETE_MEDIASHARE_SUCCESS
=
Sass
.
DELETE_MEDIASHARE_SUCCESS
=
'sass_class_deleteMediaShareSuccess_message'
;
//删除文档成功
Sass
.
prototype
.
DELETE_DOCUMENT_SUCCESS
=
Sass
.
DELETE_DOCUMENT_SUCCESS
=
'sass_class_deleteDocumentSuccess_message'
;
//删除文档成功
Sass
.
prototype
.
DELETE_MEDIASHARE_SUCCESS
=
Sass
.
DELETE_MEDIASHARE_SUCCESS
=
'sass_class_deleteMediaShareSuccess_message'
;
//删除文档成功
Sass
.
prototype
.
DELETE_MUSICSHARE_SUCCESS
=
Sass
.
DELETE_MUSICSHARE_SUCCESS
=
'sass_class_deleteMusicShareSuccess_message'
;
//删除文档成功
Sass
.
prototype
.
CLASS_SAVE_STATUS_INFO_SUCCESS
=
Sass
.
CLASS_SAVE_STATUS_INFO_SUCCESS
=
'sass_class_saveClassStatusInfoSuccess_message'
;
//保存课堂状态信息
Sass
.
prototype
.
CLASS_SAVE_RECORD_INFO_SUCCESS
=
Sass
.
CLASS_SAVE_RECORD_INFO_SUCCESS
=
'sass_class_saveClassRecordInfoSuccess_message'
;
//保存录制课堂信息
Sass
.
prototype
.
CLASS_SAVE_STATUS_INFO_SUCCESS
=
Sass
.
CLASS_SAVE_STATUS_INFO_SUCCESS
=
'sass_class_saveClassStatusInfoSuccess_message'
;
//保存课堂状态信息
Sass
.
prototype
.
CLASS_SAVE_RECORD_INFO_SUCCESS
=
Sass
.
CLASS_SAVE_RECORD_INFO_SUCCESS
=
'sass_class_saveClassRecordInfoSuccess_message'
;
//保存录制课堂信息
//答题卡和点名
Sass
.
prototype
.
SASS_CREAT_QUESTION_SUCCESS
=
Sass
.
SASS_CREAT_QUESTION_SUCCESS
=
'sass_creat_question_success'
;
//创建答题卡问题成功
Sass
.
prototype
.
SASS_CREAT_QUESTION_FAILED
=
Sass
.
SASS_CREAT_QUESTION_FAILED
=
'sass_creat_question_failed'
;
//创建答题卡失败
Sass
.
prototype
.
SASS_CREAT_QUESTION_SUCCESS
=
Sass
.
SASS_CREAT_QUESTION_SUCCESS
=
'sass_creat_question_success'
;
//创建答题卡问题成功
Sass
.
prototype
.
SASS_CREAT_QUESTION_FAILED
=
Sass
.
SASS_CREAT_QUESTION_FAILED
=
'sass_creat_question_failed'
;
//创建答题卡失败
Sass
.
prototype
.
SASS_GET_QUESTION_SUCCESS
=
Sass
.
SASS_GET_QUESTION_SUCCESS
=
'sass_get_question_success'
;
//获取问题成功
Sass
.
prototype
.
SASS_GET_QUESTION_FAILED
=
Sass
.
SASS_GET_QUESTION_FAILED
=
'sass_get_question_failed'
;
//获取问题失败
Sass
.
prototype
.
SASS_GET_QUESTION_SUCCESS
=
Sass
.
SASS_GET_QUESTION_SUCCESS
=
'sass_get_question_success'
;
//获取问题成功
Sass
.
prototype
.
SASS_GET_QUESTION_FAILED
=
Sass
.
SASS_GET_QUESTION_FAILED
=
'sass_get_question_failed'
;
//获取问题失败
Sass
.
prototype
.
SASS_GET_QUESTION_RESULT_SUCCESS
=
Sass
.
SASS_GET_QUESTION_RESULT_SUCCESS
=
'sass_get_question_result_success'
;
//获取问题结果成功
Sass
.
prototype
.
SASS_GET_QUESTION_RESULT_FAILED
=
Sass
.
SASS_GET_QUESTION_RESULT_FAILED
=
'sass_get_question_result_failed'
;
//获取问题结果失败
Sass
.
prototype
.
SASS_GET_QUESTION_RESULT_SUCCESS
=
Sass
.
SASS_GET_QUESTION_RESULT_SUCCESS
=
'sass_get_question_result_success'
;
//获取问题结果成功
Sass
.
prototype
.
SASS_GET_QUESTION_RESULT_FAILED
=
Sass
.
SASS_GET_QUESTION_RESULT_FAILED
=
'sass_get_question_result_failed'
;
//获取问题结果失败
Sass
.
prototype
.
SASS_SEND_ANSWER_SUCCESS
=
Sass
.
SASS_SEND_ANSWER_SUCCESS
=
'sass_send_answer_success'
;
//保存答案成功
Sass
.
prototype
.
SASS_SEND_ANSWER_FAILED
=
Sass
.
SASS_SEND_ANSWER_FAILED
=
'sass_send_answer_failed'
;
//保存答案失败
Sass
.
prototype
.
SASS_SEND_ANSWER_SUCCESS
=
Sass
.
SASS_SEND_ANSWER_SUCCESS
=
'sass_send_answer_success'
;
//保存答案成功
Sass
.
prototype
.
SASS_SEND_ANSWER_FAILED
=
Sass
.
SASS_SEND_ANSWER_FAILED
=
'sass_send_answer_failed'
;
//保存答案失败
export
default
new
Sass
;
...
...
src/apes/ConferApe.js
查看文件 @
6b91264
...
...
@@ -95,7 +95,7 @@ class ConferApe extends Ape {
getNodeInfo
()
{
let
nodeInfoRecordPdu
=
new
pdu
[
'RCNodeInfoRecordPdu'
];
nodeInfoRecordPdu
.
nodeId
=
GlobalConfig
.
nodeId
;
nodeInfoRecordPdu
.
selfSilence
=
JSON
.
stringify
(
GlobalConfig
.
selfSilence
)
||
""
;
nodeInfoRecordPdu
.
selfSilence
=
JSON
.
stringify
(
GlobalConfig
.
selfSilence
)
||
""
;
nodeInfoRecordPdu
.
name
=
GlobalConfig
.
userName
;
nodeInfoRecordPdu
.
role
=
ApeConsts
.
userTypesToId
[
GlobalConfig
.
userRole
]
||
1
;
//NR_NORMAL用户的身份,根据用户登录时的身份设置;
nodeInfoRecordPdu
.
level
=
GlobalConfig
.
level
;
...
...
@@ -333,11 +333,11 @@ class ConferApe extends Ape {
// 全局禁言
silenceClass
(
params
)
{
if
(
GlobalConfig
.
isHost
)
{
if
(
!
GlobalConfig
.
isNormal
)
{
//同步禁言状态
this
.
sendUpdaterClassStatusInfo
(
params
);
}
else
{
loger
.
warn
(
'
没有开始课堂的
权限'
);
loger
.
warn
(
'
老师/监客拥有改
权限'
);
}
}
...
...
@@ -415,13 +415,13 @@ class ConferApe extends Ape {
}
let
msgObj
=
{};
msgObj
.
nodeId
=
_param
.
nodeId
;
msgObj
.
silence
=
_param
.
silence
||
{};
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
||
{};
GlobalConfig
.
selfSilence
=
_param
.
silence
||
{};
this
.
updateUserInfo
();
}
...
...
src/apes/CursorApe.js
查看文件 @
6b91264
...
...
@@ -8,7 +8,7 @@
// Author: AlexWang
// Date: 2016-08-26 17:36:20
// QQ Email: 1669499355@qq.com
// Last Modified time: 2017-06-2
7 18:13:39
// Last Modified time: 2017-06-2
9 14:09:25
// Description: LiveClass-CursorApe
//
// //////////////////////////////////////////////////////////////////////////////
...
...
@@ -54,7 +54,7 @@ class CursorApe extends Ape {
return
;
}
let
itemIdx
=
EngineUtils
.
creatSoleNumberFromTimestamp
();
//创建时间戳,保证每条数据的唯一
let
itemIdx
=
ApeConsts
.
CURSOR_OBJ_TABLE_ID
;
let
cursorModelPdu
=
this
.
packPdu
(
_param
,
itemIdx
);
if
(
cursorModelPdu
==
null
)
{
loger
.
warn
(
'添加标注失败-->参数错误->'
,
_param
);
...
...
@@ -68,13 +68,14 @@ class CursorApe extends Ape {
tableItemPdu
.
owner
=
0
;
//收到flash的是这个值,不清楚先写固定
tableItemPdu
.
itemData
=
cursorModelPdu
.
toArrayBuffer
();
//insert
let
tableInsertItemPdu
=
new
pdu
[
'RCRegistryTableInsertItemPdu'
];
tableInsertItemPdu
.
type
=
pdu
.
RCPDU_REG_TABLE_INSERT_PDU
;
//
let
tableInsertItemPdu
=
new
pdu
[
'RCRegistryTableUpdateItemPdu'
];
//optional RCPduType_E type = 1 [default = RCPDU_REG_TABLE_UPDATE_PDU];
//repeated RCRegistryTableItemPdu items = 2;
tableInsertItemPdu
.
type
=
pdu
.
RCPDU_REG_TABLE_UPDATE_PDU
;
//
tableInsertItemPdu
.
items
.
push
(
tableItemPdu
);
let
updateObjPdu
=
new
pdu
[
'RCRegistryUpdateObjPdu'
];
updateObjPdu
.
objId
=
ApeConsts
.
CURSOR_OBJ_TABLE_ID
;
updateObjPdu
.
objId
=
ApeConsts
.
DOCSHARING_OBJ_TABLE_ID
;
// updateObjPdu.objId = ApeConsts.DOCSHARING_OBJ_TABLE_ID_H5
;
updateObjPdu
.
subType
=
tableInsertItemPdu
.
type
;
updateObjPdu
.
userData
=
tableInsertItemPdu
.
toArrayBuffer
();
...
...
@@ -87,14 +88,14 @@ class CursorApe extends Ape {
adapterPdu
.
type
=
pdu
.
RCPDU_REG_ADAPTER
;
adapterPdu
.
item
.
push
(
adapterItemPdu
);
loger
.
log
(
"
添加标注->
itemIdx="
+
tableItemPdu
.
itemIdx
);
loger
.
log
(
"
发送更新.
itemIdx="
+
tableItemPdu
.
itemIdx
);
this
.
sendUniform
(
adapterPdu
,
true
);
}
/////鼠标数据接受/////////////////////////////////////////////////////////////////////////////////
table
Insert
Handler
(
owner
,
itemIdx
,
itemData
)
{
table
Update
Handler
(
owner
,
itemIdx
,
itemData
)
{
let
cursorModel
=
this
.
unPackPdu
(
owner
,
itemIdx
,
itemData
);
loger
.
log
(
'table
Insert
Handler'
,
"activeDocId->"
,
GlobalConfig
.
activeDocId
,
"parentId->"
,
cursorModel
.
parentId
);
loger
.
log
(
'table
Update
Handler'
,
"activeDocId->"
,
GlobalConfig
.
activeDocId
,
"parentId->"
,
cursorModel
.
parentId
);
loger
.
log
(
cursorModel
);
if
(
cursorModel
)
{
this
.
_emit
(
MessageTypes
.
CURSOR_UPDATE
,
cursorModel
);
...
...
@@ -131,8 +132,8 @@ class CursorApe extends Ape {
unPackPdu
(
owner
,
itemIdx
,
itemData
)
{
try
{
loger
.
log
(
"鼠标标注数据->unPackPdu"
);
let
cursorModelPdu
=
pdu
[
'RCCursorDataModelPdu'
].
decode
(
itemData
);
let
_pointGroup
=
EngineUtils
.
arrayFromJsonString
(
cursorModelPdu
.
pointGroup
);
const
cursorModelPdu
=
pdu
[
'RCCursorDataModelPdu'
].
decode
(
itemData
);
const
_pointGroup
=
EngineUtils
.
arrayFromJsonString
(
cursorModelPdu
.
pointGroup
);
cursorModelPdu
.
pointGroup
=
_pointGroup
;
return
cursorModelPdu
;
}
catch
(
err
)
{
...
...
src/apes/MusicSharedApe.js
查看文件 @
6b91264
...
...
@@ -102,7 +102,7 @@ class MusicSharedApe extends Ape {
adapterPdu
.
type
=
pdu
.
RCPDU_REG_ADAPTER
;
adapterPdu
.
item
.
push
(
adapterItemPdu
);
loger
.
log
(
"
媒体
文件发送删除数据=============>"
+
tableDeleteItemPdu
.
itemIdx
);
loger
.
log
(
"
MUSIC
文件发送删除数据=============>"
+
tableDeleteItemPdu
.
itemIdx
);
this
.
sendUniform
(
adapterPdu
,
true
);
}
...
...
@@ -347,7 +347,7 @@ class MusicSharedApe extends Ape {
loger
.
log
(
'添加媒体文件->设置当前激活的媒体文件id'
);
}
let
getMusicPackFullInfo
=
this
.
_musicSharedPackFullInfo
(
itemDataInfo
);
this
.
_emit
(
MessageTypes
.
M
EDIA
_SHARED_UPDATE
,
getMusicPackFullInfo
);
this
.
_emit
(
MessageTypes
.
M
USIC
_SHARED_UPDATE
,
getMusicPackFullInfo
);
}
}
//媒体文件数据更新完毕,如果当前没有显示的媒体文件,默认选择一个显示
...
...
@@ -367,7 +367,7 @@ class MusicSharedApe extends Ape {
GlobalConfig
.
activeMusicSeek
=
1
;
//当前激活的媒体文件的当前页
loger
.
log
(
'删除媒体文件数据->清除当前显示的媒体文件'
);
}
this
.
_emit
(
MessageTypes
.
M
EDIA
_SHARED_DELETE
,
{
"itemIdx"
:
itemIdxs
[
i
]
});
this
.
_emit
(
MessageTypes
.
M
USIC
_SHARED_DELETE
,
{
"itemIdx"
:
itemIdxs
[
i
]
});
delete
this
.
musicSharedList
[
itemIdxs
[
i
]];
}
}
...
...
@@ -393,7 +393,7 @@ class MusicSharedApe extends Ape {
loger
.
log
(
'更新媒体文件->设置当前激活的媒体文件id->'
,
GlobalConfig
.
activeMusicId
,
"curPageNum->"
,
GlobalConfig
.
activeMusicSeek
);
}
let
getMusicPackFullInfo
=
this
.
_musicSharedPackFullInfo
(
itemDataInfo
);
this
.
_emit
(
MessageTypes
.
M
EDIA
_SHARED_UPDATE
,
getMusicPackFullInfo
);
this
.
_emit
(
MessageTypes
.
M
USIC
_SHARED_UPDATE
,
getMusicPackFullInfo
);
}
else
{
loger
.
log
(
'更新媒体文件-> 数据无效--> itemIdx'
,
itemIdx
);
}
...
...
请
注册
或
登录
后发表评论