Stap 6: Async-a-wat?!
Om te kunnen verzenden gegevens ontvangen van de Edison over een socket, hebben we twee verschillende onderdelen die moeten samenwerken, die allebei asynchrone in de natuur. Met het oog op een handgreep op een socket, moet Socket.IO een client daadwerkelijk verbinding maken. Dit gebeurt wanneer u uw Edisons bezoekt IP op poort 8080, en we dienen ons bestand 'index.html'. Daarnaast Cylon wordt opgestart in een onbepaalde hoeveelheid tijd, omdat het verschillende apparaten en verbindingen initialiseren moet voordat het is klaar om te worden gebruikt. Wat wij willen doen is opstarten Cylon wanneer onze toepassingsserver is gestart, dan initialiseren van de Socket.IO. Moeten, telkens wanneer die een verbinding, wordt Socket.IO ontvangen we een retouraanroep toevoegen aan onze knop te stoten een socket boodschap voor die specifieke socket, telkens wanneer die de knop gebeurtenissen gestart. Zullen we enkele van onze bestaande code Refactoring. De inhoud van de 'app.js' vervangen door de volgende code.
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()
Update uw 'index.html' om de volgende wijzigingen:
socketConnection.on('button', function(buttonState) { console.log('button state:', buttonState) })
Vastleggen en druk op uw wijzigingen. Om te bewijzen dat dit werkt zoals verwacht, kunt u de app pullen en uitvoeren op uw Edison, dan reload naar de pagina in uw browser. Als je de Web Inspector console kijken, ziet u berichten wordt uitgestoten wanneer u duwen en de knop loslaat.