Comments (3)
Right now there isn't really a way to do this explicitly in MQTT-C, but it should be relatively easy to accomplish what I think you're wanting to do.
Before that though, I should mention that error states are taken seriously in MQTT-C, and MQTT_OK
isn't always returned. If the client ever encounters an error, the function will return the appropriate error code. And these error codes are taken seriously in MQTT-C. If it doesn't do this, this is a bug in MQTT-C and I urge anyone to please report it.
So, if you're API functions are returning MQTT_OK
you should believe the operation was successful.
You also asked if it's possible to find out if the message has been received. This is tricky to do explicitly because operations like mqtt_publish
only stage messages in the message queue, whereas mqtt_sync
actually sends queued messages and receives incoming messages.
If you do need to see if the network is active, you can use a combination of mqtt_client::number_of_timeouts
and mqtt_client::response timeout
. The response timeout is the number of seconds before an unacknowledged packet is said to have timed-out and the original packet retransmitted. Everytime this happens the number of timeouts counter will be incremented.
Hope this answers your question. Let me know if you need clarifiaction on anything.
--Liam
from mqtt-c.
Hi,
What I ended up doing was adding a "ack_callback" to the client object, and additionally passing a void* client_packet_identifier to each of the API's I was interested in (open, publish, subscribe and unsubscribe). The client_packet_identifier was also stored in the message queue, and then in _mqtt_read, as the ACK was received, the callback was triggered with an integer (1 == ack, 0 == timeout or failed) and the client_packet_identifier. This was the application was able to keep track of what packets had been sent and ack'ed (without this, when used with Amazon CoreIoT it kicks you out if you queue too many packets before the acks are received.
I will check to see if I can post a PR of my changes, if not...the idea (if you want it) is pretty simple.
from mqtt-c.
Yeah, I see what you did. I haven't heard any other requests for ths feature to be added to MQTT-C, so I think I'd hold off until I hear more similar requests.
Anyways, glad you figured it out! I'm closing this issue but feel free to reopen at any time.
from mqtt-c.
Related Issues (20)
- Would reconnect_publisher be a thing? HOT 3
- Adding contex to callbacks HOT 1
- Insufficient validation of PUBLISH message HOT 2
- Possible undefined behaviour/bad memory access after reconnect HOT 2
- MQTT_ERROR_SEND_BUFFER_IS_FULL due to transient MQTT_ERROR_SOCKET_ERROR
- FPU-Trap when calculating client->typical_response_time
- mqtt_publish return value causes mqtt_error_str when not connected
- mqtt_publish seems to only send QoS 0 HOT 1
- Possible bug in MQTT_CLIENT_TRY_PACK macro
- MQTT-C Security Issue Report (mqtt_unpack_publish_response) HOT 2
- swap use of double variables to float HOT 1
- How to check the client has received a Connack from the Broker after connect() HOT 7
- how to check network connection state in inspector callback
- Signed integer overflow in `mqtt_error_str()` HOT 2
- We cannot pass the context of the program to mqtt publish_callback HOT 2
- Mingw compile error
- Memory alignment in Keil ARM Compiler (thumb instruction set)
- mqtt_connect does not generate a client.error if wrong username and/or password is provided
- Unable to connect openssl_publisher example to HiveMQ HOT 2
- Windows MSYS2 MINGW64: Examples fail with "MQTT_ERROR_SOCKET_ERROR" or "Failed to open socket: : No error"
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from mqtt-c.