处理传入的TCP / IP消息

时间:2019-07-13 18:03:13

标签: c++ serialization tcp

我正在一个项目上,该项目需要能够通过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 *缓冲区已满),还有什么更好的方法来处理命令?我没有在这里尝试做任何革命性的事情,所以我认为这样做有“标准”的方法。

0 个答案:

没有答案