认沽控制器代码和使用的命令队列。当你拉下一个命令时,使'当前命令'。每个命令都有一个process()函数,用于处理来自串行端口的数据并返回一个值,指示它是期望更多数据还是已完成。如果一个命令完成,然后拉下一个命令。
每个命令都有一个回调函数,它在完成时会调用它,您可以使用该回调函数返回异步响应。
下面是一个未经测试大纲(ES6):
// controller.js
var cmds = [], currentCmd = null;
var stream = null;
class ControllerCommand {
constructor(strm) { this.stream = strm;}
send(data) {this.stream.write(data);}
}
class StatusCmd extends ControllerCmd {
constructor(stream, id, cb) {
super(stream)
this.id = id;
this.cb = cb
}
exec() { this.send(`STATUS ${id}`);}
parse(resp) {
this.status = resp;
this.cb(this.status);
return true;
}
}
function next() {
if (cmds.length > 0) {
currentCmd = cmds.shift();
cmd.exec();
}
}
function add(cmd) {
cmds.push(cmd);
if (cmds.length == 1) next();
}
export function status(id, cb) {
add(new StatusCmd(stream, id, cb));
}
export function init(str) {
stream = str;
stream.on('data', (data) => {
if (currentCmd.parse(data.toString())) {
next();
}
});
}
非常感谢,我会这样尝试 –