Browse Source

refactor: 细节优化

RyanCW 3 tháng trước cách đây
mục cha
commit
30f4c5ff2c

+ 2 - 1
mqttclient/RyanMqttThreadProcessPacket.c

@@ -104,6 +104,7 @@ static RyanMqttError_e RyanMqttPubrecPacketHandler(RyanMqttClient_t *client, MQT
 		RyanMqttCheck(RyanMqttSuccessError == result, RyanMqttInvalidPacketError, RyanMqttLog_d);
 	}
 
+	// 可以安全的发送重传pubrel
 	uint8_t buffer[MQTT_PUBLISH_ACK_PACKET_SIZE];
 	MQTTFixedBuffer_t fixedBuffer = {.pBuffer = buffer, .size = sizeof(buffer)};
 
@@ -498,7 +499,7 @@ RyanMqttError_e RyanMqttGetPacketInfo(RyanMqttClient_t *client, MQTTPacketInfo_t
 			goto __next;
 		}
 
-		readIndex += needReadSize;
+		readIndex += needReadSize; // 更新读取位置
 
 		// 尝试解析
 		status = MQTT_ProcessIncomingPacketTypeAndLength(pBuffer, &readIndex, pIncomingPacket);

+ 9 - 2
mqttclient/RyanMqttUtil.c

@@ -56,10 +56,17 @@ RyanMqttError_e RyanMqttRecvPacket(RyanMqttClient_t *client, uint8_t *recvBuf, u
 	RyanMqttAssert(NULL != recvBuf);
 	RyanMqttAssert(0 != recvLen);
 
-	// 如果需要处理ack,就缩短读取超时时间,避免阻塞太久
+	// 如果需要处理ack,就缩短读取超时时间,避免阻塞太久(保留用户配置的上限)
 	if (RyanMqttTrue == client->pendingAckFlag)
 	{
-		timeOut = 100;
+		if (client->config.recvTimeout > 100)
+		{
+			timeOut = 100;
+		}
+		else
+		{
+			timeOut = client->config.recvTimeout;
+		}
 	}
 
 	RyanMqttTimerCutdown(&timer, timeOut);

+ 5 - 6
test/RyanMqttNetworkFaultQosResilienceTest.c

@@ -1,5 +1,4 @@
 #include "RyanMqttTest.h"
-#include "RyanMqttTest.h"
 
 static int32_t pubTestPublishedEventCount = 0;
 static int32_t pubTestDataEventCount = 0;
@@ -156,8 +155,8 @@ static RyanMqttError_e RyanMqttNetworkFaultQosResiliencePublishTest(int32_t coun
 		char *pubTopic = RyanMqttPubHybridTestPubTopic;
 		uint32_t randNumber = RyanRand(1, 10);
 		result = RyanMqttPublishWithUserData(
-			client, pubTopic, RyanMqttStrlen(pubTopic), (0 == count % randNumber) ? pubStr2 : pubStr,
-			(0 == count % randNumber) ? pubStr2Len : pubStrLen, qos, RyanMqttFalse,
+			client, pubTopic, RyanMqttStrlen(pubTopic), (0 == i % randNumber) ? pubStr2 : pubStr,
+			(0 == i % randNumber) ? pubStr2Len : pubStrLen, qos, RyanMqttFalse,
 			// NOLINTNEXTLINE(clang-diagnostic-int-to-void-pointer-cast,performance-no-int-to-ptr)
 			(void *)(uintptr_t)(qos));
 		if (RyanMqttSuccessError == result)
@@ -250,15 +249,15 @@ RyanMqttError_e RyanMqttNetworkFaultQosResilienceTest(void)
 {
 	RyanMqttError_e result = RyanMqttSuccessError;
 
-	result = RyanMqttNetworkFaultQosResiliencePublishTest(1000, 1, RyanMqttQos0);
+	result = RyanMqttNetworkFaultQosResiliencePublishTest(500, 1, RyanMqttQos0);
 	RyanMqttCheckCodeNoReturn(RyanMqttSuccessError == result, RyanMqttFailedError, RyanMqttLog_e, { goto __exit; });
 	checkMemory;
 
-	result = RyanMqttNetworkFaultQosResiliencePublishTest(1000, 2, RyanMqttQos1);
+	result = RyanMqttNetworkFaultQosResiliencePublishTest(500, 2, RyanMqttQos1);
 	RyanMqttCheckCodeNoReturn(RyanMqttSuccessError == result, RyanMqttFailedError, RyanMqttLog_e, { goto __exit; });
 	checkMemory;
 
-	result = RyanMqttNetworkFaultQosResiliencePublishTest(1000, 4, RyanMqttQos2);
+	result = RyanMqttNetworkFaultQosResiliencePublishTest(500, 4, RyanMqttQos2);
 	RyanMqttCheckCodeNoReturn(RyanMqttSuccessError == result, RyanMqttFailedError, RyanMqttLog_e, { goto __exit; });
 	checkMemory;
 

+ 2 - 2
test/RyanMqttNetworkFaultToleranceMemoryTest.c

@@ -35,7 +35,7 @@ static RyanMqttError_e RyanMqttNetworkFaultPublishHybridTest(int32_t count, uint
 
 		char *pubTopic = RyanMqttPubHybridTestPubTopic;
 		RyanMqttPublishWithUserData(client, pubTopic, RyanMqttStrlen(pubTopic), pubStr, pubStrLen, i % 3,
-					   RyanMqttFalse, NULL);
+					    RyanMqttFalse, NULL);
 
 		if (delayms)
 		{
@@ -57,7 +57,7 @@ static RyanMqttError_e RyanMqttNetworkFaultSubscribeHybridTest(int32_t count, in
 	RyanMqttError_e result = RyanMqttSuccessError;
 	RyanMqttClient_t *client;
 	RyanMqttUnSubscribeData_t *unSubscribeManyData = NULL;
-	static RyanMqttSubscribeData_t *subscribeManyData = NULL;
+	RyanMqttSubscribeData_t *subscribeManyData = NULL;
 
 	result = RyanMqttTestInit(&client, RyanMqttTrue, RyanMqttTrue, 120, NULL, NULL);
 	RyanMqttCheckCodeNoReturn(RyanMqttSuccessError == result, RyanMqttFailedError, RyanMqttLog_e, { goto __exit; });

+ 7 - 7
test/RyanMqttPubTest.c

@@ -135,11 +135,11 @@ static RyanMqttError_e RyanMqttPublishTest(RyanMqttQos_e qos, int32_t count, uin
 	{
 		char *pubTopic = RyanMqttPubTestPubTopic;
 		uint32_t randNumber = RyanRand(1, 10);
-		result = RyanMqttPublishWithUserData(
-			client, pubTopic, RyanMqttStrlen(pubTopic), (0 == count % randNumber) ? pubStr2 : pubStr,
-			(0 == count % randNumber) ? pubStr2Len : pubStrLen, qos, RyanMqttFalse,
-			// NOLINTNEXTLINE(performance-no-int-to-ptr)
-			(void *)qos);
+		result = RyanMqttPublishWithUserData(client, pubTopic, RyanMqttStrlen(pubTopic),
+						     (0 == i % randNumber) ? pubStr2 : pubStr,
+						     (0 == i % randNumber) ? pubStr2Len : pubStrLen, qos, RyanMqttFalse,
+						     // NOLINTNEXTLINE(performance-no-int-to-ptr)
+						     (void *)qos);
 		RyanMqttCheckCodeNoReturn(RyanMqttSuccessError == result, RyanMqttFailedError, RyanMqttLog_e,
 					  { goto __exit; });
 
@@ -259,8 +259,8 @@ static RyanMqttError_e RyanMqttPublishHybridTest(int32_t count, uint32_t delayms
 		char *pubTopic = RyanMqttPubHybridTestPubTopic;
 		uint32_t randNumber = RyanRand(1, 10);
 		result = RyanMqttPublishWithUserData(
-			client, pubTopic, RyanMqttStrlen(pubTopic), (0 == count % randNumber) ? pubStr2 : pubStr,
-			(0 == count % randNumber) ? pubStr2Len : pubStrLen, i % 3, RyanMqttFalse,
+			client, pubTopic, RyanMqttStrlen(pubTopic), (0 == i % randNumber) ? pubStr2 : pubStr,
+			(0 == i % randNumber) ? pubStr2Len : pubStrLen, i % 3, RyanMqttFalse,
 			// NOLINTNEXTLINE(clang-diagnostic-int-to-void-pointer-cast,performance-no-int-to-ptr)
 			(void *)(uintptr_t)(i % 3));
 		RyanMqttCheckCodeNoReturn(RyanMqttSuccessError == result, RyanMqttFailedError, RyanMqttLog_e,

+ 8 - 3
test/RyanMqttPublicApiParamCheckTest.c

@@ -462,14 +462,19 @@ static RyanMqttError_e RyanMqttPubApiParamCheckTest(void)
 
 	// 主题长度为0
 	result = RyanMqttPublishWithUserData(validClient, "test/topic", 0, "payload", 7, RyanMqttQos1, RyanMqttFalse,
-					    NULL);
+					     NULL);
 	RyanMqttCheckCodeNoReturn(RyanMqttParamInvalidError == result, result, RyanMqttLog_e, { goto __exit; });
 
 	// 无效QoS级别
-	result = RyanMqttPublishWithUserData(validClient, "test/topic", strlen("test/topic"), "payload", 7, invalidQos(),
-					    RyanMqttFalse, NULL);
+	result = RyanMqttPublishWithUserData(validClient, "test/topic", strlen("test/topic"), "payload", 7,
+					     invalidQos(), RyanMqttFalse, NULL);
 	RyanMqttCheckCodeNoReturn(RyanMqttParamInvalidError == result, result, RyanMqttLog_e,
 				  { goto __exit; }); // 清理资源
+
+	// 负载长度>0但负载指针为NULL
+	result = RyanMqttPublishWithUserData(validClient, "test/topic", strlen("test/topic"), NULL, 7, RyanMqttQos1,
+					     RyanMqttFalse, NULL);
+	RyanMqttCheckCodeNoReturn(RyanMqttParamInvalidError == result, result, RyanMqttLog_e, { goto __exit; });
 	if (validClient)
 	{
 		RyanMqttTestDestroyClient(validClient);

+ 2 - 2
test/RyanMqttTest.c

@@ -31,7 +31,7 @@ uint32_t RyanRand(int32_t min, int32_t max)
 {
 	static uint32_t isSeed = 0;
 	static uint32_t seedp = 0;
-	if (isSeed > 1024)
+	if (isSeed > 1024 || 0 == seedp)
 	{
 		seedp = platformUptimeMs();
 		isSeed = 0;
@@ -317,7 +317,7 @@ static void RyanMqttTestScheduleFreeAfterMs(void *ptr, uint32_t delayMs)
 
 	// 毫秒转秒和纳秒
 	its.it_value.tv_sec = delayMs / 1000;
-	its.it_value.tv_nsec = (uint32_t)((delayMs % 1000) * 1000);
+	its.it_value.tv_nsec = (uint32_t)((delayMs % 1000) * 1000000);
 
 	if (0 != timer_settime(timerid, 0, &its, NULL))
 	{