李勇

1.文档模块新增默认显示的文档选择功能,不需要客户端自己选择,解决客户端自己选择导致不同步的问题

此 diff 太大无法显示。
... ... @@ -26,7 +26,7 @@ import ArrayBufferUtil from 'libs/ArrayBufferUtil';
import UTF8 from 'utf-8';
let loger = Loger.getLoger('MessageEntrance');
let _sdkInfo = {"version": "v.1.8.7.20170405-1", "author": "www.3mang.com"};
let _sdkInfo = {"version": "v.1.8.8.20170406-4", "author": "www.3mang.com"};
//APE
let _sass;
... ...
... ... @@ -177,7 +177,7 @@ export default class Ape extends Emiter {
this.tableUpdateHandler(tableItem.owner, tableItem.itemIdx, tableItem.itemData,seekTime);
}
//白板数据内部自己处理数组
//白板,文档数据数组内部自己处理数组
this.tableUpdateApeHandler(tableUpdateItems);
break;
case pdu.RCPDU_REG_QUEUE_UPDATE_PDU:
... ...
... ... @@ -22,512 +22,559 @@ import GlobalConfig from 'GlobalConfig';
import EngineUtils from 'EngineUtils';
let loger = Loger.getLoger('DocApe');
let itemIdx=0;//table插入新数据的计数id,目前用时间戳
let itemIdx = 0;//table插入新数据的计数id,目前用时间戳
class DocApe extends Ape {
constructor() {
super(
ApeConsts.DOCSHARING_SESSION_ID,
ApeConsts.DOCSHARING_SESSION_NAME,
ApeConsts.DOCSHARING_SESSION_TAG
);
this.docList = {};//记录文档的数组this.docList[itemIdx]=itemIdx的数据
//this.activeDocItemIdx =0;//当前激活的文档itemIdx
//this.activeDocCurPage=1;//当前激活的文档的当前页
// Ape Models
this.registerKey(this._session_id, this._session_name, this._session_tag, new ArrayBuffer);
this.registerObj(pdu.RCPDU_REG_REGISTER_TABLE, ApeConsts.DOCSHARING_OBJ_TABLE_ID, ApeConsts.DOCSHARING_OBJ_TABLE_NAME, ApeConsts.DOCSHARING_OBJ_TABLE_TAG, 0, new ArrayBuffer);
//this.registerObj(pdu.RCPDU_REG_REGISTER_TABLE, ApeConsts.DOCSHARING_OBJ_TABLE_ID_H5, ApeConsts.DOCSHARING_OBJ_TABLE_NAME_H5, ApeConsts.DOCSHARING_OBJ_TABLE_TAG_H5, 0, new ArrayBuffer);
}
/////////////发送数据操作//////////////////////////////////////////////////////
//上传文档
documentUpload(paramInfo){
if(paramInfo==null||EngineUtils.isEmptyObject(paramInfo)){
loger.log('documentUpload失败,参数错误');
this._emit(MessageTypes.MCU_ERROR,MessageTypes.ERR_APE_INTERFACE_PARAM_WRONG);
return ;
}
//判断文档是否已经存在,每个文档都有唯一的docId,如果已经同步的文档中存在相同的docId就不需要再同步
if(this.checkDocId(paramInfo.docId)){
//文档已经存在相同的docId,不需要同步上传
loger.warn('documentUpload 文档的docId不无效或已经存在相同的docId,不需要上传');
return;
constructor() {
super(
ApeConsts.DOCSHARING_SESSION_ID,
ApeConsts.DOCSHARING_SESSION_NAME,
ApeConsts.DOCSHARING_SESSION_TAG
);
this.docList = {};//记录文档的数组this.docList[itemIdx]=itemIdx的数据
//this.activeDocItemIdx =0;//当前激活的文档itemIdx
//this.activeDocCurPage=1;//当前激活的文档的当前页
// Ape Models
this.registerKey(this._session_id, this._session_name, this._session_tag, new ArrayBuffer);
this.registerObj(pdu.RCPDU_REG_REGISTER_TABLE, ApeConsts.DOCSHARING_OBJ_TABLE_ID, ApeConsts.DOCSHARING_OBJ_TABLE_NAME, ApeConsts.DOCSHARING_OBJ_TABLE_TAG, 0, new ArrayBuffer);
//this.registerObj(pdu.RCPDU_REG_REGISTER_TABLE, ApeConsts.DOCSHARING_OBJ_TABLE_ID_H5, ApeConsts.DOCSHARING_OBJ_TABLE_NAME_H5, ApeConsts.DOCSHARING_OBJ_TABLE_TAG_H5, 0, new ArrayBuffer);
}
itemIdx=EngineUtils.creatSoleNumberFromTimestamp();
let docDataModelPdu = this.packPdu(paramInfo,itemIdx);
if(docDataModelPdu==null){
loger.log('documentUpload失败,参数错误');
this._emit(MessageTypes.MCU_ERROR,MessageTypes.ERR_APE_INTERFACE_PARAM_WRONG);
return ;
}
//console.log(docDataModelPdu);
let tableItemPdu = new pdu['RCRegistryTableItemPdu'];
tableItemPdu.itemIdx=itemIdx;//直接用时间戳作为id
tableItemPdu.registerObjId=ApeConsts.DOCSHARING_OBJ_TABLE_ID;// tableItemPdu.registerObjId=ApeConsts.DOCSHARING_OBJ_TABLE_ID_H5;
tableItemPdu.owner = 0;//收到flash的是这个值,不清楚先写固定
tableItemPdu.itemData =docDataModelPdu.toArrayBuffer();
//insert
let tableInsertItemPdu = new pdu['RCRegistryTableInsertItemPdu'];
//optional RCPduType_E type = 1 [default = RCPDU_REG_TABLE_UPDATE_PDU];
//repeated RCRegistryTableItemPdu items = 2;
tableInsertItemPdu.type = pdu.RCPDU_REG_TABLE_INSERT_PDU;//
tableInsertItemPdu.items.push(tableItemPdu);
let updateObjPdu = new pdu['RCRegistryUpdateObjPdu'];
updateObjPdu.objId = ApeConsts.DOCSHARING_OBJ_TABLE_ID;// updateObjPdu.objId = ApeConsts.DOCSHARING_OBJ_TABLE_ID_H5;
updateObjPdu.subType = tableInsertItemPdu.type;
updateObjPdu.userData = tableInsertItemPdu.toArrayBuffer();
//同步
let adapterItemPdu = new pdu['RCAdapterItemPdu'];
adapterItemPdu.type = pdu.RCPDU_REG_UPDATE_OBJ;
adapterItemPdu.itemData = updateObjPdu.toArrayBuffer();
let adapterPdu = new pdu['RCAdapterPdu'];
adapterPdu.type = pdu.RCPDU_REG_ADAPTER;
adapterPdu.item.push(adapterItemPdu);
loger.log("文档upload tableItemPdu.itemIdx="+tableItemPdu.itemIdx);
this.sendUniform(adapterPdu,true);
}
updaterDoc(_docDataModel,_itemIdx){
//loger.log("文档===updaterDoc ",_itemIdx);
//验证坐标点集合数组是否合法
if(_docDataModel==null||_itemIdx==null){
this._emit(MessageTypes.MCU_ERROR,MessageTypes.ERR_APE_INTERFACE_PARAM_WRONG);
return null;
}
loger.log("文档===updaterDoc ",_docDataModel);
let docDataModelPdu=this.packPdu(_docDataModel,_itemIdx);
let tableItemPdu = new pdu['RCRegistryTableItemPdu'];
tableItemPdu.itemIdx=_itemIdx;//直接用时间戳作为id
//tableItemPdu.registerObjId=ApeConsts.DOCSHARING_OBJ_TABLE_ID;// tableItemPdu.registerObjId=ApeConsts.DOCSHARING_OBJ_TABLE_ID_H5;
tableItemPdu.owner = 0;//收到flash的是这个值,不清楚先写固定
tableItemPdu.itemData =docDataModelPdu.toArrayBuffer();
//insert
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.DOCSHARING_OBJ_TABLE_ID;// updateObjPdu.objId = ApeConsts.DOCSHARING_OBJ_TABLE_ID_H5;
updateObjPdu.subType = tableInsertItemPdu.type;
updateObjPdu.userData = tableInsertItemPdu.toArrayBuffer();
//同步
let adapterItemPdu = new pdu['RCAdapterItemPdu'];
adapterItemPdu.type = pdu.RCPDU_REG_UPDATE_OBJ;
adapterItemPdu.itemData = updateObjPdu.toArrayBuffer();
let adapterPdu = new pdu['RCAdapterPdu'];
adapterPdu.type = pdu.RCPDU_REG_ADAPTER;
adapterPdu.item.push(adapterItemPdu);
loger.log("发送更新文档.itemIdx="+tableItemPdu.itemIdx);
this.sendUniform(adapterPdu,true);
}
//获取文档的图片完整地址
getDocImageFullPath(_param){
if(_param==null||_param.relativeUrl==null||_param.relativeUrl==""){
loger.warn('获取文档完整地址,传递的参数不对.',_param);
return [];
/////////////发送数据操作//////////////////////////////////////////////////////
//上传文档
documentUpload(paramInfo) {
if (paramInfo == null || EngineUtils.isEmptyObject(paramInfo)) {
loger.log('documentUpload失败,参数错误');
this._emit(MessageTypes.MCU_ERROR, MessageTypes.ERR_APE_INTERFACE_PARAM_WRONG);
return;
}
//判断文档是否已经存在,每个文档都有唯一的docId,如果已经同步的文档中存在相同的docId就不需要再同步
if (this.checkDocId(paramInfo.docId)) {
//文档已经存在相同的docId,不需要同步上传
loger.warn('documentUpload 文档的docId不无效或已经存在相同的docId,不需要上传');
return;
}
itemIdx = EngineUtils.creatSoleNumberFromTimestamp();
let docDataModelPdu = this.packPdu(paramInfo, itemIdx);
if (docDataModelPdu == null) {
loger.log('documentUpload失败,参数错误');
this._emit(MessageTypes.MCU_ERROR, MessageTypes.ERR_APE_INTERFACE_PARAM_WRONG);
return;
}
//console.log(docDataModelPdu);
let tableItemPdu = new pdu['RCRegistryTableItemPdu'];
tableItemPdu.itemIdx = itemIdx;//直接用时间戳作为id
tableItemPdu.registerObjId = ApeConsts.DOCSHARING_OBJ_TABLE_ID;// tableItemPdu.registerObjId=ApeConsts.DOCSHARING_OBJ_TABLE_ID_H5;
tableItemPdu.owner = 0;//收到flash的是这个值,不清楚先写固定
tableItemPdu.itemData = docDataModelPdu.toArrayBuffer();
//insert
let tableInsertItemPdu = new pdu['RCRegistryTableInsertItemPdu'];
//optional RCPduType_E type = 1 [default = RCPDU_REG_TABLE_UPDATE_PDU];
//repeated RCRegistryTableItemPdu items = 2;
tableInsertItemPdu.type = pdu.RCPDU_REG_TABLE_INSERT_PDU;//
tableInsertItemPdu.items.push(tableItemPdu);
let updateObjPdu = new pdu['RCRegistryUpdateObjPdu'];
updateObjPdu.objId = ApeConsts.DOCSHARING_OBJ_TABLE_ID;// updateObjPdu.objId = ApeConsts.DOCSHARING_OBJ_TABLE_ID_H5;
updateObjPdu.subType = tableInsertItemPdu.type;
updateObjPdu.userData = tableInsertItemPdu.toArrayBuffer();
//同步
let adapterItemPdu = new pdu['RCAdapterItemPdu'];
adapterItemPdu.type = pdu.RCPDU_REG_UPDATE_OBJ;
adapterItemPdu.itemData = updateObjPdu.toArrayBuffer();
let adapterPdu = new pdu['RCAdapterPdu'];
adapterPdu.type = pdu.RCPDU_REG_ADAPTER;
adapterPdu.item.push(adapterItemPdu);
loger.log("文档upload tableItemPdu.itemIdx=" + tableItemPdu.itemIdx);
this.sendUniform(adapterPdu, true);
}
let port = (GlobalConfig.DOCServerPort == "" || GlobalConfig.DOCServerPort == null) ? "":":" + GlobalConfig.DOCServerPort;
let fullPath=GlobalConfig.DOCServerIP+port+_param.relativeUrl;
if(fullPath&&fullPath.indexOf("http://")<0){
fullPath="http://"+fullPath;
updaterDoc(_docDataModel, _itemIdx) {
//loger.log("文档===updaterDoc ",_itemIdx);
//验证坐标点集合数组是否合法
if (_docDataModel == null || _itemIdx == null) {
this._emit(MessageTypes.MCU_ERROR, MessageTypes.ERR_APE_INTERFACE_PARAM_WRONG);
return null;
}
loger.log("文档===updaterDoc ", _docDataModel);
let docDataModelPdu = this.packPdu(_docDataModel, _itemIdx);
let tableItemPdu = new pdu['RCRegistryTableItemPdu'];
tableItemPdu.itemIdx = _itemIdx;//直接用时间戳作为id
//tableItemPdu.registerObjId=ApeConsts.DOCSHARING_OBJ_TABLE_ID;// tableItemPdu.registerObjId=ApeConsts.DOCSHARING_OBJ_TABLE_ID_H5;
tableItemPdu.owner = 0;//收到flash的是这个值,不清楚先写固定
tableItemPdu.itemData = docDataModelPdu.toArrayBuffer();
//insert
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.DOCSHARING_OBJ_TABLE_ID;// updateObjPdu.objId = ApeConsts.DOCSHARING_OBJ_TABLE_ID_H5;
updateObjPdu.subType = tableInsertItemPdu.type;
updateObjPdu.userData = tableInsertItemPdu.toArrayBuffer();
//同步
let adapterItemPdu = new pdu['RCAdapterItemPdu'];
adapterItemPdu.type = pdu.RCPDU_REG_UPDATE_OBJ;
adapterItemPdu.itemData = updateObjPdu.toArrayBuffer();
let adapterPdu = new pdu['RCAdapterPdu'];
adapterPdu.type = pdu.RCPDU_REG_ADAPTER;
adapterPdu.item.push(adapterItemPdu);
loger.log("发送更新文档.itemIdx=" + tableItemPdu.itemIdx);
this.sendUniform(adapterPdu, true);
}
var fileType="jpg";
switch (_param.type){
case "jpg":
fileType="jpg";
fullPath=this.replacePathType(fullPath)+".jpg";
break;
case "png":
fileType="png";
fullPath=this.replacePathType(fullPath)+".png";
break;
default :
//不做处理,直接返回拼接的地址
break;
//获取文档的图片完整地址
getDocImageFullPath(_param) {
if (_param == null || _param.relativeUrl == null || _param.relativeUrl == "") {
loger.warn('获取文档完整地址,传递的参数不对.', _param);
return [];
}
let port = (GlobalConfig.DOCServerPort == "" || GlobalConfig.DOCServerPort == null) ? "" : ":" + GlobalConfig.DOCServerPort;
let fullPath = GlobalConfig.DOCServerIP + port + _param.relativeUrl;
if (fullPath && fullPath.indexOf("http://") < 0) {
fullPath = "http://" + fullPath;
}
var fileType = "jpg";
switch (_param.type) {
case "jpg":
fileType = "jpg";
fullPath = this.replacePathType(fullPath) + ".jpg";
break;
case "png":
fileType = "png";
fullPath = this.replacePathType(fullPath) + ".png";
break;
default :
//不做处理,直接返回拼接的地址
break;
}
if (_param.pageNum && parseInt(_param.pageNum) > 1) {
//如果是多页的,需要返回序列
var lastIndex = fullPath.lastIndexOf("/");
if (lastIndex > 0) {
let newPath = fullPath.substr(0, lastIndex);
let pathArr = [];
//页数从1开始
for (let i = 1; i <= _param.pageNum; i++) {
pathArr.push(newPath + "/" + i + "." + fileType);
}
return pathArr;
} else {
return [fullPath];
}
} else {
return [fullPath];
}
}
if(_param.pageNum&&parseInt(_param.pageNum)>1){
//如果是多页的,需要返回序列
var lastIndex=fullPath.lastIndexOf("/");
if(lastIndex>0){
let newPath=fullPath.substr(0,lastIndex);
let pathArr=[];
//页数从1开始
for(let i=1;i<=_param.pageNum;i++){
pathArr.push(newPath+"/"+i+"."+fileType);
}
return pathArr;
}else {
//获取文档的pdf完整地址
getDocPDFFullPath(_param) {
if (_param == null || _param.relativeUrl == null || _param.relativeUrl == "") {
loger.warn('获取文档完整地址,传递的参数不对.', _param);
return [];
}
let port = (GlobalConfig.DOCServerPort == "" || GlobalConfig.DOCServerPort == null) ? "" : ":" + GlobalConfig.DOCServerPort;
let fullPath = GlobalConfig.DOCServerIP + port + _param.relativeUrl;
if (fullPath && fullPath.indexOf("http://") < 0) {
fullPath = "http://" + fullPath;
}
fullPath = this.replacePathType(fullPath) + ".pdf";
return [fullPath];
}
}else {
return [fullPath];
}
}
//获取文档的pdf完整地址
getDocPDFFullPath(_param){
if(_param==null||_param.relativeUrl==null||_param.relativeUrl==""){
loger.warn('获取文档完整地址,传递的参数不对.',_param);
return [];
}
let port = (GlobalConfig.DOCServerPort == "" || GlobalConfig.DOCServerPort == null) ? "":":" + GlobalConfig.DOCServerPort;
let fullPath=GlobalConfig.DOCServerIP+port+_param.relativeUrl;
if(fullPath&&fullPath.indexOf("http://")<0){
fullPath="http://"+fullPath;
}
fullPath=this.replacePathType(fullPath)+".pdf";
return [fullPath];
}
// 去除文件的后缀格式名称
replacePathType(_path){
let path=_path;
path=path.replace(/.jpg/g,"");
path=path.replace(/.png/g,"");
path=path.replace(/.swf/g,"");
path=path.replace(/.pdf/g,"");
return path;
}
//切换文档
documentSwitchDoc(paramInfo){
loger.log('切换文档,documentSwitchDoc');
loger.log(paramInfo);
if(paramInfo==null||paramInfo.itemIdx==null){
loger.warn('documentSwitch失败,参数错误',paramInfo);
this._emit(MessageTypes.MCU_ERROR,MessageTypes.ERR_APE_INTERFACE_PARAM_WRONG);
return;
// 去除文件的后缀格式名称
replacePathType(_path) {
let path = _path;
path = path.replace(/.jpg/g, "");
path = path.replace(/.png/g, "");
path = path.replace(/.swf/g, "");
path = path.replace(/.pdf/g, "");
return path;
}
if(paramInfo.itemIdx==GlobalConfig.activeDocId&&GlobalConfig.activeDocId!=0){
loger.warn('文档已经显示',paramInfo.itemIdx,GlobalConfig.activeDocId);
return;
}
//切换文档
documentSwitchDoc(paramInfo) {
loger.log('切换文档,documentSwitchDoc->', paramInfo);
//更新切换之前的文档的数据,要显示当前切换的文档,上一个文档需要隐藏
let oldDocModel;
if(GlobalConfig.activeDocId!=0){
oldDocModel=this.docList[GlobalConfig.activeDocId];
if(oldDocModel){
oldDocModel.action=ApeConsts.DOC_ACTION_NORMAL;
oldDocModel.visible=false;//设置为不可见
}
}
if (GlobalConfig.isRecordPlayBack) {
loger.warn('录制回放状态不允许切换文档');
return;
}
//获取已经存在的数据
let docDataModel= this.docList[paramInfo.itemIdx];
if(docDataModel==null){
loger.warn('documentSwitch失败,文档不存在',paramInfo);
this._emit(MessageTypes.MCU_ERROR,MessageTypes.ERR_APE_INTERFACE_PARAM_WRONG);
return;
}
if (paramInfo == null || paramInfo.itemIdx == null) {
loger.warn('documentSwitch失败,参数错误', paramInfo);
this._emit(MessageTypes.MCU_ERROR, MessageTypes.ERR_APE_INTERFACE_PARAM_WRONG);
return;
}
//更新当前选择的文档数据的字段
docDataModel.action=ApeConsts.DOC_ACTION_SWITCH_DOC;
docDataModel.visible=paramInfo.visible||false;//默认是false
if (paramInfo.itemIdx == GlobalConfig.activeDocId && GlobalConfig.activeDocId != 0) {
loger.warn('文档已经显示', paramInfo.itemIdx, GlobalConfig.activeDocId);
return;
}
//loger.log('切换文档,当前文档和上一个显示的文档都需要更新状态');
loger.log({"oldDoc":oldDocModel,"nowDoc":docDataModel});
//更新当前选择的文档
this.updaterDoc(docDataModel,docDataModel.itemIdx);
//更新切换之前的文档的数据,要显示当前切换的文档,上一个文档需要隐藏
let oldDocModel;
if (GlobalConfig.activeDocId != 0) {
oldDocModel = this.docList[GlobalConfig.activeDocId];
if (oldDocModel) {
oldDocModel.action = ApeConsts.DOC_ACTION_NORMAL;
oldDocModel.visible = false;//设置为不可见
}
}
//更新上一个文档 隐藏
if(oldDocModel){
this.updaterDoc(oldDocModel,oldDocModel.itemIdx);
}
}
//文档翻页
documentSwitchPage(paramInfo){
loger.log('文档翻页,documentSwitchPage');
loger.log(paramInfo);
//console.log(this.docList);
//获取已经存在的数据
let docDataModel= this.docList[paramInfo.itemIdx];
//console.log(docDataModelPdu);
//console.log(docDataModel);
if(docDataModel==null){
loger.log('documentSwitchPage->,文档不存在',paramInfo);
this._emit(MessageTypes.MCU_ERROR,MessageTypes.ERR_APE_INTERFACE_PARAM_WRONG);
return;
//获取已经存在的数据
let docDataModel = this.docList[paramInfo.itemIdx];
if (docDataModel == null) {
loger.warn('documentSwitch失败,文档不存在', paramInfo);
this._emit(MessageTypes.MCU_ERROR, MessageTypes.ERR_APE_INTERFACE_PARAM_WRONG);
return;
}
//更新当前选择的文档数据的字段
docDataModel.action = ApeConsts.DOC_ACTION_SWITCH_DOC;
docDataModel.visible = paramInfo.visible || false;//默认是false
//loger.log('切换文档,当前文档和上一个显示的文档都需要更新状态');
loger.log({"oldDoc": oldDocModel, "nowDoc": docDataModel});
//更新当前选择的文档
this.updaterDoc(docDataModel, docDataModel.itemIdx);
//更新上一个文档 隐藏
if (oldDocModel) {
this.updaterDoc(oldDocModel, oldDocModel.itemIdx);
}
}
//更新数据的字段
docDataModel.action=ApeConsts.DOC_ACTION_SWITCH_PAGE;
docDataModel.curPageNo=parseInt(paramInfo.curPageNo)||1;
if(docDataModel.curPageNo<1){
docDataModel.curPageNo=1;//默认值最小是1
//文档翻页
documentSwitchPage(paramInfo) {
loger.log('文档翻页,documentSwitchPage');
loger.log(paramInfo);
//console.log(this.docList);
//获取已经存在的数据
let docDataModel = this.docList[paramInfo.itemIdx];
//console.log(docDataModelPdu);
//console.log(docDataModel);
if (docDataModel == null) {
loger.log('documentSwitchPage->,文档不存在', paramInfo);
this._emit(MessageTypes.MCU_ERROR, MessageTypes.ERR_APE_INTERFACE_PARAM_WRONG);
return;
}
//更新数据的字段
docDataModel.action = ApeConsts.DOC_ACTION_SWITCH_PAGE;
docDataModel.curPageNo = parseInt(paramInfo.curPageNo) || 1;
if (docDataModel.curPageNo < 1) {
docDataModel.curPageNo = 1;//默认值最小是1
}
this.updaterDoc(docDataModel, docDataModel.itemIdx);
}
this.updaterDoc(docDataModel,docDataModel.itemIdx);
}
//文档切换显示模式
documentSwitchShowModel(paramInfo){
loger.log('documentSwitchShowModel',paramInfo);
//获取已经存在的数据
let docDataModel= this.docList[paramInfo.itemIdx];
if(docDataModel==null){
loger.log('documentSwitchShowModel->文档不存在',paramInfo);
this._emit(MessageTypes.MCU_ERROR,MessageTypes.ERR_APE_INTERFACE_PARAM_WRONG);
return;
//文档切换显示模式
documentSwitchShowModel(paramInfo) {
loger.log('documentSwitchShowModel', paramInfo);
//获取已经存在的数据
let docDataModel = this.docList[paramInfo.itemIdx];
if (docDataModel == null) {
loger.log('documentSwitchShowModel->文档不存在', paramInfo);
this._emit(MessageTypes.MCU_ERROR, MessageTypes.ERR_APE_INTERFACE_PARAM_WRONG);
return;
}
//更新数据的字段
docDataModel.action = ApeConsts.DOC_ACTION_SWITCH_PAGE;
docDataModel.curPageNo = parseInt(paramInfo.curPageNo) || 1;
if (docDataModel.curPageNo < 1) {
docDataModel.curPageNo = 1;//默认值最小是1
}
this.updaterDoc(docDataModel, docDataModel.itemIdx);
}
//更新数据的字段
docDataModel.action=ApeConsts.DOC_ACTION_SWITCH_PAGE;
docDataModel.curPageNo=parseInt(paramInfo.curPageNo)||1;
if(docDataModel.curPageNo<1){
docDataModel.curPageNo=1;//默认值最小是1
//缩放/滚动/显示模式
documentCommand(paramInfo) {
//获取已经存在的数据
let docDataModel = this.docList[paramInfo.itemIdx];
if (docDataModel == null) {
loger.log('documentCommand失败,文档不存在', paramInfo);
this._emit(MessageTypes.MCU_ERROR, MessageTypes.ERR_APE_INTERFACE_PARAM_WRONG);
return;
}
//更新数据的字段
docDataModel.action = ApeConsts.DOC_ACTION_COMMAND;
docDataModel.showType = parseInt(paramInfo.showType) || 0;//0;//完整显示;1;//按宽度显示;2;//按高度显示
this.updaterDoc(docDataModel, docDataModel.itemIdx);
}
this.updaterDoc(docDataModel,docDataModel.itemIdx);
}
//缩放/滚动/显示模式
documentCommand(paramInfo){
//获取已经存在的数据
let docDataModel= this.docList[paramInfo.itemIdx];
if(docDataModel==null){
loger.log('documentCommand失败,文档不存在',paramInfo);
this._emit(MessageTypes.MCU_ERROR,MessageTypes.ERR_APE_INTERFACE_PARAM_WRONG);
return;
//删除所有文档
documentDeleteAll(_param) {
for (let key in this.docList) {
//console.log("key:"+key);
loger.log("删除文档数据,itemIdx:" + key);
this.documentDelete({"itemIdx": key});
}
}
//更新数据的字段
docDataModel.action=ApeConsts.DOC_ACTION_COMMAND;
docDataModel.showType=parseInt(paramInfo.showType)||0;//0;//完整显示;1;//按宽度显示;2;//按高度显示
this.updaterDoc(docDataModel,docDataModel.itemIdx);
}
//删除所有文档
documentDeleteAll(_param){
for (let key in this.docList){
//console.log("key:"+key);
loger.log("删除文档数据,itemIdx:"+key);
this.documentDelete({"itemIdx":key});
//删除文档
documentDelete(paramInfo) {
//{"itemIdx":itemIdx}
let tableDeleteItemPdu = new pdu['RCRegistryTableDeleteItemPdu'];
//optional RCPduType_E type = 1 [default = RCPDU_REG_TABLE_DELETE_PDU];
// repeated uint32 item_idx = 2;
tableDeleteItemPdu.type = pdu.RCPDU_REG_TABLE_DELETE_PDU;//
tableDeleteItemPdu.itemIdx = parseInt(paramInfo.itemIdx);//这里需要设置要删除的数据的itemIdx,每条数据的这个id都不一样
let updateObjPdu = new pdu['RCRegistryUpdateObjPdu'];
updateObjPdu.objId = ApeConsts.DOCSHARING_OBJ_TABLE_ID;// updateObjPdu.objId = ApeConsts.DOCSHARING_OBJ_TABLE_ID_H5;
updateObjPdu.subType = tableDeleteItemPdu.type;
updateObjPdu.userData = tableDeleteItemPdu.toArrayBuffer();
//同步
let adapterItemPdu = new pdu['RCAdapterItemPdu'];
adapterItemPdu.type = pdu.RCPDU_REG_UPDATE_OBJ;
adapterItemPdu.itemData = updateObjPdu.toArrayBuffer();
let adapterPdu = new pdu['RCAdapterPdu'];
adapterPdu.type = pdu.RCPDU_REG_ADAPTER;
adapterPdu.item.push(adapterItemPdu);
loger.log("文档发送删除数据=============" + tableDeleteItemPdu.itemIdx);
this.sendUniform(adapterPdu, true);
}
}
//删除文档
documentDelete(paramInfo){
//{"itemIdx":itemIdx}
let tableDeleteItemPdu = new pdu['RCRegistryTableDeleteItemPdu'];
//optional RCPduType_E type = 1 [default = RCPDU_REG_TABLE_DELETE_PDU];
// repeated uint32 item_idx = 2;
tableDeleteItemPdu.type = pdu.RCPDU_REG_TABLE_DELETE_PDU;//
tableDeleteItemPdu.itemIdx=parseInt(paramInfo.itemIdx);//这里需要设置要删除的数据的itemIdx,每条数据的这个id都不一样
let updateObjPdu = new pdu['RCRegistryUpdateObjPdu'];
updateObjPdu.objId = ApeConsts.DOCSHARING_OBJ_TABLE_ID;// updateObjPdu.objId = ApeConsts.DOCSHARING_OBJ_TABLE_ID_H5;
updateObjPdu.subType = tableDeleteItemPdu.type;
updateObjPdu.userData = tableDeleteItemPdu.toArrayBuffer();
//同步
let adapterItemPdu = new pdu['RCAdapterItemPdu'];
adapterItemPdu.type = pdu.RCPDU_REG_UPDATE_OBJ;
adapterItemPdu.itemData = updateObjPdu.toArrayBuffer();
let adapterPdu = new pdu['RCAdapterPdu'];
adapterPdu.type = pdu.RCPDU_REG_ADAPTER;
adapterPdu.item.push(adapterItemPdu);
loger.log("文档发送删除数据============="+tableDeleteItemPdu.itemIdx);
this.sendUniform(adapterPdu,true);
}
/////收到消息处理/////////////////////////////////////////////////////////////////////////////////
tableInsertHandler(owner, itemIdx, itemData) {
//this.tableUpdateHandler(owner, tableId, itemData);
//loger.log('tableInsertHandler---',itemData);
let itemDataInfo = this.unPackPdu(owner, itemIdx, itemData);
this.docList[itemIdx] = itemDataInfo;
if(itemDataInfo.visible=="true"||itemDataInfo.visible==true){
GlobalConfig.activeDocId=itemDataInfo.itemIdx;//当前激活的文档ID
GlobalConfig.activeDocCurPage=itemDataInfo.curPageNo;//当前激活的文档的当前页
loger.log('tableInsertHandler 设置当前激活的文档id');
/////收到消息处理/////////////////////////////////////////////////////////////////////////////////
tableInsertHandler(owner, itemIdx, itemData) {
//this.tableUpdateHandler(owner, tableId, itemData);
//loger.log('tableInsertHandler---',itemData);
let itemDataInfo = this.unPackPdu(owner, itemIdx, itemData);
this.docList[itemIdx] = itemDataInfo;
if (itemDataInfo.visible == "true" || itemDataInfo.visible == true) {
GlobalConfig.activeDocId = itemDataInfo.itemIdx;//当前激活的文档ID
GlobalConfig.activeDocCurPage = itemDataInfo.curPageNo;//当前激活的文档的当前页
loger.log('tableInsertHandler 设置当前激活的文档id');
}
loger.log('tableInsertHandler->', itemDataInfo);
this._emit(MessageTypes.DOC_UPDATE, itemDataInfo);//用添加和更新都统一DOC_UPDATE
//文档数据更新完毕,如果当前没有显示的文档,默认选择一个显示
if (GlobalConfig.activeDocId < 1 && itemDataInfo) {
let paramInfo = {
"itemIdx": itemDataInfo.itemIdx,
"visible": true
};
this.documentSwitchDoc(paramInfo);
}
}
loger.log('tableInsertHandler 发送给客户端');
loger.log(itemDataInfo);
this._emit(MessageTypes.DOC_UPDATE,itemDataInfo);//用添加和更新都统一DOC_UPDATE
}
tableDeleteHandler(object_id, tableDeleteData){
loger.log('tableDeleteHandler',object_id,tableDeleteData);//["tableDeleteHandler",1179649,{"type":231,"itemIdx":[1486301768]}]
if(tableDeleteData&&tableDeleteData.itemIdx){
let len=tableDeleteData.itemIdx.length;
let itemIdxs=tableDeleteData.itemIdx;
for (let i=0;i<len;i++){
if(this.docList[itemIdxs[i]]){
loger.log("删除文档数据:",itemIdxs[i]);
//this._emit(MessageTypes.DOC_DELETE, {"itemIdx": itemIdxs[i]});
let itemDataInfo=this.docList[itemIdxs[i]];
if(itemDataInfo&&(itemDataInfo.visible=="true"||itemDataInfo.visible==true)){
GlobalConfig.activeDocId=0;//当前激活的文档ID
GlobalConfig.activeDocCurPage=1;//当前激活的文档的当前页
loger.log('tableDeleteHandler 设置当前激活的文档id');
}
this._emit(MessageTypes.DOC_DELETE, {"itemIdx": itemIdxs[i]});
delete this.docList[itemIdxs[i]];
}
}
tableDeleteHandler(object_id, tableDeleteData) {
loger.log('tableDeleteHandler', object_id, tableDeleteData);//["tableDeleteHandler",1179649,{"type":231,"itemIdx":[1486301768]}]
if (tableDeleteData && tableDeleteData.itemIdx) {
let len = tableDeleteData.itemIdx.length;
let itemIdxs = tableDeleteData.itemIdx;
for (let i = 0; i < len; i++) {
if (this.docList[itemIdxs[i]]) {
loger.log("删除文档数据:", itemIdxs[i]);
//this._emit(MessageTypes.DOC_DELETE, {"itemIdx": itemIdxs[i]});
let itemDataInfo = this.docList[itemIdxs[i]];
if (itemDataInfo && (itemDataInfo.visible == "true" || itemDataInfo.visible == true)) {
GlobalConfig.activeDocId = 0;//当前激活的文档ID
GlobalConfig.activeDocCurPage = 1;//当前激活的文档的当前页
loger.log('tableDeleteHandler->当前显示的文档');
}
this._emit(MessageTypes.DOC_DELETE, {"itemIdx": itemIdxs[i]});
delete this.docList[itemIdxs[i]];
}
}
}
}
}
tableUpdateHandler(owner, itemIdx, itemData) {
//let itemDataInfo = pdu['RCDocSendDataRequestPdu'].decode(itemData);
let itemDataInfo = this.unPackPdu(owner, itemIdx, itemData);
if(itemDataInfo!=null){
this.docList[itemIdx] = itemDataInfo;
/* switch (itemDataInfo.action){
case DOC_ACTION_SWITCH_DOC:
break;
case DOC_ACTION_COMMAND:
break;
case DOC_ACTION_NORMAL:
break;
default :
break;
}*/
//GlobalConfig.activeDocId=0;//默认id
// GlobalConfig.activeDocCurPage=1;//默认页数
if(itemDataInfo&&(itemDataInfo.visible=="true"||itemDataInfo.visible==true)){
GlobalConfig.activeDocId=itemDataInfo.itemIdx;//当前激活的文档ID
GlobalConfig.activeDocCurPage=itemDataInfo.curPageNo;//当前激活的文档的当前页
loger.log('tableUpdateHandler 设置当前激活的文档id');
}
loger.log('tableUpdateHandler 发送给客户端');
loger.log(itemDataInfo);
this._emit(MessageTypes.DOC_UPDATE,itemDataInfo);
}else {
loger.log('tableUpdateHandler 数据无效--> itemIdx',itemIdx);
tableUpdateHandler(owner, itemIdx, itemData) {
//这个方法废弃,更新用tableUpdateApeHandler方法
/* let itemDataInfo = this.unPackPdu(owner, itemIdx, itemData);
if(itemDataInfo!=null){
this.docList[itemIdx] = itemDataInfo;
if(itemDataInfo&&(itemDataInfo.visible=="true"||itemDataInfo.visible==true)){
GlobalConfig.activeDocId=itemDataInfo.itemIdx;//当前激活的文档ID
GlobalConfig.activeDocCurPage=itemDataInfo.curPageNo;//当前激活的文档的当前页
loger.log('tableUpdateHandler 设置当前激活的文档id');
}
loger.log('tableUpdateHandler 发送给客户端');
loger.log(itemDataInfo);
this._emit(MessageTypes.DOC_UPDATE,itemDataInfo);
}else {
loger.log('tableUpdateHandler 数据无效--> itemIdx',itemIdx);
}*/
}
}
onJoinChannelHandlerSuccess(){
loger.log(this._session_name + ' onJoinChannelHandlerSuccess===========================');
if (this._apeDelayed) {
// this._apeDelayedMsgs.push(regBuffer);
// this._apeDelayedStart();
setTimeout(() => {
this._emit(DocApe.DOC_JOIN_CHANNEL_SUCCESS);
},(GlobalConfig.mcuDelay+GlobalConfig.docDelay)|| 12000+GlobalConfig.docDelay);
}else {
setTimeout(() => {
this._emit(DocApe.DOC_JOIN_CHANNEL_SUCCESS);
},GlobalConfig.docDelay);
tableUpdateApeHandler(_tableUpdateItems, _seekTime) {
let tableUpdateItemsLen = _tableUpdateItems.length;
loger.log('tableUpdateApeHandler', "activeDocId->", GlobalConfig.activeDocId, "tableUpdateItemsLen->", tableUpdateItemsLen);
for (let i = 0; i < tableUpdateItemsLen; ++i) {
let tableItem = _tableUpdateItems[i];
let itemDataInfo = this.unPackPdu(tableItem.owner, tableItem.itemIdx, tableItem.itemData);
if (itemDataInfo != null) {
this.docList[tableItem.itemIdx] = itemDataInfo;
if (itemDataInfo && (itemDataInfo.visible == "true" || itemDataInfo.visible == true)) {
GlobalConfig.activeDocId = itemDataInfo.itemIdx;//当前激活的文档ID
GlobalConfig.activeDocCurPage = itemDataInfo.curPageNo;//当前激活的文档的当前页
loger.log('tableUpdateHandler 设置当前激活的文档id->', GlobalConfig.activeDocId, "curPageNum->", GlobalConfig.activeDocCurPage);
}
loger.log('doc->', itemDataInfo);
this._emit(MessageTypes.DOC_UPDATE, itemDataInfo);
} else {
loger.log('tableUpdateHandler 数据无效--> itemIdx', itemIdx);
}
}
this._showDefaultDoc();
}
}
//检查文档是否已经存在,如果存在 返回true,否则返回false
checkDocId(_docId){
if(_docId==null){
loger.warn('checkDocId _docId参数为null');
return true;
//果当前没有显示的文档,默认选择一个显示文档
_showDefaultDoc() {
//显示默认文档条件->1.非录制回放状态下 2.只有host有权限操作 3.当前激活的文档id不为0
if (GlobalConfig.isRecordPlayBack || !GlobalConfig.isHost || GlobalConfig.activeDocId > 0) {
return;
}
let tempDocItemIdx;//临时记录文档数据,用于显示默认文档
for (let key in this.docList) {
tempDocItemIdx= this.docList[key];
if (tempDocItemIdx) {
loger.log("选择一个文档作为默认文档显示->", tempDocItemIdx);
let paramInfo = {
"itemIdx": tempDocItemIdx,
"visible": true
};
this.documentSwitchDoc(paramInfo);
//选择完成就跳出循环
return;
}
}
}
//遍历查找
for (let key in this.docList){
let item=this.docList[key];
loger.log('item.docId==============_docId',item.docId,_docId);
if(item&&item.docId==_docId){
return true;
}
onJoinChannelHandlerSuccess() {
loger.log(this._session_name + ' onJoinChannelHandlerSuccess===========================');
if (this._apeDelayed) {
// this._apeDelayedMsgs.push(regBuffer);
// this._apeDelayedStart();
setTimeout(() => {
this._emit(DocApe.DOC_JOIN_CHANNEL_SUCCESS);
}, (GlobalConfig.mcuDelay + GlobalConfig.docDelay) || 12000 + GlobalConfig.docDelay);
} else {
setTimeout(() => {
this._emit(DocApe.DOC_JOIN_CHANNEL_SUCCESS);
}, GlobalConfig.docDelay);
}
}
//储存的数据中没有查找到
return false;
}
///////数据的封包和解包/////////////////////////////////////////
packPdu(_param,_itemIdx){
loger.log("文档===packPdu ");
//验证坐标点集合数组是否合法
if(_param==null||_itemIdx==null){
this._emit(MessageTypes.MCU_ERROR,MessageTypes.ERR_APE_INTERFACE_PARAM_WRONG);
return null;
//检查文档是否已经存在,如果存在 返回true,否则返回false
checkDocId(_docId) {
if (_docId == null) {
loger.warn('checkDocId _docId参数为null');
return true;
}
//遍历查找
for (let key in this.docList) {
let item = this.docList[key];
loger.log('item.docId==============_docId', item.docId, _docId);
if (item && item.docId == _docId) {
return true;
}
}
//储存的数据中没有查找到
return false;
}
/* message RCDocSendDataModelPdu {
required uint32 item_idx=1;//唯一标识
required uint32 owner=2;
optional uint32 from=3;
optional uint32 cur_page_no=4;
optional uint32 page_num =5;
optional string file_type=6;
optional string creat_user_id=7;//创建文档userid
optional string relative_url=8;//文档相对地址
optional string url =9;//文档地址
optional uint32 cur_V=10;
optional uint32 cur_H=11;
optional uint32 scale=12;
optional bool visible=13;
optional uint32 action=14;//0,无操作, 1翻页 /缩放/滚动、2.显示/隐藏
optional string doc_id=15;//文档在服务器数据库中的唯一id
optional string file_name=16;//文档的名字
optional string dynamic_TS=17;//"dynamicTransferStatic": "0"
optional string md5=18;//md5
optional uint32 show_type=19;//显示模式
}*/
//判断type类型,根据type设置不同的参数
let docModelPdu =new pdu['RCDocSendDataModelPdu'];
docModelPdu.itemIdx=_itemIdx;
docModelPdu.owner=GlobalConfig.nodeId;
docModelPdu.from=GlobalConfig.nodeId;
docModelPdu.curPageNo = _param.curPageNo||1;
docModelPdu.pageNum = _param.pageNum||1;
docModelPdu.fileType=_param.fileType||"";
docModelPdu.creatUserId=_param.creatUserId||"0";
docModelPdu.url ="";//这个地址没用到,数据太长占用资源 暂停使用//"http://101.200.150.192/DocSharing/data/h5test/20170206-171100025/7e9c4178cac1133e0dd9d5b583439122.jpg";
docModelPdu.relativeUrl=_param.relativeUrl||"";//"/DocSharing/data/h5test/20170206-171100025/7e9c4178cac1133e0dd9d5b583439122.jpg";
docModelPdu.curV=_param.curV||0;
docModelPdu.curH=_param.curH||0;
docModelPdu.scale=_param.scale||100;//按百分比
docModelPdu.visible= _param.visible||false;
docModelPdu.action=_param.action||ApeConsts.DOC_ACTION_NORMAL;//0,无操作, 1翻页、2.显示/隐藏, 3缩放/滚动
docModelPdu.docId=_param.docId||"";//文档在服务器数据库中的唯一id,必须有
docModelPdu.md5=_param.md5||"";//MD5
docModelPdu.fileName=_param.fileName||"doc_"+_itemIdx;//文档的名字
docModelPdu.dynamicTS=_param.dynamicTS||"0";//文档上传后返回值中的字段dynamicTransferStatic
docModelPdu.showType=_param.showType||0;//文档显示模式
loger.log(docModelPdu);
return docModelPdu;
}
unPackPdu(owner, itemIdx,itemData){
loger.log("文档===unPackPdu ");
if(owner==null||itemIdx==null||itemData==null){
this._emit(MessageTypes.MCU_ERROR,MessageTypes.ERR_APE_INTERFACE_PARAM_WRONG);
return null;
///////数据的封包和解包/////////////////////////////////////////
packPdu(_param, _itemIdx) {
loger.log("文档===packPdu ");
//验证坐标点集合数组是否合法
if (_param == null || _itemIdx == null) {
this._emit(MessageTypes.MCU_ERROR, MessageTypes.ERR_APE_INTERFACE_PARAM_WRONG);
return null;
}
/* message RCDocSendDataModelPdu {
required uint32 item_idx=1;//唯一标识
required uint32 owner=2;
optional uint32 from=3;
optional uint32 cur_page_no=4;
optional uint32 page_num =5;
optional string file_type=6;
optional string creat_user_id=7;//创建文档userid
optional string relative_url=8;//文档相对地址
optional string url =9;//文档地址
optional uint32 cur_V=10;
optional uint32 cur_H=11;
optional uint32 scale=12;
optional bool visible=13;
optional uint32 action=14;//0,无操作, 1翻页 /缩放/滚动、2.显示/隐藏
optional string doc_id=15;//文档在服务器数据库中的唯一id
optional string file_name=16;//文档的名字
optional string dynamic_TS=17;//"dynamicTransferStatic": "0"
optional string md5=18;//md5
optional uint32 show_type=19;//显示模式
}*/
//判断type类型,根据type设置不同的参数
let docModelPdu = new pdu['RCDocSendDataModelPdu'];
docModelPdu.itemIdx = _itemIdx;
docModelPdu.owner = GlobalConfig.nodeId;
docModelPdu.from = GlobalConfig.nodeId;
docModelPdu.curPageNo = _param.curPageNo || 1;
docModelPdu.pageNum = _param.pageNum || 1;
docModelPdu.fileType = _param.fileType || "";
docModelPdu.creatUserId = _param.creatUserId || "0";
docModelPdu.url = "";//这个地址没用到,数据太长占用资源 暂停使用//"http://101.200.150.192/DocSharing/data/h5test/20170206-171100025/7e9c4178cac1133e0dd9d5b583439122.jpg";
docModelPdu.relativeUrl = _param.relativeUrl || "";//"/DocSharing/data/h5test/20170206-171100025/7e9c4178cac1133e0dd9d5b583439122.jpg";
docModelPdu.curV = _param.curV || 0;
docModelPdu.curH = _param.curH || 0;
docModelPdu.scale = _param.scale || 100;//按百分比
docModelPdu.visible = _param.visible || false;
docModelPdu.action = _param.action || ApeConsts.DOC_ACTION_NORMAL;//0,无操作, 1翻页、2.显示/隐藏, 3缩放/滚动
docModelPdu.docId = _param.docId || "";//文档在服务器数据库中的唯一id,必须有
docModelPdu.md5 = _param.md5 || "";//MD5
docModelPdu.fileName = _param.fileName || "doc_" + _itemIdx;//文档的名字
docModelPdu.dynamicTS = _param.dynamicTS || "0";//文档上传后返回值中的字段dynamicTransferStatic
docModelPdu.showType = _param.showType || 0;//文档显示模式
loger.log(docModelPdu);
return docModelPdu;
}
try{
let docModelPdu= pdu['RCDocSendDataModelPdu'].decode(itemData);
//loger.log(docModelPdu);
return docModelPdu;
}catch (err){
loger.log("文档收到数据 unPackPdu Pdu解析错误,itemIdx="+itemIdx+" err:"+err.message);
unPackPdu(owner, itemIdx, itemData) {
loger.log("文档===unPackPdu ");
if (owner == null || itemIdx == null || itemData == null) {
this._emit(MessageTypes.MCU_ERROR, MessageTypes.ERR_APE_INTERFACE_PARAM_WRONG);
return null;
}
try {
let docModelPdu = pdu['RCDocSendDataModelPdu'].decode(itemData);
//loger.log(docModelPdu);
return docModelPdu;
} catch (err) {
loger.log("文档收到数据 unPackPdu Pdu解析错误,itemIdx=" + itemIdx + " err:" + err.message);
}
return null;
}
return null;
}
}
... ...