Пример #1
0
quint16 QMQTT::ClientPrivate::subscribe(const QString& topic, const quint8 qos)
{
    Q_Q(Client);
    quint16 msgid = sendSubscribe(topic, qos);
    emit q->subscribed(topic);
    return msgid;
}
Пример #2
0
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();	
}