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
李勇
2017-01-17 12:48:40 +0800
Browse Files
Options
Browse Files
Download
Email Patches
Plain Diff
Commit
150ecd7057346c0bf2964192dd6d95f78c429a96
150ecd70
1 parent
0e920169
1.添加人员进入和人员离开的监听
2.修改变量定义命名
隐藏空白字符变更
内嵌
并排对比
正在显示
13 个修改的文件
包含
153 行增加
和
58 行删除
dist/McuClient.js
docs/McuClient API.html
docs/McuClient API.md
docs/README.md
src/EngineEntrance.js
src/Loger.js
src/MessageTypes.js
src/apes/ConferApe.js
src/apes/VideoApe.js
src/apes/WhiteBoardApe.js
src/mcu.js
src/pdus/PduConsts.js
src/pdus/PduType.js
dist/McuClient.js
查看文件 @
150ecd7
...
...
@@ -73,7 +73,7 @@ return /******/ (function(modules) { // webpackBootstrap
/******/
}
/******/
var
hotApplyOnUpdate
=
true
;
/******/
var
hotCurrentHash
=
"
6e29fc3a1208eaf1fcd2
"
;
// eslint-disable-line no-unused-vars
/******/
var
hotCurrentHash
=
"
334c795f44fe3fd40f79
"
;
// eslint-disable-line no-unused-vars
/******/
var
hotCurrentModuleData
=
{};
/******/
var
hotCurrentParents
=
[];
// eslint-disable-line no-unused-vars
...
...
@@ -788,7 +788,7 @@ return /******/ (function(modules) { // webpackBootstrap
_wb_ape
.
on
(
'*'
,
function
(
type
,
data
)
{
return
_this
.
_emit
(
type
,
data
);
});
_wb_ape
.
on
(
_MessageTypes2
.
default
.
ANNO_UPDATE
,
_this
.
annoUpdateHandler
.
bind
(
_this
));
_wb_ape
.
on
(
_MessageTypes2
.
default
.
ANNO
TATION
_UPDATE
,
_this
.
annoUpdateHandler
.
bind
(
_this
));
//公开外部调用的方法
_this
.
init
=
_this
.
_init
;
...
...
@@ -976,7 +976,7 @@ return /******/ (function(modules) { // webpackBootstrap
}
}
// 白板笔记更新
// 白板笔记更新
(svg)
},
{
key
:
'annoUpdateHandler'
,
...
...
@@ -984,7 +984,7 @@ return /******/ (function(modules) { // webpackBootstrap
var
activeDocId
=
_confer_ape
.
activeDocId
;
var
docItem
=
_doc_ape
.
docList
[
activeDocId
];
if
(
docItem
&&
annoInfo
.
id
==
docItem
.
wbid
)
{
this
.
_emit
(
_MessageTypes2
.
default
.
DOC_ANNO
,
annoInfo
);
this
.
_emit
(
_MessageTypes2
.
default
.
DOC_ANNO
TATION
,
annoInfo
);
}
}
...
...
@@ -996,9 +996,9 @@ return /******/ (function(modules) { // webpackBootstrap
loger
.
log
(
'Doc Show ->'
+
docItem
.
id
+
'|'
+
docItem
.
curPageNo
);
var
annoInfo
=
_wb_ape
.
annoInfos
[
docItem
.
wbid
];
if
(
annoInfo
)
{
this
.
_emit
(
_MessageTypes2
.
default
.
DOC_ANNO
,
annoInfo
);
this
.
_emit
(
_MessageTypes2
.
default
.
DOC_ANNO
TATION
,
annoInfo
);
}
else
{
this
.
_emit
(
_MessageTypes2
.
default
.
DOC_ANNO
);
this
.
_emit
(
_MessageTypes2
.
default
.
DOC_ANNO
TATION
);
}
}
...
...
@@ -1581,6 +1581,15 @@ return /******/ (function(modules) { // webpackBootstrap
this
.
_log
(
Loger
.
ERROR
,
msg
);
}
},
{
key
:
'data'
,
value
:
function
data
()
{
for
(
var
_len4
=
arguments
.
length
,
msg
=
Array
(
_len4
),
_key4
=
0
;
_key4
<
_len4
;
_key4
++
)
{
msg
[
_key4
]
=
arguments
[
_key4
];
}
this
.
_log
(
Loger
.
DATA
,
msg
);
}
},
{
key
:
'_log'
,
value
:
function
_log
(
type
,
msg
)
{
msg
=
JSON
.
stringify
(
msg
);
...
...
@@ -1597,6 +1606,9 @@ return /******/ (function(modules) { // webpackBootstrap
case
Loger
.
ERROR
:
console
.
error
(
logMsg
);
break
;
case
Loger
.
DATA
:
console
.
log
(
logMsg
);
break
;
}
}
}
...
...
@@ -1610,7 +1622,7 @@ return /******/ (function(modules) { // webpackBootstrap
Loger
.
ERROR
=
2
;
Loger
.
NO
=
Infinity
;
Loger
.
logLevel
=
Loger
.
LOG
;
Loger
.
DATA
=
5
;
var
_default
=
{
getLoger
:
function
getLoger
(
info
)
{
return
new
Loger
(
info
);
...
...
@@ -1621,7 +1633,8 @@ return /******/ (function(modules) { // webpackBootstrap
LOG
:
Loger
.
LOG
,
WARN
:
Loger
.
WARN
,
ERROR
:
Loger
.
ERROR
,
NO
:
Loger
.
NO
NO
:
Loger
.
NO
,
DATA
:
Loger
.
DATA
};
exports
.
default
=
_default
;
;
...
...
@@ -1676,24 +1689,28 @@ return /******/ (function(modules) { // webpackBootstrap
//会议信息和操作事件定义
MessageTypes
.
CLASS_SHOW_DETAIL
=
'class_detail.message'
;
MessageTypes
.
CLASS_SHOW_ROSTER_NUM
=
'roster_num.message'
;
MessageTypes
.
CLASS_INSERT_ROSTER
=
'roster_insert.message'
;
MessageTypes
.
CLASS_DELETE_ROSTER
=
'roster_delete.message'
;
MessageTypes
.
CLASS_EXIT
=
'class.exit'
;
//聊天模块事件定义
MessageTypes
.
CHAT_RECEIVE
=
'chat.
messag
e'
;
MessageTypes
.
CHAT_RECEIVE
=
'chat.
receiv
e'
;
//视频模块事件定义
MessageTypes
.
VIDEO_
SHOW
=
'video.messag
e'
;
MessageTypes
.
VIDEO_
RECEIVE
=
'video.receiv
e'
;
//文档模块事件定义
MessageTypes
.
DOC_SHOW
=
'document.
message
'
;
MessageTypes
.
DOC_SHOW
=
'document.
show
'
;
MessageTypes
.
DOC_SWITCH
=
'document.switch'
;
MessageTypes
.
DOC_UPDATE
=
'document.update'
;
MessageTypes
.
DOC_DEL
=
'document.delete'
;
MessageTypes
.
DOC_ANNO
=
'document.anno
'
;
//笔记
MessageTypes
.
DOC_ANNO
TATION
=
'document.annotation
'
;
//笔记
//笔记事件定义
MessageTypes
.
ANNO_UPDATE
=
'anno_update'
;
MessageTypes
.
AUDIO_SHOW
=
'audio.message'
;
MessageTypes
.
ANNOTATION_UPDATE
=
'annotation.update'
;
//音频
MessageTypes
.
AUDIO_RECEIVE
=
'audio.receive'
;
//错误事件定义
MessageTypes
.
NET_ERROR
=
'net_error'
;
...
...
@@ -2314,7 +2331,7 @@ return /******/ (function(modules) { // webpackBootstrap
var
pduMsg
=
_index2
.
default
.
create_join_class_request_pdu
(
joinRequestPdu
.
type
,
confInfo
.
nodeId
,
confInfo
.
confId
,
0
,
_ApeConsts2
.
default
.
BROADCAST_CHANNEL_ID
,
true
,
_PduConsts2
.
default
.
DP_TOP
,
confInfo
.
topNodeID
,
_PduConsts2
.
default
.
SEG_ONCE
);
pduMsg
.
set
(
"site"
,
confInfo
.
siteId
);
pduMsg
.
set
(
"site"
,
confInfo
.
siteId
);
//课堂号对应的名称
pduMsg
.
set
(
"userId"
,
confInfo
.
userId
);
pduMsg
.
set
(
"userName"
,
_base64Js2
.
default
.
fromByteArray
(
_ArrayBufferUtil2
.
default
.
strToUint8Array
(
confInfo
.
userName
)));
pduMsg
.
set
(
"userRole"
,
confInfo
.
userRole
);
...
...
@@ -2332,12 +2349,14 @@ return /******/ (function(modules) { // webpackBootstrap
var
pduMsg
=
_index2
.
default
.
decode_pdu
(
data
);
var
pduType
=
pduMsg
.
get
(
"type"
);
var
pduData
=
pduMsg
.
get
(
"data"
);
//loger.data('MCU-FirstLayer封装消息', 'type', pdu.id2type(pduMsg.type), pduMsg.type, 'sessionId', ApeConsts(pduMsg.sessionId), pduMsg.sessionId);
loger
.
log
(
'MCU-FirstLayer封装消息'
,
'type'
,
_index2
.
default
.
id2type
(
pduMsg
.
type
),
pduMsg
.
type
,
'sessionId'
,
(
0
,
_ApeConsts2
.
default
)(
pduMsg
.
sessionId
),
pduMsg
.
sessionId
);
switch
(
pduType
)
{
case
_PduType2
.
default
.
RCPDU_CONNECT_PROVIDER_RESPONSE
:
//加入会议请求返回数据处理
var
joinConfPdu
=
_index2
.
default
[
'RCConferenceJoinResponsePdu'
].
decode
(
pduData
);
var
pduResultCode
=
joinConfPdu
.
get
(
"result"
);
loger
.
warn
(
'RCPDU_CONNECT_PROVIDER_RESPONSE ->pduResultCode:'
+
pduResultCode
);
switch
(
pduResultCode
)
{
case
_PduConsts2
.
default
.
RET_SUCCESS
:
//加入成功
...
...
@@ -13270,8 +13289,15 @@ return /******/ (function(modules) { // webpackBootstrap
});
exports
.
default
=
RCPduPackage
;
function
RCPduPackage
(
targe_type_id
)
{};
RCPduPackage
.
RCPDU_CONNECT_PROVIDER_REQUEST
=
0
;
RCPduPackage
.
RCPDU_CONNECT_PROVIDER_RESPONSE
=
1
;
RCPduPackage
.
RCPDU_CONNECT_PROVIDER_REQUEST
=
0
;
//加入MCU会议的请求
RCPduPackage
.
RCPDU_CONNECT_PROVIDER_RESPONSE
=
1
;
//返回MCU会议请求结果
//下面两个是在入会成功之后,创建pdu包时设置的type值
RCPduPackage
.
RCPDU_UNIFORM_SEND_DATA_REQUEST
=
125
;
//发送uniform_pdu
RCPduPackage
.
RCPDU_SEND_DATA_REQUEST
=
120
;
//入会成功之后,客户端接收消息都通过这个,发送私聊的消息也用这个
RCPduPackage
.
RCPDU_CONFERENCE_JOIN_REQUEST
=
2
;
RCPduPackage
.
RCPDU_CONFERENCE_JOIN_RESPONSE
=
3
;
RCPduPackage
.
RCPDU_CONFERENCE_INVITE_REQUEST
=
10
;
...
...
@@ -13304,9 +13330,9 @@ return /******/ (function(modules) { // webpackBootstrap
RCPduPackage
.
RCPDU_CHANNEL_LEAVE_REQUEST
=
105
;
RCPduPackage
.
RCPDU_CHANNEL_RELEASE_REQUEST
=
106
;
RCPduPackage
.
RCPDU_CHANNEL_RELEASE_INDICATION
=
107
;
RCPduPackage
.
RCPDU_SEND_DATA_REQUEST
=
120
;
RCPduPackage
.
RCPDU_SEND_DATA_INDICATION
=
121
;
RCPduPackage
.
RCPDU_UNIFORM_SEND_DATA_REQUEST
=
125
;
RCPduPackage
.
RCPDU_UNIFORM_SEND_DATA_INDICATION
=
126
;
RCPduPackage
.
RCPDU_TOKEN_GRAB_REQUEST
=
130
;
RCPduPackage
.
RCPDU_TOKEN_GRAB_CONFIRM
=
131
;
...
...
@@ -13385,12 +13411,12 @@ return /******/ (function(modules) { // webpackBootstrap
exports
.
default
=
PduConsts
;
function
PduConsts
()
{}
PduConsts
.
NT_TERMINAL
=
0
;
PduConsts
.
NT_MULTIPORT_TERMINAL
=
1
;
//nodeType ,目前在加入课堂的时候用到 NT_TERMINAL,其他两个还没用到
PduConsts
.
NT_TERMINAL
=
0
;
//终端适配器
PduConsts
.
NT_MULTIPORT_TERMINAL
=
1
;
//多端口ERMINAL
PduConsts
.
NT_MCU
=
2
;
// PduPriority
// PduPriority 发送pdu包的 优先级
PduConsts
.
DP_TOP
=
0
;
PduConsts
.
DP_HIGH
=
1
;
PduConsts
.
DP_MEDIUM
=
2
;
...
...
@@ -13399,7 +13425,8 @@ return /******/ (function(modules) { // webpackBootstrap
// PduSegment
PduConsts
.
SEG_BEGIN
=
0
;
PduConsts
.
SEG_END
=
1
;
PduConsts
.
SEG_ONCE
=
2
;
PduConsts
.
SEG_ONCE
=
2
;
//目前发送消息封包的时候都用的这个
// PduReturnType
PduConsts
.
RET_SUCCESS
=
0
;
...
...
@@ -13757,6 +13784,8 @@ return /******/ (function(modules) { // webpackBootstrap
},
{
key
:
'rosterUpdateHandler'
,
value
:
function
rosterUpdateHandler
(
nodeId
,
nodeData
)
{
var
userDataObj
=
_pdus2
.
default
[
'RCNodeInfoUserDataPdu'
].
decode
(
nodeData
.
userData
);
loger
.
log
(
"更新人员列表数据"
,
nodeId
,
userDataObj
);
if
(
nodeData
.
role
===
_ApeConsts2
.
default
.
NR_MASTER
||
nodeData
.
role
===
_ApeConsts2
.
default
.
NR_SLAVE
)
{
this
.
hostNodeId
=
nodeData
.
nodeId
;
this
.
hostUserId
=
nodeData
.
userId
;
...
...
@@ -13768,19 +13797,27 @@ return /******/ (function(modules) { // webpackBootstrap
var
rosterExists
=
this
.
rosters
[
nodeId
];
this
.
rosters
[
nodeId
]
=
nodeData
;
if
(
!
rosterExists
)
{
this
.
_emit
(
_MessageTypes2
.
default
.
CLASS_INSERT_ROSTER
,
{
"nodeId"
:
nodeId
,
"nodeData"
:
nodeData
});
this
.
emitRosterChange
();
}
}
//删除用户
},
{
key
:
'rosterDelHandler'
,
value
:
function
rosterDelHandler
(
nodeId
)
{
delete
this
.
rosters
[
nodeId
];
this
.
_emit
(
_MessageTypes2
.
default
.
CLASS_DELETE_ROSTER
,
{
"nodeId"
:
nodeId
});
this
.
emitRosterChange
();
// 自己退出
if
(
nodeId
==
this
.
_confInfo
.
nodeId
)
{
this
.
_emit
(
_MessageTypes2
.
default
.
CLASS_EXIT
);
}
}
//广播当前的人数
},
{
key
:
'emitRosterChange'
,
value
:
function
emitRosterChange
()
{
...
...
@@ -15072,7 +15109,7 @@ return /******/ (function(modules) { // webpackBootstrap
// this._notify(RCApeEvent.E_VIDEO_DATA, videoReceivePdu.sessionId, videoReceivePdu.channelId, video_data);
loger
.
log
(
'视频消息处理 videoIncomingHandler.'
,
video_data
);
this
.
_emit
(
_MessageTypes2
.
default
.
VIDEO_
SHOW
,
video_data
);
this
.
_emit
(
_MessageTypes2
.
default
.
VIDEO_
RECEIVE
,
video_data
);
}
},
{
key
:
'tableUpdateHandler'
,
...
...
@@ -15115,7 +15152,7 @@ return /******/ (function(modules) { // webpackBootstrap
key
:
'emitVideoChange'
,
value
:
function
emitVideoChange
()
{
this
.
_emit
(
_MessageTypes2
.
default
.
VIDEO_
SHOW
,
{
this
.
_emit
(
_MessageTypes2
.
default
.
VIDEO_
RECEIVE
,
{
activeChannelId
:
this
.
activeChannelId
,
HLSURL
:
this
.
activeURL
});
...
...
@@ -15383,7 +15420,7 @@ return /******/ (function(modules) { // webpackBootstrap
svg
:
_utf2
.
default
.
getStringFromBytes
(
uncompressedBytes
)
};
this
.
annoInfos
[
recordId
]
=
annoInfo
;
this
.
_emit
(
_MessageTypes2
.
default
.
ANNO_UPDATE
,
annoInfo
);
this
.
_emit
(
_MessageTypes2
.
default
.
ANNO
TATION
_UPDATE
,
annoInfo
);
}
else
{
loger
.
log
(
'白板动作忽略,类型:'
,
(
0
,
_ApeConsts2
.
default
)(
recordInfo
.
type
));
}
...
...
docs/McuClient API.html
查看文件 @
150ecd7
...
...
@@ -586,7 +586,7 @@ client.sendChatMsg(paramInfo);
<p>
示例代码
</p>
<pre><code>
client.on(MessageTypes.VIDEO_
SHOW
, function(callbackData){
<pre><code>
client.on(MessageTypes.VIDEO_
RECEIVE
, function(callbackData){
//.....
});
</code></pre>
...
...
@@ -604,7 +604,7 @@ client.sendChatMsg(paramInfo);
<p>
示例代码
</p>
<pre><code>
client.on(MessageTypes.DOC_ANNO,function(callbackData){
<pre><code>
client.on(MessageTypes.DOC_ANNO
TATION
,function(callbackData){
//.....
});
</code></pre>
...
...
docs/McuClient API.md
查看文件 @
150ecd7
...
...
@@ -273,7 +273,7 @@ client初始化成功之后,加入会议。
### 视频显示 事件回调 ###
示例代码
client.on(MessageTypes.VIDEO_
SHOW
, function(callbackData){
client.on(MessageTypes.VIDEO_
RECEIVE
, function(callbackData){
//.....
});
...
...
@@ -287,7 +287,7 @@ client初始化成功之后,加入会议。
### 文档笔记 事件回调 ###
示例代码
client.on(MessageTypes.DOC_ANNO,function(callbackData){
client.on(MessageTypes.DOC_ANNO
TATION
,function(callbackData){
//.....
});
...
...
docs/README.md
查看文件 @
150ecd7
# DOCS FOLDER
wrcp 主要负责和MCU服务端通讯部分的
1.
协议上 senddata是顶层协议壳。所有消息包都嵌套打在 这个 pdu中
2.
从会议流程上看,分以下几类:
1、connectprovider(内部嵌套joinconference包):加入会议协议,分为request和response两组。
2、joinsession(内部嵌套注册表的操作包):加入应用,分为request和response
3、joinchannel:加入channel
4、adapterpdu 中嵌套注册表操作pdu
mcu中的注册表是有客户端通过adapterpdu来维护的,mcu本身不维护这个数据
我特别强调这个,就是想说明,会议的所有控制逻辑不是mcu完成的,而是客户端完成的
3.
每个应用就是一个session,(joinsession就是加入这个应用),客户端加入这个应用后,就能从mcu的注册标中活的这个应用的所有信息。
conference这个应用会保留会议的主要信息如用户列表等,而且很多会议控制我觉得也会在这个应用中。
然后特定应用如聊天就是负责聊天的数据转发,需要先joinsession然后在joinchannel(相当于聊天的数据通道),这样客户端会通过senddatapdu嵌套chatsenddatapdu来发送聊天channel的消息,其他客户端只要加入了聊天应用的聊天channel,就会收到聊天消息。
每个应用在joinsession时会嵌套adapterpdu,其中带上了需要维护的注册表信息(定义 registrykey和object)
注册表常用的就是 table,几乎所有app都维护了一个table
比如一个会议中会维护三个视频通道,这样在table中就会有三条记录(以视频channel id作为索引
所有用户加入视频应用后都会获得这个信息,且记录发生改变时会广播给全网用户。
具体到这个表格的存储呢,mcu仅仅知道 id 和 一个 pdu生成的字符串还有owner信息。具体这个记录的内容,mcu没有关心。
比如想定义一个会议的控制行为,很可能的操作就是:在conference这个应用的某个表格下插入一个特定id的string值。然后通过修改这个值,然后与会的人知道当前是什么行为
再比如,tabbar中的多个tab选项,每个选项对应一个id,其属性可以保存在conference中一个表中,这样属性值中可以有visble选项,老师切换时,将相关id属性同步成true,mcu会广播给所有客户端,这样所有的与会人员就知道切换tab了。
\ No newline at end of file
...
...
src/EngineEntrance.js
查看文件 @
150ecd7
...
...
@@ -76,7 +76,7 @@ export default class MessageEntrance extends Emiter {
_wb_ape
=
new
WhiteBoardApe
();
_wb_ape
.
on
(
'*'
,
(
type
,
data
)
=>
this
.
_emit
(
type
,
data
));
_wb_ape
.
on
(
MessageTypes
.
ANNO_UPDATE
,
this
.
annoUpdateHandler
.
bind
(
this
));
_wb_ape
.
on
(
MessageTypes
.
ANNO
TATION
_UPDATE
,
this
.
annoUpdateHandler
.
bind
(
this
));
//公开外部调用的方法
this
.
init
=
this
.
_init
;
...
...
@@ -229,12 +229,12 @@ export default class MessageEntrance extends Emiter {
}
}
// 白板笔记更新
// 白板笔记更新
(svg)
annoUpdateHandler
(
annoInfo
)
{
const
activeDocId
=
_confer_ape
.
activeDocId
;
const
docItem
=
_doc_ape
.
docList
[
activeDocId
];
if
(
docItem
&&
annoInfo
.
id
==
docItem
.
wbid
)
{
this
.
_emit
(
MessageTypes
.
DOC_ANNO
,
annoInfo
);
this
.
_emit
(
MessageTypes
.
DOC_ANNO
TATION
,
annoInfo
);
}
}
...
...
@@ -243,9 +243,9 @@ export default class MessageEntrance extends Emiter {
loger
.
log
(
'Doc Show ->'
+
docItem
.
id
+
'|'
+
docItem
.
curPageNo
);
const
annoInfo
=
_wb_ape
.
annoInfos
[
docItem
.
wbid
];
if
(
annoInfo
)
{
this
.
_emit
(
MessageTypes
.
DOC_ANNO
,
annoInfo
);
this
.
_emit
(
MessageTypes
.
DOC_ANNO
TATION
,
annoInfo
);
}
else
{
this
.
_emit
(
MessageTypes
.
DOC_ANNO
);
this
.
_emit
(
MessageTypes
.
DOC_ANNO
TATION
);
}
}
...
...
src/Loger.js
查看文件 @
150ecd7
...
...
@@ -41,7 +41,9 @@ class Loger {
error
(...
msg
)
{
this
.
_log
(
Loger
.
ERROR
,
msg
);
}
data
(...
msg
)
{
this
.
_log
(
Loger
.
DATA
,
msg
);
}
_log
(
type
,
msg
)
{
msg
=
JSON
.
stringify
(
msg
);
...
...
@@ -57,6 +59,9 @@ class Loger {
case
Loger
.
ERROR
:
console
.
error
(
logMsg
);
break
;
case
Loger
.
DATA
:
console
.
log
(
logMsg
);
break
;
}
}
}
...
...
@@ -67,7 +72,7 @@ Loger.WARN = 1;
Loger
.
ERROR
=
2
;
Loger
.
NO
=
Infinity
;
Loger
.
logLevel
=
Loger
.
LOG
;
Loger
.
DATA
=
5
;
export
default
{
getLoger
:
function
getLoger
(
info
)
{
return
new
Loger
(
info
);
...
...
@@ -79,5 +84,6 @@ export default {
WARN
:
Loger
.
WARN
,
ERROR
:
Loger
.
ERROR
,
NO
:
Loger
.
NO
,
DATA
:
Loger
.
DATA
,
};
...
...
src/MessageTypes.js
查看文件 @
150ecd7
...
...
@@ -27,24 +27,28 @@ MessageTypes.CLASS_JOIN_SUCCESS = 'join.class.success';
//会议信息和操作事件定义
MessageTypes
.
CLASS_SHOW_DETAIL
=
'class_detail.message'
;
MessageTypes
.
CLASS_SHOW_ROSTER_NUM
=
'roster_num.message'
;
MessageTypes
.
CLASS_INSERT_ROSTER
=
'roster_insert.message'
;
MessageTypes
.
CLASS_DELETE_ROSTER
=
'roster_delete.message'
;
MessageTypes
.
CLASS_EXIT
=
'class.exit'
;
//聊天模块事件定义
MessageTypes
.
CHAT_RECEIVE
=
'chat.
messag
e'
;
MessageTypes
.
CHAT_RECEIVE
=
'chat.
receiv
e'
;
//视频模块事件定义
MessageTypes
.
VIDEO_
SHOW
=
'video.messag
e'
;
MessageTypes
.
VIDEO_
RECEIVE
=
'video.receiv
e'
;
//文档模块事件定义
MessageTypes
.
DOC_SHOW
=
'document.
message
'
;
MessageTypes
.
DOC_SHOW
=
'document.
show
'
;
MessageTypes
.
DOC_SWITCH
=
'document.switch'
;
MessageTypes
.
DOC_UPDATE
=
'document.update'
;
MessageTypes
.
DOC_DEL
=
'document.delete'
;
MessageTypes
.
DOC_ANNO
=
'document.anno
'
;
//笔记
MessageTypes
.
DOC_ANNO
TATION
=
'document.annotation
'
;
//笔记
//笔记事件定义
MessageTypes
.
ANNO_UPDATE
=
'anno_update'
;
MessageTypes
.
AUDIO_SHOW
=
'audio.message'
;
MessageTypes
.
ANNOTATION_UPDATE
=
'annotation.update'
;
//音频
MessageTypes
.
AUDIO_RECEIVE
=
'audio.receive'
;
//错误事件定义
MessageTypes
.
NET_ERROR
=
'net_error'
;
...
...
src/apes/ConferApe.js
查看文件 @
150ecd7
...
...
@@ -112,6 +112,8 @@ class ConferApe extends Ape {
//更新人员列表数据
rosterUpdateHandler
(
nodeId
,
nodeData
)
{
var
userDataObj
=
pdu
[
'RCNodeInfoUserDataPdu'
].
decode
(
nodeData
.
userData
);
loger
.
log
(
"更新人员列表数据"
,
nodeId
,
userDataObj
);
if
(
nodeData
.
role
===
ApeConsts
.
NR_MASTER
||
nodeData
.
role
===
ApeConsts
.
NR_SLAVE
)
{
this
.
hostNodeId
=
nodeData
.
nodeId
;
...
...
@@ -125,14 +127,15 @@ class ConferApe extends Ape {
let
rosterExists
=
this
.
rosters
[
nodeId
];
this
.
rosters
[
nodeId
]
=
nodeData
;
if
(
!
rosterExists
)
{
this
.
_emit
(
MessageTypes
.
CLASS_INSERT_ROSTER
,
{
"nodeId"
:
nodeId
,
"nodeData"
:
nodeData
});
this
.
emitRosterChange
();
}
}
//删除用户
rosterDelHandler
(
nodeId
)
{
delete
this
.
rosters
[
nodeId
];
this
.
_emit
(
MessageTypes
.
CLASS_DELETE_ROSTER
,
{
"nodeId"
:
nodeId
});
this
.
emitRosterChange
();
// 自己退出
if
(
nodeId
==
this
.
_confInfo
.
nodeId
)
{
...
...
@@ -140,6 +143,7 @@ class ConferApe extends Ape {
}
}
//广播当前的人数
emitRosterChange
()
{
this
.
_emit
(
MessageTypes
.
CLASS_SHOW_ROSTER_NUM
,
Object
.
keys
(
this
.
rosters
).
length
);
}
...
...
src/apes/VideoApe.js
查看文件 @
150ecd7
...
...
@@ -60,7 +60,7 @@ class VideoChat extends Ape {
// this._notify(RCApeEvent.E_VIDEO_DATA, videoReceivePdu.sessionId, videoReceivePdu.channelId, video_data);
loger
.
log
(
'视频消息处理 videoIncomingHandler.'
,
video_data
);
this
.
_emit
(
MessageTypes
.
VIDEO_
SHOW
,
video_data
);
this
.
_emit
(
MessageTypes
.
VIDEO_
RECEIVE
,
video_data
);
}
...
...
@@ -102,7 +102,7 @@ class VideoChat extends Ape {
emitVideoChange
()
{
this
.
_emit
(
MessageTypes
.
VIDEO_
SHOW
,
{
this
.
_emit
(
MessageTypes
.
VIDEO_
RECEIVE
,
{
activeChannelId
:
this
.
activeChannelId
,
HLSURL
:
this
.
activeURL
,
});
...
...
src/apes/WhiteBoardApe.js
查看文件 @
150ecd7
...
...
@@ -63,7 +63,7 @@ class WhiteBoardApe extends Ape {
svg
:
UTF8
.
getStringFromBytes
(
uncompressedBytes
)
};
this
.
annoInfos
[
recordId
]
=
annoInfo
;
this
.
_emit
(
MessageTypes
.
ANNO_UPDATE
,
annoInfo
);
this
.
_emit
(
MessageTypes
.
ANNO
TATION
_UPDATE
,
annoInfo
);
}
else
{
loger
.
log
(
'白板动作忽略,类型:'
,
ApeConsts
(
recordInfo
.
type
));
}
...
...
src/mcu.js
查看文件 @
150ecd7
...
...
@@ -66,7 +66,7 @@ class MCU extends Emiter {
PduConsts
.
SEG_ONCE
);
pduMsg
.
set
(
"site"
,
confInfo
.
siteId
);
pduMsg
.
set
(
"site"
,
confInfo
.
siteId
);
//课堂号对应的名称
pduMsg
.
set
(
"userId"
,
confInfo
.
userId
);
pduMsg
.
set
(
"userName"
,
Base64
.
fromByteArray
(
ArrayBufferUtil
.
strToUint8Array
(
confInfo
.
userName
)));
pduMsg
.
set
(
"userRole"
,
confInfo
.
userRole
);
...
...
@@ -81,12 +81,14 @@ class MCU extends Emiter {
let
pduMsg
=
pdu
.
decode_pdu
(
data
);
let
pduType
=
pduMsg
.
get
(
"type"
);
let
pduData
=
pduMsg
.
get
(
"data"
);
//loger.data('MCU-FirstLayer封装消息', 'type', pdu.id2type(pduMsg.type), pduMsg.type, 'sessionId', ApeConsts(pduMsg.sessionId), pduMsg.sessionId);
loger
.
log
(
'MCU-FirstLayer封装消息'
,
'type'
,
pdu
.
id2type
(
pduMsg
.
type
),
pduMsg
.
type
,
'sessionId'
,
ApeConsts
(
pduMsg
.
sessionId
),
pduMsg
.
sessionId
);
switch
(
pduType
)
{
case
PduType
.
RCPDU_CONNECT_PROVIDER_RESPONSE
:
//加入会议请求返回数据处理
let
joinConfPdu
=
pdu
[
'RCConferenceJoinResponsePdu'
].
decode
(
pduData
);
let
pduResultCode
=
joinConfPdu
.
get
(
"result"
);
loger
.
warn
(
'RCPDU_CONNECT_PROVIDER_RESPONSE ->pduResultCode:'
+
pduResultCode
);
switch
(
pduResultCode
)
{
case
PduConsts
.
RET_SUCCESS
:
//加入成功
...
...
src/pdus/PduConsts.js
查看文件 @
150ecd7
export
default
function
PduConsts
()
{}
PduConsts
.
NT_TERMINAL
=
0
;
PduConsts
.
NT_MULTIPORT_TERMINAL
=
1
;
//nodeType ,目前在加入课堂的时候用到 NT_TERMINAL,其他两个还没用到
PduConsts
.
NT_TERMINAL
=
0
;
//终端适配器
PduConsts
.
NT_MULTIPORT_TERMINAL
=
1
;
//多端口ERMINAL
PduConsts
.
NT_MCU
=
2
;
// PduPriority
// PduPriority 发送pdu包的 优先级
PduConsts
.
DP_TOP
=
0
;
PduConsts
.
DP_HIGH
=
1
;
PduConsts
.
DP_MEDIUM
=
2
;
...
...
@@ -14,7 +16,9 @@ PduConsts.DP_LOW = 3;
// PduSegment
PduConsts
.
SEG_BEGIN
=
0
;
PduConsts
.
SEG_END
=
1
;
PduConsts
.
SEG_ONCE
=
2
;
PduConsts
.
SEG_ONCE
=
2
;
//目前发送消息封包的时候都用的这个
// PduReturnType
PduConsts
.
RET_SUCCESS
=
0
;
...
...
src/pdus/PduType.js
查看文件 @
150ecd7
export
default
function
RCPduPackage
(
targe_type_id
)
{};
RCPduPackage
.
RCPDU_CONNECT_PROVIDER_REQUEST
=
0
;
RCPduPackage
.
RCPDU_CONNECT_PROVIDER_RESPONSE
=
1
;
RCPduPackage
.
RCPDU_CONNECT_PROVIDER_REQUEST
=
0
;
//加入MCU会议的请求
RCPduPackage
.
RCPDU_CONNECT_PROVIDER_RESPONSE
=
1
;
//返回MCU会议请求结果
//下面两个是在入会成功之后,创建pdu包时设置的type值
RCPduPackage
.
RCPDU_UNIFORM_SEND_DATA_REQUEST
=
125
;
//发送uniform_pdu
RCPduPackage
.
RCPDU_SEND_DATA_REQUEST
=
120
;
//入会成功之后,客户端接收消息都通过这个,发送私聊的消息也用这个
RCPduPackage
.
RCPDU_CONFERENCE_JOIN_REQUEST
=
2
;
RCPduPackage
.
RCPDU_CONFERENCE_JOIN_RESPONSE
=
3
;
RCPduPackage
.
RCPDU_CONFERENCE_INVITE_REQUEST
=
10
;
...
...
@@ -33,9 +40,9 @@ RCPduPackage.RCPDU_CHANNEL_JOIN_RESPONSE = 104;
RCPduPackage
.
RCPDU_CHANNEL_LEAVE_REQUEST
=
105
;
RCPduPackage
.
RCPDU_CHANNEL_RELEASE_REQUEST
=
106
;
RCPduPackage
.
RCPDU_CHANNEL_RELEASE_INDICATION
=
107
;
RCPduPackage
.
RCPDU_SEND_DATA_REQUEST
=
120
;
RCPduPackage
.
RCPDU_SEND_DATA_INDICATION
=
121
;
RCPduPackage
.
RCPDU_UNIFORM_SEND_DATA_REQUEST
=
125
;
RCPduPackage
.
RCPDU_UNIFORM_SEND_DATA_INDICATION
=
126
;
RCPduPackage
.
RCPDU_TOKEN_GRAB_REQUEST
=
130
;
RCPduPackage
.
RCPDU_TOKEN_GRAB_CONFIRM
=
131
;
...
...
请
注册
或
登录
后发表评论