1/* 2 * Copyright (C) 2022 Huawei Device Co., Ltd. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 16import { BaseBean } from './BaseBean.js'; 17 18export class PayloadHead extends Object implements BaseBean { 19 private _flag: Array<number> = [0, 0]; //uint8_t ct.c_uint8 * 2 20 private _reserve: Array<number>; //uint8_t // encrypt'flag or others options ct.c_uint8 * 2 21 private _protocolVer: number; // uint8_t 1 22 private _headSize: number = 0; // uint16_t 2 23 private _dataSize: number = 0; // uint32_t 4 24 25 constructor(flag: Array<number>, reserve: Array<number>, protocolVer: number, headSize: number, dataSize: number) { 26 super(); 27 this._flag = flag; 28 this._reserve = reserve; 29 this._protocolVer = protocolVer; 30 this._headSize = headSize; 31 this._dataSize = dataSize; 32 } 33 34 static getPayloadHeadLength() { 35 return 11; 36 } 37 getDataView(): DataView { 38 const view = new DataView(new ArrayBuffer(11)); 39 view.setUint8(0, this._flag[0]); 40 view.setUint8(1, this._flag[1]); 41 view.setUint8(2, this._reserve[0]); 42 view.setUint8(3, this._reserve[1]); 43 view.setUint8(4, this._protocolVer); 44 view.setUint16(5, this._headSize, false); 45 view.setUint32(7, this._dataSize); 46 return view; 47 } 48 49 static parsePlayHead(data: DataView): PayloadHead { 50 let flagZero = data.getUint8(0); 51 let flagOne = data.getUint8(1); 52 let reserveZero = data.getUint8(2); 53 let reserveOne = data.getUint8(3); 54 let protocolVer = data.getUint8(4); 55 let headSize = data.getUint16(5); 56 let dataSize; 57 if (data.byteLength < 11) { 58 dataSize = 0; 59 } else { 60 dataSize = data.getUint32(7); 61 } 62 return new PayloadHead([flagZero, flagOne], [reserveZero, reserveOne], protocolVer, headSize, dataSize); 63 } 64 65 get flag(): Array<number> { 66 return this._flag; 67 } 68 69 set flag(value: Array<number>) { 70 this._flag = value; 71 } 72 73 get headSize(): number { 74 return this._headSize; 75 } 76 77 set headSize(value: number) { 78 this._headSize = value; 79 } 80 81 get dataSize(): number { 82 return this._dataSize; 83 } 84 85 set dataSize(value: number) { 86 this._dataSize = value; 87 } 88 89 toString(): string { 90 return 'PayloadHead: ' + this.getDataView.toString() + ', parsePlayHead: ' + PayloadHead.parsePlayHead.toString(); 91 } 92} 93