client.cpp 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  1. // client.cpp
  2. // Implementation of the client class for the mqtt C++ client library.
  3. /*******************************************************************************
  4. * Copyright (c) 2013-2017 Frank Pagliughi <fpagliughi@mindspring.com>
  5. *
  6. * All rights reserved. This program and the accompanying materials
  7. * are made available under the terms of the Eclipse Public License v1.0
  8. * and Eclipse Distribution License v1.0 which accompany this distribution.
  9. *
  10. * The Eclipse Public License is available at
  11. * http://www.eclipse.org/legal/epl-v10.html
  12. * and the Eclipse Distribution License is available at
  13. * http://www.eclipse.org/org/documents/edl-v10.php.
  14. *
  15. * Contributors:
  16. * Frank Pagliughi - initial implementation and documentation
  17. *******************************************************************************/
  18. #include "mqtt/client.h"
  19. #include <memory>
  20. #include <iostream>
  21. namespace mqtt {
  22. const std::chrono::minutes client::DFLT_TIMEOUT = std::chrono::minutes(5);
  23. #if __cplusplus < 201703L
  24. constexpr int client::DFLT_QOS;
  25. #endif
  26. /////////////////////////////////////////////////////////////////////////////
  27. client::client(const string& serverURI, const string& clientId,
  28. iclient_persistence* persistence /*=nullptr*/)
  29. : cli_(serverURI, clientId, persistence),
  30. timeout_(DFLT_TIMEOUT), userCallback_(nullptr)
  31. {
  32. }
  33. client::client(const string& serverURI, const string& clientId,
  34. const string& persistDir)
  35. : cli_(serverURI, clientId, persistDir),
  36. timeout_(DFLT_TIMEOUT), userCallback_(nullptr)
  37. {
  38. }
  39. client::client(const string& serverURI, const string& clientId,
  40. int maxBufferedMessages, iclient_persistence* persistence /*=nullptr*/)
  41. : cli_(serverURI, clientId, maxBufferedMessages, persistence),
  42. timeout_(DFLT_TIMEOUT), userCallback_(nullptr)
  43. {
  44. }
  45. client::client(const string& serverURI, const string& clientId,
  46. int maxBufferedMessages, const string& persistDir)
  47. : cli_(serverURI, clientId, maxBufferedMessages, persistDir),
  48. timeout_(DFLT_TIMEOUT), userCallback_(nullptr)
  49. {
  50. }
  51. void client::set_callback(callback& cb)
  52. {
  53. userCallback_ = &cb;
  54. cli_.set_callback(*this);
  55. }
  56. connect_response client::connect()
  57. {
  58. cli_.start_consuming();
  59. auto tok = cli_.connect();
  60. tok->wait_for(timeout_);
  61. return tok->get_connect_response();
  62. }
  63. connect_response client::connect(connect_options opts)
  64. {
  65. cli_.start_consuming();
  66. auto tok = cli_.connect(std::move(opts));
  67. tok->wait_for(timeout_);
  68. return tok->get_connect_response();
  69. }
  70. connect_response client::reconnect()
  71. {
  72. auto tok = cli_.reconnect();
  73. tok->wait_for(timeout_);
  74. return tok->get_connect_response();
  75. }
  76. subscribe_response client::subscribe(const string& topicFilter)
  77. {
  78. auto tok = cli_.subscribe(topicFilter, DFLT_QOS);
  79. tok->wait_for(timeout_);
  80. return tok->get_subscribe_response();
  81. }
  82. subscribe_response client::subscribe(const string& topicFilter, int qos)
  83. {
  84. auto tok = cli_.subscribe(topicFilter, qos);
  85. tok->wait_for(timeout_);
  86. return tok->get_subscribe_response();
  87. }
  88. subscribe_response client::subscribe(const string_collection& topicFilters)
  89. {
  90. qos_collection qos;
  91. for (size_t i=0; i<topicFilters.size(); ++i)
  92. qos.push_back(DFLT_QOS);
  93. auto tok = cli_.subscribe(ptr(topicFilters), qos);
  94. tok->wait_for(timeout_);
  95. return tok->get_subscribe_response();
  96. }
  97. subscribe_response client::subscribe(const string_collection& topicFilters,
  98. const qos_collection& qos)
  99. {
  100. auto tok = cli_.subscribe(ptr(topicFilters), qos);
  101. tok->wait_for(timeout_);
  102. return tok->get_subscribe_response();
  103. }
  104. unsubscribe_response client::unsubscribe(const string& topicFilter)
  105. {
  106. auto tok = cli_.unsubscribe(topicFilter);
  107. tok->wait_for(timeout_);
  108. return tok->get_unsubscribe_response();
  109. }
  110. unsubscribe_response client::unsubscribe(const string_collection& topicFilters)
  111. {
  112. auto tok = cli_.unsubscribe(ptr(topicFilters));
  113. tok->wait_for(timeout_);
  114. return tok->get_unsubscribe_response();
  115. }
  116. void client::disconnect()
  117. {
  118. cli_.disconnect()->wait_for(timeout_);
  119. cli_.stop_consuming();
  120. }
  121. /////////////////////////////////////////////////////////////////////////////
  122. // end namespace mqtt
  123. }