读代码看架构-MQTT就是在playload

void mqtt_message_arrived(void *client , MessageData* data)
{
	mqttRecvMsgType p;
	memset(p.payload , 0x00 , sizeof(uint8_t)*data->message->payloadlen);

	memcpy(p.payload , data->message->payload , data->message->payloadlen);

	msgType = p.payload[0];
	sqeId = p.payload[1]|(p.payload[2]<<8);
	serType = p.payload[3]|(p.payload[4]<<8);
	cmd = p.payload[5]|(p.payload[6]<<8);

	if(( serType != 0 ) && (  cmd != 0x8004))
	{
	log(INFO,"msg type = %d , seq id = %d , server type = %d , cmd = %x \n" , msgType , sqeId , serType , cmd);
	}

	xQueueSend( xMqttRecvQueue, ( void* )&p, NULL );   
    //极端优秀!拿到数据以后丢到消息队列
}
static void mqtt_recv_task( void const *pvParameters)
{

    mqttRecvMsgType msg;

	memset(&msg , 0x00 , sizeof(mqttRecvMsgType));
	while( 1 )
	{
        if(xQueueReceive( xMqttRecvQueue, &msg, 1000 ) == pdTRUE)
        {
           
        }
		
		
	}
}

这就是拿到了playload  有的是JSON 有的是PB!

其实数据很小!

typedef struct
{
    uint8_t msgType;
    uint16_t sqeId;
    uint16_t serType;
    uint16_t cmd;
    uint8_t data[1500];
    uint16_t len;
}mqttDataStrType;

读代码看架构-MQTT就是在playload_第1张图片

协议命令定义:

// Message Type

public static final int MSG_TYPE_SYSTEM = 0; // 系统消息

public static final int MSG_TYPE_USER = 1; // 自定义消息


// Service Type

public static final int SERVICE_TYPE_COMMON = 0; // 通用业务

public static final int SERVICE_TYPE_ACCESS = 1; // 设备接入业务

public static final int SERVICE_TYPE_PASS = 2; // 智慧通行业务

public static final int SERVICE_TYPE_LOG = 3; // 日志服务



/***

 * 设备接入业务:

 */

// 端到云的请求命令

public static final int CMD_TYPE_UPDATE_AESKEY = 1;      // 更新AES Key。Body的PB模型为TSLIOTUpdateAESKeyRequest

public static final int CMD_TYPE_WILL = 2; // 遗愿消息命令。Body为hamcsha1(mac, RSA公钥)。



// 云到端的请求命令

public static final int CMD_TYPE_UPDATE_AESKEY_ACK = 0x8000; // 更新AES Key结果。端收到此命令后才能进行后续请求。Body的PB模型为TSLIOTCommonResult

public static final int CMD_TYPE_UPDATE_SUBSCRIPTION = 0x8001; // 更新端订阅话题列表。Body的PB模型为TSLIOTChangeSubscriptionRequest

public static final int CMD_TYPE_REFRESH_AESKEY = 0x8002;  // 请求设备端重新刷新一次AES KEY,Body为hamcsha1(mac, RSA公钥)。设备端需要重新更新AES Key流程



/***

 * 通用业务:

 */

// 端到云的请求命令

public static final int CMD_TYPE_DEVICE_CONTROL_ACK = 1; // 设备控制结果。Body的PB模型为TSLIOTDeviceControlResult

public static final int CMD_TYPE_DATA_PASS_THROUGH_ACK = 2; // 数据透传通道响应

public static final int CMD_TYPE_MODIFY_PWD_ACK = 3; // 修改设备密码结果。Body的PB模型为TSLIOTCommonResult

public static final int CMD_TYPE_UPDATE_TIME = 4; // 校时请求。Body为mac(设备唯一标识)utf8 编码



// 云到端的请求命令

public static final int CMD_TYPE_SYSTEM_EXCEPTION = 0x8000; // 系统通用处理异常。Body的PB模型为TSLIOTCommonResult

public static final int CMD_TYPE_DEVICE_CONTROL = 0x8001; // 设备控制请求,Body的PB模型为TSLIOTDeviceControlRequest

public static final int CMD_TYPE_DATA_PASS_THROUGH = 0x8002; // 数据透传通道

public static final int CMD_TYPE_MODIFY_PWD = 0x8003; // 修改设备密码,Body的PB模型为TSLIOTModifyPwdRequest

public static final int CMD_TYPE_UPDATE_TIME_ACK = 0x8004; // 校时返回时间戳,Body的PB模型为TSLIOTTimeResult



/**

 * 智慧通行业务:

 */

// 端到云的请求命令

public static final int CMD_TYPE_PULL_FILTER_LIST = 1; // 拉取黑白名单。Body的PB模型为TSLIOTPullFilterListRequest

public static final int CMD_TYPE_DISPATCH_FILTER_LIST_ACK = 2; // 下发黑白名单结果。Body的PB模型为TSLIOTCommonResult

public static final int CMD_TYPE_UPDATE_ONCE_PWD_ACK = 5; // 下发一次性密码结果。Body的PB模型为TSLIOTCommonResult



// 云到端的请求命令

public static final int CMD_TYPE_DISPATCH_FILTER_LIST = 0x8002; // 下发黑白名单。Body的PB模型为TSLIOTDispatchFilterListRequest

public static final int CMD_TYPE_DISPATCH_ONCE_PWD = 0x8003; // 下发一次性密码。Body的PB模型为TSLIOTIssueOncePWDRequest



/**

 * 日志服务:

 */

// 端到云的请求命令

public static final int CMD_TYPE_UPDATE_LOG = 1; // 上报设备日志。Body的PB模型为TSLIOTUploadLogRequest

public static final int CMD_TYPE_SUB_DEVICE_ONLINE = 2; // 子设备在线状态更新。Body的PB模型为TSLIOTOnlineRequest

public static final int CMD_TYPE_UPDATE_DEVICE_INFO = 3; // 上报设备信息。Body的PB模型为TSLIOTUploadDeviceInfoRequest



// 云到端的请求命令

public static final int CMD_TYPE_UPDATE_LOG_ACK = 0x8000; // 上报设备日志结果。Body的PB模型为TSLIOTCommonResult

 

 

 

你可能感兴趣的:(读代码看架构-MQTT就是在playload)