Giter VIP home page Giter VIP logo

Comments (3)

LiamBindle avatar LiamBindle commented on May 24, 2024

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.

foufee avatar foufee commented on May 24, 2024

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.

LiamBindle avatar LiamBindle commented on May 24, 2024

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)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo 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.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.