quint16 QMQTT::ClientPrivate::subscribe(const QString& topic, const quint8 qos) { Q_Q(Client); quint16 msgid = sendSubscribe(topic, qos); emit q->subscribed(topic); return msgid; }
void VirtualShield::listen() { byte fixedHeader = 0; byte remainingLength = 0; if (Bluetooth.available() > 0) fixedHeader = Bluetooth.read(); if (Bluetooth.available() > 0) remainingLength = Bluetooth.read(); byte i = 0; while (Bluetooth.available() > 0 && i < remainingLength) { buffer[i] = Bluetooth.read(); i++; } // Create MQTTMessage MQTTMessage mqtt(fixedHeader, remainingLength, buffer); // Parse Messages switch (mqtt.getType()) { case CONNECT: { Log.w("Connected"); // Set Connect Flag connectFlag = true; // Send Connect Acknowledgement sendConnectAck(); // @todo Start sending SUBSCRIBE for(byte i = 1; i < SHIELD_COUNT; i++) { if (sensorCallback[i] != 0 && isSubscribe[i] == false) { // @debug // Log.w("MQTT", "Send SUBSCRIBE", i); delay(30); sendSubscribe(i + SHIELD_OFFSET); isSubscribe[i] = true; } } break; } case PUBLISH: { // @debug Log.w("MQTT", "PUBLISH Received"); // Log.w("MQTT", "Buffer", buffer, remainingLength); // Get Topic byte *topicPtr; byte topicLen = mqtt.readTopic(&topicPtr); // Get Shield byte shield = *topicPtr - SHIELD_OFFSET; Log.w("Shield", shield); // Call Callbacks if (shield < SHIELD_COUNT && sensorCallback[shield] != 0 && isSubscribe[shield] == true) { // Get Payload Pointer byte *payloadPtr; byte payloadLength = mqtt.readPayload(&payloadPtr); // @debug // Log.w("payload", payloadPtr, payloadLength); // // Get Callback void (*receiver)(byte * payload, byte length) = sensorCallback[shield]; // // Run Callback receiver(payloadPtr, payloadLength); } break; } case SUBSCRIBE: { break; } case SUBACK: { // @debug // Log.w("MQTT", "SUBACK Received"); // Log.w("MQTT", "Buffer", buffer, remainingLength); // // Get Topic // byte *topicPtr; // mqtt.readTopic(&topicPtr); // byte shield = *topicPtr - SHIELD_OFFSET; // if (sensorCallback[shield] != 0 && isSubscribe[shield] == false) { // isSubscribe[shield] = true; // // @debug // Log.w("MQTT", "Topic Subscribed", shield); // } // break; } case UNSUBSCRIBE: { break; } case UNSUBACK: { break; } case DISCONNECT: { Log.w("Disconnected"); // Set connect flag connectFlag = false; // Clear subscription resetSensor(); break; } } // flushBuffer(); }