PIMQTT::Message now Const & Mutable (as in PIHTTP)

This commit is contained in:
2026-03-26 16:50:55 +03:00
parent 089e241a67
commit aadf3375a6
5 changed files with 168 additions and 32 deletions

View File

@@ -41,12 +41,12 @@ PRIVATE_DEFINITION_START(PIMQTT::Client)
}
static int messageArrived_callback(void * context, char * topicName, int topicLen, MQTTClient_message * message) {
PIMQTT::Message msg;
msg.topic = PIString::fromUTF8(topicName);
msg.payload = PIByteArray(message->payload, message->payloadlen);
msg.msg_id = message->msgid;
msg.is_duplicate = message->dup != 0;
msg.qos = static_cast<PIMQTT::QoS>(message->qos);
PIMQTT::MessageMutable msg;
msg.setTopic(PIString::fromUTF8(topicName));
msg.setPayload(PIByteArray(message->payload, message->payloadlen));
msg.setID(message->msgid);
msg.setDuplicate(message->dup != 0);
msg.setQos(static_cast<PIMQTT::QoS>(message->qos));
MQTTClient_freeMessage(&message);
MQTTClient_free(topicName);
((PIMQTT::Client *)context)->mqtt_messageArrived(msg);
@@ -101,12 +101,17 @@ void PIMQTT::Client::unsubscribe(const PIString & topic) {
void PIMQTT::Client::publish(const PIString & topic, const PIByteArray & msg, QoS qos) {
MessageMutable m;
m.setTopic(topic);
m.setPayload(msg);
m.setQos(qos);
publish(m);
}
void PIMQTT::Client::publish(const MessageConst & msg) {
if (is_destoying) return;
Message m;
m.topic = topic;
m.payload = msg;
m.qos = qos;
worker->enqueueTask([this, m] { publishInternal(m); });
worker->enqueueTask([this, msg] { publishInternal(msg); });
}
@@ -121,7 +126,7 @@ void PIMQTT::Client::mqtt_connectionLost() {
void PIMQTT::Client::mqtt_deliveryComplete(int token) {}
void PIMQTT::Client::mqtt_messageArrived(const Message & msg) {
void PIMQTT::Client::mqtt_messageArrived(const MessageConst & msg) {
piCoutObj << "mqtt_messageArrived";
received(msg);
}
@@ -169,13 +174,13 @@ inline void PIMQTT::Client::disconnectInternal() {
}
void PIMQTT::Client::publishInternal(const Message & m) {
void PIMQTT::Client::publishInternal(const MessageConst & m) {
if (!PRIVATE->client) return;
MQTTClient_message pubmsg = MQTTClient_message_initializer;
pubmsg.payload = const_cast<void *>(static_cast<const void *>(m.payload.data()));
pubmsg.payloadlen = m.payload.size_s();
pubmsg.qos = static_cast<int>(m.qos);
int ret = MQTTClient_publishMessage(PRIVATE->client, m.topic.dataAscii(), &pubmsg, nullptr);
pubmsg.payload = const_cast<void *>(static_cast<const void *>(m.payload().data()));
pubmsg.payloadlen = m.payload().size_s();
pubmsg.qos = static_cast<int>(m.qos());
int ret = MQTTClient_publishMessage(PRIVATE->client, m.topic().dataAscii(), &pubmsg, nullptr);
if (ret != MQTTCLIENT_SUCCESS) {
piCoutObj << "Failed to publishMessage, code" << ret;
}