zby-live-sdk
Version:
This is a live SDK for weclassroom.
98 lines (92 loc) • 4.33 kB
JavaScript
import dict from '../util/dict';
import CHANNEL from './index';
import defaultApi from '../default';
import sdkCb from './sdk-cb';
import {
userAndDeviceStatusInfo
} from '../util/statsStore';
import dataReport from '../network/dataReport';
export default function(data, baseInfo) {
try {
dataReport.pomeloRecvMsg({data});
} catch(e) {
console.error('pomeloRecvMsg_error',e);
}
switch (data.api) {
case 'join':
//通知业务层信息:有人进入房间
sdkCb.join(data);
defaultApi.writeLog(`sdk notice user_join role: ${data.actorType} userId : ${data.actorId} userName: ${data.actorName}`);
//如果本地是学生,就定向回应joinAck和addStream,让对方可以展示自己的视频
//定向回应joinAck和addStream,让对方可以展示自己的视频
//线路切换:本地学生和老师SDK类型不一致
if (window.target_sdk_type) {
//存在target_sdk_type ,表示正在切换中,等待切换
defaultApi.writeLog(`changing sdk to ${window.target_sdk_type},ignore remote userId ${data.actorId} join msg`);
break;
} else {
CHANNEL.sendJoinAck(baseInfo);
CHANNEL.sendAddStream(baseInfo);
CHANNEL.sendUpdateStreamDeviceStatus(Object.assign({}, baseInfo, {
deviceType: dict.getDeviceTypeKey('video'),
deviceStatus: dict.getDeviceStatusKey(userAndDeviceStatusInfo && userAndDeviceStatusInfo.camera ? 'open' : 'closed'),
}));
CHANNEL.sendUpdateStreamDeviceStatus(Object.assign({}, baseInfo, {
deviceType: dict.getDeviceTypeKey('audio'),
deviceStatus: dict.getDeviceStatusKey(userAndDeviceStatusInfo && userAndDeviceStatusInfo.microPhone ? 'open' : 'closed'),
}));
}
break;
case 'joinAck':
//首先确认对方的消息是针对本人进行回应的(信道处理)定向接收
//通知业务层信息:有人在房间的回应
sdkCb.joinAck(data);
defaultApi.writeLog(`sdk notice user_response role: ${data.actorType} userId : ${data.actorId} userName: ${data.actorName}`);
break;
case 'addStream':
defaultApi.writeLog({
changing_sdk_type: window.target_sdk_type,
local_sdk_type: window.current_sdk_type,
remote_sdk_type: data.sdkName,
isIgnore: !!window.target_sdk_type ||
(data.sdkName &&
(window.current_sdk_type !== data.sdkName))
});
if (!!window.target_sdk_type ||
(data.sdkName && (window.current_sdk_type !== data.sdkName))) {
defaultApi.writeLog(`recv different sdk addStream,:target ${window.target_sdk_type},ignore remote userId ${data.actorId} msg`);
break;
}
//处理接收的群发消息和定向消息(已经由消息服务器处理过)
//通知展示收到的视频流数据
sdkCb.addStream(data);
defaultApi.writeLog(`sdk notice remote_video_ready : current_sdk_type: ${window.current_sdk_type}, zbyAVSDK_type: ${window.zbyAVSDK_init_sdk_type}, role: ${data.actorType} userId : ${data.actorId} userName: ${data.actorName}`);
break;
case 'removeStream':
if (data.sdkName && (window.current_sdk_type !== data.sdkName)) {
break;
}
//处理接收的群发removeStream消息
//通知移除收到的视频流数据
sdkCb.removeStream(data);
defaultApi.writeLog(`sdk notice remote_video_removed ,streamUrl ${data.streamUrl}, role: ${data.actorType} userId : ${data.actorId} userName: ${data.actorName} `);
break;
case 'updateStreamDeviceStatus':
/**
* @data.streamType: 1视频 / 2麦克风
* @data.status: 1打开 / 2关闭
* @CONTROL.role: '1' 老师收流 / '2' 学生收流
* */
//通知业务层信息
sdkCb.updateStreamDeviceStatus(data);
defaultApi.writeLog(`sdk notice device_status role: ${data.actorType} userId : ${data.actorId} userName: ${data.actorName} deviceType : ${dict.devicesMap.get(parseInt(data.streamType))} deviceStatus: ${dict.devicesStatusMap.get(parseInt(data.status))}`);
break;
case 'leave':
//通知业务层信息
sdkCb.leave(data);
defaultApi.writeLog(`sdk notice user_leave role: ${data.actorType} userId : ${data.actorId} userName: ${data.actorName}`);
break;
default:
break;
}
}