From f7dc5a650eb0ed2f38278a8bb9ec3368986027e1 Mon Sep 17 00:00:00 2001
From: liyong <liyong@3mang.com>
Date: Mon, 24 Jul 2017 13:34:17 +0800
Subject: [PATCH] 1.修复媒体共享和伴音模块的seek处理问题;2.聊天模块增加图片消息;3增加踢人接口和第三方消息接口

---
 src/EngineEntrance.js      | 25 +++++++++++++++++++++++--
 src/MessageTypes.js        |  3 ++-
 src/apes/ChatApe.js        |  2 +-
 src/apes/ConferApe.js      | 20 ++++++++++++++++++--
 src/apes/MediaSharedApe.js |  1 +
 src/apes/MusicSharedApe.js |  3 ++-
 src/apes/ThirdMessage.js   |  9 ++++++++-
 7 files changed, 55 insertions(+), 8 deletions(-)

diff --git a/src/EngineEntrance.js b/src/EngineEntrance.js
index c0079d9..a13a573 100644
--- a/src/EngineEntrance.js
+++ b/src/EngineEntrance.js
@@ -35,7 +35,7 @@ import QuestionApe from 'apes/QuestionApe';
 import UTF8 from 'utf-8';
 
 let loger = Loger.getLoger('McuClient');
-let _sdkInfo = { "version": "v1.49.1.20170724", "author": "www.3mang.com" };
+let _sdkInfo = { "version": "v1.50.7.20170724", "author": "www.3mang.com" };
 
 //APE
 let _sass;
@@ -168,6 +168,8 @@ export default class MessageEntrance extends Emiter {
 
     this.kickOutRosterFormNodeId= this._kickOutRosterFormNodeId.bind(this); //把指定nodeId的人踢出课堂
 
+    this.sendThridChannelMessage=this._sendThridChannelMessage.bind(this);//通道第三方消息通道发送消息
+
     //录制回放
     this.initRecordPlayback = this._initRecordPlayback.bind(this);
     this.startRecordPlayback = this._startRecordPlayback.bind(this);
@@ -433,13 +435,21 @@ export default class MessageEntrance extends Emiter {
     GlobalConfig.isRecordPlayBack = false; //设置为非录制回放状态
     GlobalConfig.classId = parseInt(_param.classId);
     GlobalConfig.portal = _param.portal;
+
+    //H5处理
     GlobalConfig.isH5=_param.isH5||false;//外部传入的参数,是否是H5
     if(GlobalConfig.isH5==true){
         GlobalConfig.platform = "H5";
         GlobalConfig.deviceType=3//3是H5
       loger.warn("设备类型是H5");
     }
-    //GlobalConfig.userId = _param.userId || "0";
+
+    //IOS 安卓处理,需要外部传入摄像头和麦克风信息
+    if(GlobalConfig.isMobile){
+      GlobalConfig.cameras=_param.cameras||[];
+      GlobalConfig.cameras=_param.microphones||[];
+    }
+
     //如果没有名字,随机起一个名字
     GlobalConfig.userName = _param.userName || "user_" + (new Date().getTime() % 1000000);
 
@@ -1057,6 +1067,17 @@ export default class MessageEntrance extends Emiter {
     }
   }
 
+  //通过第三方消息通道发送消息
+  _sendThridChannelMessage(_param){
+    if (!_mcu.connected) {
+      loger.warn(GlobalConfig.getCurrentStatus());
+      return { "code": ApeConsts.RETURN_FAILED, "data": "" };
+    }
+    if (_confer_ape) {
+      _confer_ape.onThirdReciveParentMessage(_param);
+    }
+  }
+
   //将指定nodeId的人踢出课堂
   _kickOutRosterFormNodeId(_param){
     if (!_mcu.connected) {
diff --git a/src/MessageTypes.js b/src/MessageTypes.js
index d40ae76..85adbf0 100644
--- a/src/MessageTypes.js
+++ b/src/MessageTypes.js
@@ -39,7 +39,8 @@ MessageTypes.CLASS_UPDATE_TIMER = "class_update_timer"; //'class.update.timer';/
 MessageTypes.CLASS_RECORD_STOP = "class_record_stop"; //;//停止录制
 MessageTypes.CLASS_RECORD_START = "class_record_start"; //;//开始录制
 MessageTypes.CLASS_RECORD_SUCCESS = "class_record_success"; ////操作录制状态成功
-
+//第三方消息通道
+MessageTypes.RECEIVE_THIRD_MESSGAE="receive_third_message";//接收到第三方消息
 //聊天模块事件定义
 MessageTypes.CHAT_RECEIVE = "chat_receive_message"; // 'chat.receive';
 
diff --git a/src/apes/ChatApe.js b/src/apes/ChatApe.js
index 1efdffe..84151a4 100644
--- a/src/apes/ChatApe.js
+++ b/src/apes/ChatApe.js
@@ -85,7 +85,7 @@ class ChatApe extends Ape {
     chatMsg.message = this._rCArrayBufferUtil.uint8ArrayToStr(chatReceivePdu.userData, 2);
     chatMsg.fromName = this._rCArrayBufferUtil.uint8ArrayToStr(chatReceivePdu.fromName, 2);
     chatMsg.fromRole = chatReceivePdu.fromRole;
-
+    chatMsg.msgType=chatReceivePdu.msgType||0;
     loger.log('接收聊天消息.', chatMsg);
 
     this._emit(MessageTypes.CHAT_RECEIVE, chatMsg);
diff --git a/src/apes/ConferApe.js b/src/apes/ConferApe.js
index 8a1cc6b..8924ce1 100644
--- a/src/apes/ConferApe.js
+++ b/src/apes/ConferApe.js
@@ -739,7 +739,14 @@ class ConferApe extends Ape {
   //收到父级页面的消息,需要广播发送出去
   onThirdReciveParentMessage(_msg) {
     loger.log('收到页面的消息->广播给其他模块->', _msg);
-    this.sendThirdBroadcastData({to: 0, message: _msg});
+    //尝试将外部传入的数据转换为JSON 字符串
+    let _message=_msg;
+    try{
+      _message=JSON.parse(_msg);
+    }catch(err){
+
+    }
+    this.sendThirdBroadcastData({to: 0, message: _message});
   }
 
   //发送第三方广播消息
@@ -759,7 +766,15 @@ class ConferApe extends Ape {
     thirdBroadcastSendPdu.initiator = this._classInfo.nodeId; //发起人
     thirdBroadcastSendPdu.peer = parseInt(_param.to) || 0; //发送给谁,公聊的时候是0,私聊的时候是指定的用户id
     thirdBroadcastSendPdu.isPublic = true;
-    thirdBroadcastSendPdu.message = this._rCArrayBufferUtil.strToUint8Array("h5" + _param.message);
+    let messageStr=_param.message||"";
+
+    //尝试把信息转换为JSON 字符串,如果是字符串就不需要转
+    try{
+      messageStr=JSON.stringify(messageStr);
+    }catch (err){
+
+    }
+    thirdBroadcastSendPdu.message = this._rCArrayBufferUtil.strToUint8Array("h5" + messageStr);
 
     if (!thirdBroadcastSendPdu.isPublic && 0 != thirdBroadcastSendPdu.peer) {
       //发送给制定的人
@@ -780,6 +795,7 @@ class ConferApe extends Ape {
     //loger.log("监听第三方消息通道消息->1", thirdMessage);
     thirdMessage.message = this._rCArrayBufferUtil.uint8ArrayToStr(thirdBroadcastReceivePdu.message, 2);
     loger.log("监听第三方消息通道消息->", thirdMessage);
+    this._emit(MessageTypes.RECEIVE_THIRD_MESSGAE,thirdMessage);
     if (this.thirdMessage) {
       this.thirdMessage.sendMessageToParent(thirdMessage.message);
     }
diff --git a/src/apes/MediaSharedApe.js b/src/apes/MediaSharedApe.js
index 8ad406e..c18a704 100644
--- a/src/apes/MediaSharedApe.js
+++ b/src/apes/MediaSharedApe.js
@@ -405,6 +405,7 @@ class MediaSharedApe extends Ape {
                   getMediaPackFullInfo.mediaVolume==this.lastActiveData.mediaVolume){
                   let timeDistance=Math.abs(new Date().getTime()-parseInt(this.lastActiveData.time))/1000;
                   let seekDistance=Math.abs(getMediaPackFullInfo.seek-this.lastActiveData.seek)-timeDistance;
+                  seekDistance=Math.abs(seekDistance);
                   if(seekDistance<=5){
                     //记录最后一次的数据
                     loger.warn("媒体共享更新数据->数据只有SEEK发生改变,低于5秒不需要再更新->timeDistance:"+timeDistance+"->seekDistance"+seekDistance);
diff --git a/src/apes/MusicSharedApe.js b/src/apes/MusicSharedApe.js
index e055841..0757d94 100644
--- a/src/apes/MusicSharedApe.js
+++ b/src/apes/MusicSharedApe.js
@@ -399,10 +399,11 @@ class MusicSharedApe extends Ape {
         if(this.lastActiveData&&this.lastActiveData.status==1){
           if(getMusicPackFullInfo&&
             getMusicPackFullInfo.status==1&&
-            getMusicPackFullInfo.mediaVolume==this.lastActiveData.mediaVolume){
+            getMusicPackFullInfo.musicVolume==this.lastActiveData.musicVolume){
   
             let timeDistance=Math.abs(new Date().getTime()-parseInt(this.lastActiveData.time))/1000;
             let seekDistance=Math.abs(getMusicPackFullInfo.seek-this.lastActiveData.seek)-timeDistance;
+            seekDistance=Math.abs(seekDistance);
             if(seekDistance<5){
               //记录最后一次的数据
               loger.warn("伴音更新数据->数据只有SEEK发生改变,低于5秒不需要再更新->timeDistance:"+timeDistance+"->seekDistance"+seekDistance);
diff --git a/src/apes/ThirdMessage.js b/src/apes/ThirdMessage.js
index abbeb3e..aec9792 100644
--- a/src/apes/ThirdMessage.js
+++ b/src/apes/ThirdMessage.js
@@ -26,8 +26,15 @@ class ThirdMessage extends Emiter{
       return;
     }
     if(this.messenger){
+      let sendMsg="";
+      //尝试转换为JSON 字符串
+      try{
+        sendMsg=JSON.stringify(_msg);
+      }catch (err){
+        sendMsg=_msg;
+      }
       loger.log('发送消息给父级页面->',_msg);
-      this.messenger.send(_msg);
+      this.messenger.send(sendMsg);
     }
   }
   //收到父级页面的消息
--
libgit2 0.24.0