Notificações instantâneas de pedidos usando nodejs & Socket.io

Imagine que temos um aplicativo SAAS onde o dono de um restaurante, por exemplo, pode criar sua loja online e começar a receber pedidos de clientes online. Precisamos de um mecanismo simples para notificá-los assim que seu cliente conclua um novo pedido para sua loja, a fim de lê-lo e executá-lo instantaneamente.

Usaremos Heroku para hospedar nosso aplicativo nodejs

No servidor

basicamente aqui esperamos mensagens dos clientes e informamos o app dos lojistas / gerentes.

var app = require('express')
, http = require('http')
, server = http.createServer(app)
, io = require('socket.io').listen(server);


var port = process.env.PORT || 3000;
server
.listen(port);

io
.sockets.on('connection', function (socket) {

socket
.on('join room', function(data) {
socket
.join(data.room);
console
.log("joined room" + data.room);

});
socket
.on('orderCompleted', function (data) {
socket
.broadcast.to(data.room).emit('notifyStore', data)

});
});

Pedido de postagem do cliente

Primeiro, precisamos incluir o seguinte arquivo

https://whateveryourappnameis.herokuapp.com/socket.io/socket.io.js

no front-end da loja (onde os usuários postam seus pedidos) e no back-end (onde os gerentes leem os novos pedidos para sua loja)

A parte dianteira

Quando os clientes abrem uma loja para fazer um novo pedido, primeiro os associamos à sala dessa loja (usamos store_id)

<script>
room_id
= 4001 // You can set the id here for each store dynamically
// Connect to socket
var socket = io.connect('https://whateveryourappnameis.herokuapp.com');
// Emmit message joining room
socket
.emit('join room', {
message
: "Joining Room",
username
: "soctaste",
room
: room_id
});
</script>

e na ação completa do pedido, enviamos uma mensagem ao servidor

socket.emit('orderCompleted', {
message
: "It looks like you have a new order !!",
username
: "soctaste",
room
: room_id
});

Processo interno

então na página que temos para proprietários / gerentes de loja onde eles podem verificar seus pedidos
entramos na sala com o id da loja e aguardamos notificações do cliente

var socket = io.connect('https://whateveryourappnameis.herokuapp.com');
socket
.emit('join room', {
message
: "Joining room",
username
: "soctaste",
room
: store_id
});

socket
.on('notifyStore', function (data) {
if (data.message) {

// Notify user (play a sound etc)

} else {
console
.log("There is a problem:", data);
}

});