我正在一个项目上,该项目需要能够通过TCP / IP从主机接收传入的命令。然后应正确执行命令。
我决定将所有命令格式化为16个字节,其中第一个字节是命令本身,随后的15个是可能需要的任何数据。
我的方法是实现一个CommandProcessor类,在该类中传递接收到的消息(字符数组缓冲区),对数据进行反序列化和处理(即,系统其他部分中的调用函数,CommandProcessor可以指向这些函数)。 / p>
实现如下:
CommandProcessor::CommandProcessor(MotionProcessor* motionProcessor)
{
this->motionProcessor = motionProcessor;
}
void CommandProcessor::process(char* message)
{
switch(message[0]) { //Command is first byte of message
case 0xF: { //Load co-ordinates
// Convert char array back into integers
int x = (message[1] << 24) | (message[2] << 16) | (message[3] << 8) | (message[4]);
int y = (message[5] << 24) | (message[6] << 16) | (message[7] << 8) | (message[8]);
int z = (message[9] << 24) | (message[10] << 16) | (message[11] << 8) | (message[12]);
motionProcessor->loadCo(x, y, z);
}
break;
case 0x1: { //Load PI parameters
int Kp = (message[1] << 24) | (message[2] << 16) | (message[3] << 8) | (message[4]);
int Ki = (message[5] << 24) | (message[6] << 16) | (message[7] << 8) | (message[8]);
motionProcessor->loadPI(Kp, Ki);
}
break;
case 0x2: { //STOP Command
motionProcessor->stop();
}
break;
}
有人告诉我,另一个Stack Exchange站点上的某人说,这种处理命令的方法不是一个好方法。如果是这样,在收到命令后(即一旦16字节char *缓冲区已满),还有什么更好的方法来处理命令?我没有在这里尝试做任何革命性的事情,所以我认为这样做有“标准”的方法。