in src/MQTTDisplay.js [184:227]
async function connectToAwsIot() {
// mqtt clients require a unique clientId; we generate one below
var clientId = 'mqtt-explorer-' + (Math.floor((Math.random() * 100000) + 1));
// get credentials and, from them, extract key, secret key, and session token
// Amplify's auth functionality makes this easy for us...
var currentCredentials = await Auth.currentCredentials();
var essentialCredentials = Auth.essentialCredentials(currentCredentials);
// Create an MQTT client
var newMqttClient = AWSIoTData.device({
region: AWSConfiguration.region,
host:AWSConfiguration.host,
clientId: clientId,
protocol: 'wss',
maximumReconnectTimeMs: 8000,
debug: true,
accessKeyId: essentialCredentials.accessKeyId,
secretKey: essentialCredentials.secretAccessKey,
sessionToken: essentialCredentials.sessionToken
});
console.log('Subscriber trying to connect to AWS IoT for clientId:', clientId);
// On connect, update status
newMqttClient.on('connect', function() {
setIsConnected(true);
newMqttClient.subscribe(props.topic);
console.log('Connected to AWS IoT for clientId:', clientId);
console.log(`Subscribed to ${props.topic}`);
});
// add event handler for received messages
newMqttClient.on('message', function(topic, payload) {
var myDate = new Date().toLocaleDateString() + " " + new Date().toLocaleTimeString();
var newMessage = `${myDate} - topic '${topic}' - \n ${payload.toString()}`;
setMessages(prevMessages => [...prevMessages, newMessage]);
console.log(newMessage);
});
// update state to track mqtt client
setMqttClient(newMqttClient);
}