02-subscribe-qos1-async1.c 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. #include <stdbool.h>
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <time.h>
  5. #include <mosquitto.h>
  6. /* mosquitto_connect_async() test, with mosquitto_loop_start() called before mosquitto_connect_async(). */
  7. static int run = -1;
  8. static bool should_run = true;
  9. void on_connect(struct mosquitto *mosq, void *obj, int rc)
  10. {
  11. if(rc){
  12. exit(1);
  13. }else{
  14. mosquitto_subscribe(mosq, NULL, "qos1/test", 1);
  15. }
  16. }
  17. void on_disconnect(struct mosquitto *mosq, void *obj, int rc)
  18. {
  19. run = rc;
  20. }
  21. void on_subscribe(struct mosquitto *mosq, void *obj, int mid, int qos_count, const int *granted_qos)
  22. {
  23. //mosquitto_disconnect(mosq);
  24. should_run = false;
  25. }
  26. int main(int argc, char *argv[])
  27. {
  28. int rc;
  29. struct mosquitto *mosq;
  30. int port = atoi(argv[1]);
  31. mosquitto_lib_init();
  32. mosq = mosquitto_new("subscribe-qos1-test", true, NULL);
  33. if(mosq == NULL){
  34. return 1;
  35. }
  36. mosquitto_connect_callback_set(mosq, on_connect);
  37. mosquitto_disconnect_callback_set(mosq, on_disconnect);
  38. mosquitto_subscribe_callback_set(mosq, on_subscribe);
  39. rc = mosquitto_loop_start(mosq);
  40. if(rc){
  41. printf("loop_start failed: %s\n", mosquitto_strerror(rc));
  42. return rc;
  43. }
  44. rc = mosquitto_connect_async(mosq, "localhost", port, 60);
  45. if(rc){
  46. printf("connect_async failed: %s\n", mosquitto_strerror(rc));
  47. return rc;
  48. }
  49. /* 50 millis to be system polite */
  50. struct timespec tv = { 0, 50e6 };
  51. while(should_run){
  52. nanosleep(&tv, NULL);
  53. }
  54. mosquitto_disconnect(mosq);
  55. mosquitto_loop_stop(mosq, false);
  56. mosquitto_destroy(mosq);
  57. mosquitto_lib_cleanup();
  58. return run;
  59. }