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);
}
});