DocApe.js 9.1 KB
// //////////////////////////////////////////////////////////////////////////////
//
//  Copyright (C) 2016-present  All Rights Reserved.
//  Licensed under the Apache License, Version 2.0 (the "License");
//  http://www.apache.org/licenses/LICENSE-2.0
//
//  Github Home: https://github.com/AlexWang1987
//  Author: AlexWang
//  Date: 2016-08-26 17:30:43
//  QQ Email: 1669499355@qq.com
//  Last Modified time: 2016-09-21 14:12:25
//  Description: LiveClass-DocApe
//
// //////////////////////////////////////////////////////////////////////////////

import Ape from './Ape';
import ApeConsts from './ApeConsts';
import pdu from 'pdus';
import Loger from 'Loger';
import MessageTypes from 'MessageTypes';
import GlobalConfig from 'GlobalConfig';
import EngineUtils from 'EngineUtils';

let loger = Loger.getLoger('DocApe');
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 = {};


    // 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_H5, ApeConsts.DOCSHARING_OBJ_TABLE_NAME_H5, ApeConsts.DOCSHARING_OBJ_TABLE_TAG_H5, 0, new ArrayBuffer);

    // 延迟
      this._apeDelayed = true;
  }
  /////////////发送数据操作//////////////////////////////////////////////////////
  //上传文档
  documentUpload(paramInfo){
    if(paramInfo==null||EngineUtils.isEmptyObject(paramInfo)){
      loger.log('documentUpload失败,参数错误');
      this._emit(MessageTypes.MCU_ERROR,MessageTypes.ERR_APE_INTERFACE_PARAM_WRONG);
      return ;
    }

    itemIdx=parseInt(Date.now()/1000);
    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_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_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);

    console.log("文档upload  tableItemPdu.itemIdx="+tableItemPdu.itemIdx);
    this.sendUniform(adapterPdu,true);
  }
  //切换文档
  documentSwitch(paramInfo){

  }

  //操作文档(翻页、缩放、滚动...)
  documentCommand(paramInfo){

  }

  //删除文档
  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_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);

    console.log("文档发送删除数据============="+tableDeleteItemPdu.itemIdx);
    this.sendUniform(adapterPdu,true);
  }

  ///////白板数据的封包和解包/////////////////////////////////////////
  packPdu(_param,_itemIdx){
    //验证坐标点集合数组是否合法
    if(_param.pointGroup==null||_param.pointGroup.length<1){
      this._emit(MessageTypes.MCU_ERROR,MessageTypes.ERR_APE_INTERFACE_PARAM_WRONG);
      return null;
    }
  /*  required uint32 item_idx=1;//唯一标识
    required uint32 owner=2;
    optional uint32 from=3;
    optional uint32 cur_page_no=4;
    optional uint32 page_num  =5;
    required string filetype=6;
    required string doc_type=7;
    required 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 id=15;//文档在服务器数据库中的唯一id*/

    //判断type类型,根据type设置不同的参数
    let docModelPdu =new pdu['RCDocSendDataModel'];
    docModelPdu.itemIdx=_itemIdx;
    docModelPdu.owner=GlobalConfig.nodeId;
    docModelPdu.from=GlobalConfig.nodeId;
    docModelPdu.curPageNo  = 1;
    docModelPdu.pageNum  =10;
    docModelPdu.fileType=_param.fileType||"";
    docModelPdu.docType="pdf2swf";
    docModelPdu.url  = "http://101.200.150.192/DocSharing/data/h5test/20170206-171100025/7e9c4178cac1133e0dd9d5b583439122.jpg";
    docModelPdu.relativeUrl="/DocSharing/data/h5test/20170206-171100025/7e9c4178cac1133e0dd9d5b583439122.jpg";
    docModelPdu.curV=0;
    docModelPdu.curH=0;
    docModelPdu.scale=1;
    docModelPdu.visible=false;
    docModelPdu.action=0;//0,无操作, 1翻页、2.显示/隐藏
    docModelPdu.id=_param.id||"";//文档在服务器数据库中的唯一id
    return docModelPdu;
  }

  unPackPdu(owner, itemIdx,itemData){
    this.docList[itemIdx] = itemData;
    try{
      console.log("文档收到数据===unPackPdu ");
      let docModelPdu= pdu['RCDocSendDataModel'].decode(itemData);
      //console.log(whiteBoardModelPdu);
      loger.log(docModelPdu);
      return docModelPdu;
    }catch (err){
      console.log("unPackPdu Pdu解析错误,itemIdx="+itemIdx+"  err:"+err.message);
    }
    return null;
  }

  /////收到消息处理/////////////////////////////////////////////////////////////////////////////////
  tableInsertHandler(owner, itemIdx, itemData) {
    //this.tableUpdateHandler(owner, tableId, itemData);
    //loger.log('tableInsertHandler---',itemData);
    let itemDataInfo = this.unPackPdu(owner, itemIdx, itemData);
    loger.log('tableInsertHandler',itemDataInfo);
  }

  tableDeleteHandler(object_id, tableDeleteData){
      /*const re={};
      re.type=ApeConsts.DOCUMENT_DEL;
      this._emit(MessageTypes.DOC_DELETE, re);*/

    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]]){
          delete this.docList[itemIdxs[i]];
          loger.log("删除文档数据:",itemIdxs[i],"当前剩余的文档数据",this.docList);
        }
      }
    }
  }
  tableUpdateHandler(owner, itemIdx, itemData) {
    //let itemDataInfo = pdu['RCDocSendDataRequestPdu'].decode(itemData);
    let itemDataInfo =  this.unPackPdu(owner, itemIdx, itemData);
    loger.log('tableUpdateHandler',itemDataInfo);
    /*try {
      const recordInfo = pdu['RCDocSendDataRequestPdu'].decode(itemData);
      recordInfo.type = ApeConsts.DOCUMENT_LOAD;

      recordInfo.ext = recordInfo.name.substr(recordInfo.name.indexOf('.') + 1);
      recordInfo.wbid = (recordInfo.id << 10) + recordInfo.curPageNo;
      recordInfo.isPicture = ~['bmp', 'png', 'gif', 'jpg', 'jpeg'].indexOf(recordInfo.ext);

      if (recordInfo.isPicture) {
        recordInfo.namePath = recordInfo.uri.substring(0, recordInfo.uri.lastIndexOf('.'));
        recordInfo.loadURL = recordInfo.namePath + '.' + recordInfo.ext;
      } else {
        recordInfo.namePath = recordInfo.uri.substring(0, recordInfo.uri.lastIndexOf('/'));
        recordInfo.loadURL = `${recordInfo.namePath}/${recordInfo.curPageNo}.jpg`;
      }
      this.docList[recordId] = recordInfo;
      this._emit(MessageTypes.DOC_UPDATE, recordInfo);
      loger.log('Doc update ->' + itemIdx);
    } catch (e) {
      loger.warn('Doc Table Update Decode包异常');
    }*/
  }


}

export default DocApe;