02-subscribe-qos1-async2.c 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  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 after 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_connect_async(mosq, "localhost", port, 60);
  40. if(rc){
  41. printf("connect_async failed: %s\n", mosquitto_strerror(rc));
  42. }
  43. rc = mosquitto_loop_start(mosq);
  44. if(rc){
  45. printf("loop_start failed: %s\n", mosquitto_strerror(rc));
  46. }
  47. /* 50 millis to be system polite */
  48. struct timespec tv = { 0, 50e6 };
  49. while(should_run){
  50. nanosleep(&tv, NULL);
  51. }
  52. mosquitto_disconnect(mosq);
  53. mosquitto_loop_stop(mosq, false);
  54. mosquitto_destroy(mosq);
  55. mosquitto_lib_cleanup();
  56. return run;
  57. }