RyanMqttKeepAliveTest.c 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. #include "RyanMqttTest.h"
  2. static RyanMqttError_e keepAliveTest(void)
  3. {
  4. RyanMqttClient_t *client;
  5. RyanMqttError_e result = RyanMqttSuccessError;
  6. RyanMqttTestInit(&client, RyanMqttTrue, RyanMqttTrue, 10, NULL, NULL);
  7. while (RyanMqttConnectState != RyanMqttGetState(client))
  8. {
  9. delay(100);
  10. }
  11. uint32_t keepAliveRemain = 0;
  12. uint32_t minKeepAliveRemain = 0;
  13. for (uint32_t i = 0; i < 60; i++)
  14. {
  15. if (RyanMqttConnectState != RyanMqttGetState(client))
  16. {
  17. result = RyanMqttFailedError;
  18. break;
  19. }
  20. RyanMqttGetKeepAliveRemain(client, &keepAliveRemain);
  21. if (keepAliveRemain < minKeepAliveRemain)
  22. {
  23. minKeepAliveRemain = keepAliveRemain;
  24. }
  25. RyanMqttLog_w("心跳倒计时: %d", keepAliveRemain);
  26. RyanMqttCheckCodeNoReturn(0 != keepAliveRemain, RyanMqttFailedError, RyanMqttLog_e, { break; });
  27. // 超时判断:如果剩余心跳时间小于 4 秒,视为超时/异常
  28. if (keepAliveRemain < 4000)
  29. {
  30. RyanMqttLog_e("心跳剩余时间过短: %d 秒,心跳包发送周期不对", keepAliveRemain);
  31. result = RyanMqttFailedError;
  32. break;
  33. }
  34. delay(500);
  35. }
  36. RyanMqttTestDestroyClient(client);
  37. if (minKeepAliveRemain > 7 * 1000)
  38. {
  39. RyanMqttLog_e("心跳剩余时间过短: %d 秒,可能频繁的发送心跳包", minKeepAliveRemain);
  40. result = RyanMqttFailedError;
  41. }
  42. return result;
  43. }
  44. RyanMqttError_e RyanMqttKeepAliveTest(void)
  45. {
  46. RyanMqttCheckCodeNoReturn(RyanMqttSuccessError == keepAliveTest(), RyanMqttFailedError, RyanMqttLog_e,
  47. { goto __exit; });
  48. return RyanMqttSuccessError;
  49. __exit:
  50. return RyanMqttFailedError;
  51. }