123456789101112131415161718192021222324252627282930313233343536373839404142434445464748 |
- /** 指定分隔符解码器 */
- class delimiterDecoder{
- /** 分隔符 */
- delimiter;
- /** 完整数据包处理 */
- completeDataExecute;
- /** 传入的数据 buffer */
- chunks = [];
- /** 记录buffer最大长度 字节数byte */
- maxSize = 0;
- constructor(delimiter,maxSize,completeDataExecute) {
- this.delimiter = delimiter;
- this.maxSize = maxSize;
- this.completeDataExecute = completeDataExecute;
- }
- /**
- * 接收到数据
- * @param data
- */
- read(data){
- if(this.chunks.length === 0){
- this.chunks = data;
- }else{
- this.chunks = Buffer.concat([this.chunks,data]);
- }
- while (true){
- let index = this.chunks.indexOf(this.delimiter);
- if(index <= -1){
- if(this.chunks.length >= this.maxSize){
- console.debug("---> discard message")
- this.chunks = [];
- }
- break;
- }else if(index > this.maxSize){
- console.debug("---> discard message")
- this.chunks = this.chunks.slice(index + this.delimiter.length);
- continue;
- }
- let completeData = this.chunks.slice(0,index);
- let removeLength = index + this.delimiter.length;
- this.chunks = this.chunks.slice(removeLength);
- this.completeDataExecute(completeData);
- }
- }
- }
- module.exports = delimiterDecoder;
|