test-cloudhub-electron-sdk
Version:
cloudhub-electron-sdk
291 lines (290 loc) • 16.5 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
/**
* @module MessageController
* @description 处理内部回调数据
* @author dangmeng
* @date 2020-06-26
* */
const event_1 = require("../helpers/event");
const utils_1 = __importDefault(require("../helpers/utils"));
const RoomController_1 = __importDefault(require("./RoomController"));
const StreamController_1 = __importDefault(require("./StreamController"));
const Renderer_1 = require("../Renderer");
const LoggerController_1 = __importDefault(require("./LoggerController"));
const logger = new LoggerController_1.default('CloudHub-message-log');
class MessageController {
apiCallback(RtcEngine) {
RtcEngine.onEvent('connectionStateChanged', (state) => {
logger.info(`onConnectionStateChanged state:${state}`);
event_1.EventInner.trigger('onConnectionStateChanged', { state });
});
RtcEngine.onEvent('connectionlost', () => {
logger.info('onConnectionLost');
event_1.EventInner.trigger('onConnectionLost');
});
RtcEngine.onEvent('requesttoken', () => {
logger.info('onRequestToken');
event_1.EventInner.trigger('onRequestToken');
});
RtcEngine.onEvent('tokenPrivilegeWillExpire', (token) => {
logger.info('onTokenPrivilegeWillExpire', token);
event_1.EventInner.trigger('onTokenPrivilegeWillExpire', { token });
});
RtcEngine.onEvent('clientrolechanged', (state) => {
logger.info(`onClientRoleChanged state:${state}`);
event_1.EventInner.trigger('onClientRoleChanged', { state });
});
RtcEngine.onEvent('firstlocalvideoframe', (uid, width, height) => {
logger.info(`onFirstLocalVideoFrame uid:${uid} width:${width} height:${height}`);
event_1.EventInner.trigger('onFirstLocalVideoFrame', { width, height });
});
RtcEngine.onEvent('firstlocalaudioframe', () => {
logger.info('onFirstLocalAudioFrame');
event_1.EventInner.trigger('onFirstLocalAudioFrame');
});
RtcEngine.onEvent('firstremotevideoframe', (uid, mediaType, width, height) => {
logger.info(`onFirstRemoteVideoFrame uid:${uid} mediaType:${mediaType} width:${width} height:${height}`);
event_1.EventInner.trigger('onFirstRemoteVideoFrame', { uid, mediaType, width, height });
});
RtcEngine.onEvent('firstremoteaudioframe', (uid) => {
logger.info(`onFirstRemoteAudioFrame uid:${uid}`);
event_1.EventInner.trigger('onFirstRemoteAudioFrame', { uid });
});
RtcEngine.onEvent('error', (err, msg) => {
logger.info(`onError err:${err} msg:${msg}`);
event_1.EventInner.trigger('onError', { err, msg });
});
RtcEngine.onEvent('chatMsg', (fromId, textMsg, extraData) => {
logger.info(`onChatMsg fromId:${fromId} textMsg:${textMsg} extraData:${extraData}`);
event_1.EventInner.trigger('onChatMsg', {
fromId,
textMsg,
extraData: utils_1.default.strToJson(extraData)
});
});
RtcEngine.onEvent('pubMsg', (msgId, msgName, fromId, toId, data, associatedUserId, associatedMsgId, ts, extraData, isHistory, seq) => {
logger.info(`onPubMsg111 msgId:${msgId} msgName:${msgName} fromId:${fromId} toId:${toId} data:${data} associatedUserId:${associatedUserId} associatedMsgId:${associatedMsgId} ts:${ts} extraData:${extraData} isHistory:${isHistory} seq:${seq}`);
event_1.EventInner.trigger('onPubMsg', {
isHistory,
data: utils_1.default.strToJson(data),
extraData: utils_1.default.strToJson(extraData),
associatedUserId,
associatedMsgId,
fromId,
msgId,
msgName,
toId,
ts,
seq
});
});
RtcEngine.onEvent('delMsg', (msgId, msgName, fromId, toId, associatedUserId, associatedMsgId, ts, data, seq) => {
logger.info(`onDelMsg msgId:${msgId} msgName:${msgName} fromId:${fromId} toId:${toId} associatedUserId:${associatedUserId} associatedMsgId:${associatedMsgId} ts:${ts} data:${data} seq:${seq}`);
event_1.EventInner.trigger('onDelMsg', {
msgId,
msgName,
fromId,
toId,
associatedUserId,
associatedMsgId,
ts,
data: utils_1.default.strToJson(data),
seq
});
});
RtcEngine.onEvent('serverTime', (serverts) => {
logger.info(`onServerTime serverts:${serverts}`);
event_1.EventInner.trigger('onServerTime', { serverts });
});
RtcEngine.onEvent('docAddr', (address, channelId) => {
logger.info(`onDocAddr address:`, eval(address), 'channelId:', channelId);
event_1.EventInner.trigger('onDocAddr', { address: eval(address), channelId });
});
RtcEngine.onEvent('setProperties', (userId, fromId, properties) => {
logger.info(`onSetProperty userId:${userId} fromId:${fromId} properties:${properties}`);
event_1.EventInner.trigger('onSetProperty', { userId, fromId, properties: utils_1.default.strToJson(properties) });
});
RtcEngine.onEvent('localUserEvicted', (reason) => {
logger.info(`onLocalUserEvicted reason:${reason}`);
event_1.EventInner.trigger('onLocalUserEvicted', { reason });
});
RtcEngine.onEvent('joinchannel', (channel, uid, elapsed) => {
logger.info(`onJoinChannel channel:${channel} uid:${uid} elapsed:${elapsed}`);
RoomController_1.default.setMyself({ uid });
event_1.EventInner.trigger('onJoinChannel', { channel, uid, elapsed });
});
RtcEngine.onEvent('rejoinchannel', (channel, uid, elapsed) => {
logger.info(`onRejoinChannel channel:${channel} uid:${uid} elapsed:${elapsed}`);
event_1.EventInner.trigger('onRejoinChannel', { channel, uid, elapsed });
});
RtcEngine.onEvent('localuserPerssionChanged', (type, hasPermission) => {
logger.info(`onLocaluserPerssionChanged type:${type} hasPermission:${hasPermission}`);
event_1.EventInner.trigger('onLocaluserPerssionChanged', { type, hasPermission });
});
RtcEngine.onEvent('recordMsg', (data) => {
const { currTs, pauseDuration, recordDuration, recordState, startTs } = utils_1.default.strToJson(data);
logger.info(`onRecordMsg currTs:${currTs} pauseDuration:${pauseDuration} recordDuration:${recordDuration} recordState:${recordState} startTs:${startTs}`);
event_1.EventInner.trigger('onRecordMsg', { currTs, pauseDuration, recordDuration, recordState, startTs });
});
RtcEngine.onEvent('leavechannel', (states) => {
logger.info(`onLeaveChannel states:${states}`);
event_1.EventInner.trigger('onLeaveChannel', { states });
});
RtcEngine.onEvent('localVideoStateChanged', (state, error) => {
logger.info(`onLocalVideoStateChanged state:${state} error:${error}`);
event_1.EventInner.trigger('onLocalVideoStateChanged', { state, error });
});
RtcEngine.onEvent('localAudioStateChanged', (state, error) => {
logger.info(`onLocalAudioStateChanged state:${state} error:${error}`);
event_1.EventInner.trigger('onLocalAudioStateChanged', { state, error });
});
RtcEngine.onEvent('rtcstats', (stats) => {
// logger.info(`onRtcStats stats:${stats}`)
event_1.EventInner.trigger('onRtcStats', { stats });
});
RtcEngine.onEvent('networkquality', (uid, txQuality, rxQuality) => {
// logger.info(`onNetworkQuality uid:${uid} txQuality:${txQuality} rxQuality:${rxQuality}`)
event_1.EventInner.trigger('onNetworkQuality', { uid, txQuality, rxQuality });
});
RtcEngine.onEvent('videodevicestatechanged', (deviceId, deviceType, deviceState) => {
logger.info(`onVideoDeviceStateChanged deviceId:${deviceId} deviceType:${deviceType} deviceState:${deviceState}`);
event_1.EventInner.trigger('onVideoDeviceStateChanged', { deviceId, deviceType, deviceState });
});
RtcEngine.onEvent('audiodevicestatechanged', (deviceId, deviceType, deviceState) => {
logger.info(`onAudioDeviceStateChanged deviceId:${deviceId} deviceType:${deviceType} deviceState:${deviceState}`);
event_1.EventInner.trigger('onAudioDeviceStateChanged', { deviceId, deviceType, deviceState });
});
RtcEngine.onEvent('userjoined', (uid, properties, isHistory) => {
logger.info(`onUserJoined uid:${uid} properties:${properties} isHistory:${isHistory}`);
event_1.EventInner.trigger('onUserJoined', { isHistory, uid, properties: utils_1.default.strToJson(properties) });
});
RtcEngine.onEvent('useroffline', (uid) => {
logger.info(`onUserOffline uid:${uid}`);
event_1.EventInner.trigger('onUserLeaved', { uid });
});
RtcEngine.onEvent('remoteVideoStateChanged', (uid, sourceId, mediaType, streamId, state, reason) => {
logger.info(`onRemoteVideoStateChanged uid:${uid} sourceId:${sourceId} mediaType:${mediaType} streamId:${streamId} state:${state} reason:${reason}`);
let stream = StreamController_1.default.getStream(uid, utils_1.default.getMediaType(mediaType));
if (state === 0 && reason !== 5 && stream) {
StreamController_1.default.delStream(uid, utils_1.default.getMediaType(mediaType));
}
if (state === 1 && reason !== 6 && !stream) {
StreamController_1.default.setStream(uid, utils_1.default.getMediaType(mediaType), { renderer: new Renderer_1.GlRenderer(), streamId });
}
event_1.EventInner.trigger('onRemoteVideoStateChanged', {
uid,
state,
mediaType,
reason,
sourceId
});
});
RtcEngine.onEvent('remoteAudioStateChanged', (uid, state, reason) => {
logger.info(`onRemoteAudioStateChanged uid:${uid} state:${state} reason:${reason}`);
event_1.EventInner.trigger('onRemoteAudioStateChanged', { uid, state, reason, });
});
RtcEngine.onEvent('firstLocalMovieFrame', (uid, width, height, mediafile) => {
logger.info(`onFirstLocalMovieFrame uid:${uid} width:${width} height:${height} mediafile:${mediafile}`);
event_1.EventInner.trigger('onFirstLocalMovieFrame', { uid, width, height, mediafile });
});
RtcEngine.onEvent('localMovieStateChanged', (mediafile, state, errCode) => {
logger.info(`onLocalMovieStateChanged mediafile:${mediafile} state:${state} errCode:${errCode}`);
event_1.EventInner.trigger('onLocalMovieStateChanged', { mediafile, state, errCode, });
});
RtcEngine.onEvent('streamInjectStatus', (uid, sourceId, mediaType, streamId, status, attr) => {
logger.info(`onStreamInjectStatus uid:${uid} sourceId:${sourceId} mediaType:${mediaType} streamId:${streamId} status:${status} attr:${attr}`);
switch (status) {
case 0: //进入
StreamController_1.default.setStream(uid, utils_1.default.getMediaType(mediaType), {
renderer: new Renderer_1.GlRenderer(),
streamId
});
break;
case 4: //销毁
StreamController_1.default.delStream(uid, utils_1.default.getMediaType(mediaType));
break;
}
event_1.EventInner.trigger('onStreamInjectStatus', {
uid,
mediaType,
status,
sourceId,
attr: utils_1.default.strToJson(attr)
});
});
RtcEngine.onEvent('streamInjectPos', (uid, sourceId, mediaType, streamId, pos) => {
logger.info(`onStreamInjectPos uid:${uid} sourceId:${sourceId} mediaType:${mediaType} streamId:${streamId} pos:${pos}`);
event_1.EventInner.trigger('onStreamInjectPos', { uid, mediaType, pos });
});
RtcEngine.onEvent('audiovolumeindication', (speakers, speakerNumber, totalVolume) => {
// logger.info(`onAudioVolumeIndication speakers:${speakers} speakerNumber:${speakerNumber} totalVolume:${totalVolume}`)
event_1.EventInner.trigger('onAudioVolumeIndication', { speakers, speakerNumber, totalVolume });
});
RtcEngine.onEvent('movieProgress', (mediaFile, pos, total) => {
// logger.info(`onMovieProgress mediaFile:${mediaFile} pos:${pos} total:${total}`)
event_1.EventInner.trigger('onMovieProgress', { mediafile: mediaFile, pos, total });
});
RtcEngine.onEvent('localvideostats', (stats) => {
// logger.info(`onLocalVideoStats stats:${stats}`)
event_1.EventInner.trigger('onLocalVideoStats', { stats });
});
RtcEngine.onEvent('localaudiostats', (stats) => {
// logger.info(`onLocalAudioStats stats:${stats}`)
event_1.EventInner.trigger('onLocalAudioStats', { stats });
});
RtcEngine.onEvent('remotevideostats', (stats) => {
// logger.info(`onRemoteVideoStats stats:${stats}`)
event_1.EventInner.trigger('onRemoteVideoStats', { stats });
});
RtcEngine.onEvent('remoteaudiostats', (stats) => {
// logger.info(`onRemoteAudioStats stats:${stats}`)
event_1.EventInner.trigger('onRemoteAudioStats', { stats });
});
RtcEngine.onEvent('lastmilequality', (quality) => {
logger.info(`onLastmileQuality quality:${quality}`);
event_1.EventInner.trigger('onLastmileQuality', { quality });
});
RtcEngine.onEvent('audioeffectfinished', (soundId) => {
logger.info(`onAudioEffectFinished soundId:${soundId}`);
event_1.EventInner.trigger('onAudioEffectFinished', { soundId });
});
}
registerDeliverFrame(infos) {
// logger.info('registerDeliverFrame', infos)
for (let i = 0; i < infos.length; i++) {
let { type, uid, streamId, header, ydata, udata, vdata } = infos[i];
if (!header || !ydata || !udata || !vdata) {
logger.warn('Invalid data param : ' + infos);
continue;
}
//如果是设备检测的话 需要单独处理一下 因为可能会在进入房间前检测 此时没有uid
if (streamId === 'local:test') {
const stream = StreamController_1.default.getStream('myself-device-test', 'device');
if (stream && stream.renderer) {
this.drawFrame(stream.renderer, header, ydata, udata, vdata);
}
}
else {
uid = uid || RoomController_1.default.getMyself().uid; // uid不存在的话就是自己
const streams = StreamController_1.default.getUserStream(uid);
const currentStream = streams.find((item) => item.streamId === streamId && item.renderer);
if (currentStream) {
this.drawFrame(currentStream.renderer, header, ydata, udata, vdata);
}
}
}
}
drawFrame(renderer, header, ydata, udata, vdata) {
renderer.drawFrame({
header,
yUint8Array: ydata,
uUint8Array: udata,
vUint8Array: vdata
});
}
}
exports.default = MessageController;