Étape 6: Async-a-quoi? !
Afin d’envoyer les données reçues de l’Edison sur un socket, nous avons deux parties différentes qui doivent travailler ensemble, les deux qui sont asynchrones dans la nature. Pour obtenir un handle sur un socket, Socket.IO a besoin d’un client se connectant en fait. Cela se produit lorsque vous visitez votre Edison IP sur le port 8080 et nous servir jusqu'à notre fichier « index.html ». En outre, Cylon démarre pour un montant indéterminé de temps, puisqu’il doit initialiser différents appareils et connexions avant qu’il soit prêt à être utilisé. Ce que nous voulons faire, c’est démarrer Cylon lorsque notre serveur d’applications est lancé, puis initialiser Socket.IO. Ensuite, chaque fois que Socket.IO reçoit une connexion, il faut ajouter un rappel à notre bouton pour émettre un message de socket pour ce socket spécifique, chaque fois que les événements de bouton sont déclenchés. Nous aurons besoin de refactoriser certains de notre code existant. Remplacez le contenu de « app.js » avec le code suivant.
var express = require('express') var app = express() var server = require('http').Server(app) var io = require('socket.io')(server) var cylon = require('cylon') app.use(express.static(__dirname + '/public')) server.listen(8080) // this will be called when Cylon is fully initialized, which is when we should open up our WebSocket connection. var cylonReady = function(my) { io .of('/soundsocket') .on('connection', function (socket) { registerSocketHandlers(my, socket); }) } // this will be called each time a socket is opened, so each client will receive their own events when buttons are pushed. var registerSocketHandlers = function(my, socket) { my.button.on('push', function() { socket.emit('button', 'push') }) my.button.on('release', function() { socket.emit('button', 'release') }) } cylon.robot({ connections: { edison: { adaptor: 'intel-iot' } } devices: { button: { driver: 'button', pin: 2 } } }).on('ready', cylonReady); cylon.start()
Mettez à jour votre « index.html » pour refléter les modifications suivantes :
socketConnection.on('button', function(buttonState) { console.log('button state:', buttonState) })
Nous engageons et poussez vos modifications. Pour prouver que cela ne fonctionne pas comme prévu, vous pouvez abaisser l’app et lancez-le sur votre Edison, puis recharger la page dans votre navigateur. Si vous regardez la console Web Inspector, vous devriez voir les messages émis lorsque vous enfoncez et relâchez le bouton.