in amazonfreertossdk/src/main/java/software/amazon/freertos/amazonfreertossdk/AmazonFreeRTOSDevice.java [689:761]
private void handleMqttTxMessage(byte[] message) {
MessageType messageType = new MessageType();
if (!messageType.decode(message)) {
return;
}
Log.i(TAG, "Handling Mqtt Message type : " + messageType.type);
switch (messageType.type) {
case MQTT_MSG_CONNECT:
final Connect connect = new Connect();
if (connect.decode(message)) {
connectToIoT(connect);
}
break;
case MQTT_MSG_SUBSCRIBE:
final Subscribe subscribe = new Subscribe();
if (subscribe.decode(message)) {
Log.d(TAG, subscribe.toString());
subscribeToIoT(subscribe);
/*
Currently, because the IoT part of aws mobile sdk for Android
does not provide suback callback when subscribe is successful,
we create a fake suback message and send to device as a workaround.
Wait for 0.5 sec so that the subscribe is complete. Potential bug:
Message is received from the subscribed topic before suback
is sent to device.
*/
mHandler.postDelayed(new Runnable() {
@Override
public void run() {
sendSubAck(subscribe);
}
}, 500);
}
break;
case MQTT_MSG_UNSUBSCRIBE:
final Unsubscribe unsubscribe = new Unsubscribe();
if (unsubscribe.decode(message)) {
unsubscribeToIoT(unsubscribe);
/*
TODO: add unsuback support in Aws Mobile sdk
*/
sendUnsubAck(unsubscribe);
}
break;
case MQTT_MSG_PUBLISH:
final Publish publish = new Publish();
if (publish.decode(message)) {
mMessageId = publish.getMsgID();
publishToIoT(publish);
}
break;
case MQTT_MSG_DISCONNECT:
disconnectFromIot();
break;
case MQTT_MSG_PUBACK:
/*
AWS Iot SDK currently sends pub ack back to cloud without waiting
for pub ack from device.
*/
final Puback puback = new Puback();
if (puback.decode(message)) {
Log.w(TAG, "Received mqtt pub ack from device. MsgID: " + puback.msgID);
}
break;
case MQTT_MSG_PINGREQ:
PingResp pingResp = new PingResp();
byte[] pingRespBytes = pingResp.encode();
sendDataToDevice(UUID_MQTT_PROXY_SERVICE, UUID_MQTT_PROXY_RX, UUID_MQTT_PROXY_RXLARGE, pingRespBytes);
break;
default:
Log.e(TAG, "Unknown mqtt message type: " + messageType.type);
}
}