/**
* @fileOverview Control 类,管理数据读写调度,对外提供以下接口:pipe、read、write
* @author Jeremy
*/
import Read from './read';
import Write from './write';
import Parse from './parse';
import Transport from '../communicate/transport';
/**
* @private
*/
class Control {
/**
* Create a control.
*/
constructor() {
}
/**
* execute write
* @param {Array} buf protocol buffer
* @return {Undefined} return undefined
*/
write(buf) {
Write.addRequest(Transport.send.bind(Transport), buf);
}
/**
* execute read
* @param {Array} buf protocol buffer
* @return {Promise} return a promise
*/
read(buf) {
return new Promise((resolve, reject) =>{
Read.addRequest(Transport.send.bind(Transport), buf, function(val){
resolve(val);
});
});
}
/**
* parse the buffer
* @param {Array} buff a buffer responsed from transporter
* @return {Number}
*/
pipe(buff) {
let buffData = buff.data || buff;
let buffers = Parse.doParse(buffData); //undefined or [[], [], [xxx]]
if(!buffers) {
return;
//可能因为接收了异常数据
//do nothing
}
for(let buf of buffers) {
if(buf.length == 0) {
// do nothing with write command
}else{
let value = Parse.getResult(buf);
// console.log('after parse ------>', buf[0], buf, value);
Read.emitCallback(buf[0], value);
}
}
}
}
export default new Control();