RyanCW 4 месяцев назад
Родитель
Сommit
afddc50ab8
4 измененных файлов с 11 добавлено и 15 удалено
  1. 1 1
      README.md
  2. 2 2
      RyanMqtt2.0发布说明及迁移指南.md
  3. 6 10
      mqttclient/RyanMqttThread.c
  4. 2 2
      mqttclient/RyanMqttUtil.c

+ 1 - 1
README.md

@@ -29,7 +29,7 @@
 
 - ✅ **全等级 QoS 支持(QoS0/1/2)**,并提供**用户可控的消息丢弃机制**,避免因 QoS1/QoS2 消息重传导致内存无限堆积
 
-- ✅ **完整的主题通配符支持**:`/`、`#`、`+`、`$`
+- ✅ **完整的主题匹配与通配符支持**:主题层级分隔符 `/`、通配符 `#`/`+`,并正确处理以 `$` 开头的系统主题
 
 - ✅ 支持批量订阅 / 取消订阅
 

+ 2 - 2
RyanMqtt2.0发布说明及迁移指南.md

@@ -147,11 +147,11 @@ uint32_t platformUptimeMs(void);
 
 2. **架构更清晰**:模块高度解耦,抽象设计更合理
 
-3. **质量更可信**:7 类专项测试 +静态分析+AI审查构筑强大防线
+3. **质量更可信**:7 类专项测试 + 静态分析 + AI 审查构筑强大防线
 
 4. **性能再优化**:更低资源占用、更高吞吐效率
 
-5. **维护更轻松**:统一代码规范规范、平台抽象降低长期开发成本
+5. **维护更轻松**:统一代码规范、平台抽象降低长期开发成本
 
    
 

+ 6 - 10
mqttclient/RyanMqttThread.c

@@ -168,13 +168,6 @@ static void RyanMqttAckListScan(RyanMqttClient_t *client, RyanMqttBool_e waitFla
 			// 设置重发标志位
 			MQTT_UpdateDuplicatePublishFlag(ackHandler->packet, true);
 
-			// 重发次数超过警告值回调
-			if (ackHandler->repeatCount >= client->config.ackHandlerRepeatCountWarning)
-			{
-				RyanMqttEventMachine(client, RyanMqttEventAckRepeatCountWarning, (void *)ackHandler);
-				continue;
-			}
-
 			// 重发数据事件回调
 			RyanMqttEventMachine(client, RyanMqttEventRepeatPublishPacket, (void *)ackHandler);
 
@@ -184,16 +177,19 @@ static void RyanMqttAckListScan(RyanMqttClient_t *client, RyanMqttBool_e waitFla
 			// 重置ack超时时间
 			RyanMqttTimerCutdown(&ackHandler->timer, client->config.ackTimeout);
 			ackHandler->repeatCount++;
+
+			// 重发次数超过警告值回调
+			if (ackHandler->repeatCount >= client->config.ackHandlerRepeatCountWarning)
+			{
+				RyanMqttEventMachine(client, RyanMqttEventAckRepeatCountWarning, (void *)ackHandler);
+			}
 			break;
 		}
 
 		// 订阅 / 取消订阅超时就认为失败
 		case MQTT_PACKET_TYPE_SUBACK:
-
 			RyanMqttMsgHandlerFindAndDestroyByPackId(client, ackHandler->msgHandler, RyanMqttFalse);
-
 			RyanMqttEventMachine(client, RyanMqttEventSubscribedFailed, (void *)ackHandler->msgHandler);
-
 			RyanMqttAckListRemoveToAckList(client, ackHandler);
 			RyanMqttAckHandlerDestroy(client, ackHandler); // 清除句柄
 			break;

+ 2 - 2
mqttclient/RyanMqttUtil.c

@@ -99,7 +99,7 @@ RyanMqttError_e RyanMqttRecvPacket(RyanMqttClient_t *client, uint8_t *recvBuf, u
 	// 错误
 	if (recvResult < 0)
 	{
-		RyanMqttConnectStatus_e connectState = RyanMqttConnectAccepted;
+		RyanMqttConnectStatus_e connectState = RyanMqttConnectNetWorkFail;
 		RyanMqttEventMachine(client, RyanMqttEventDisconnected, &connectState);
 		RyanMqttLog_d("recv错误, result: %d", recvResult);
 		return RyanSocketFailedError;
@@ -152,7 +152,7 @@ RyanMqttError_e RyanMqttSendPacket(RyanMqttClient_t *client, uint8_t *sendBuf, u
 
 	if (sendResult < 0)
 	{
-		RyanMqttConnectStatus_e connectState = RyanMqttConnectAccepted;
+		RyanMqttConnectStatus_e connectState = RyanMqttConnectNetWorkFail;
 		RyanMqttEventMachine(client, RyanMqttEventDisconnected, &connectState);
 		return RyanSocketFailedError;
 	}