Skip to content

Instantly share code, notes, and snippets.

@gabrielfeitosa
Last active December 29, 2015 13:41
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save gabrielfeitosa/76490db7b59c356e625a to your computer and use it in GitHub Desktop.
Save gabrielfeitosa/76490db7b59c356e625a to your computer and use it in GitHub Desktop.
Pedidos com socket.io
(function() {
'use strict';
angular.module('app')
.controller('LojaController', function($scope) {
var socket = io();
var vm = this;
vm.pedido = {};
vm.pedidos = [];
vm.enviar = enviar;
init();
function init(){
socket.on('loja pedidos', function(pedidos){
vm.pedidos = pedidos;
$scope.$apply();
});
socket.on('loja pedido', function(pedido){
var encontrou = false;
for(var x = 0; x < vm.pedidos.length && !encontrou; x++){
if(vm.pedidos[x].id === pedido.id){
vm.pedidos[x].status = pedido.status;
encontrou = true;
}
}
if(!encontrou){
vm.pedidos.push(pedido);
}
$scope.$apply();
});
}
function enviar() {
socket.emit('loja enviar', vm.pedido);
vm.pedido.item = '';
}
});
})();
'use strict';
var express = require('express'),
app = express(),
http = require('http').Server(app),
io = require('socket.io')(http),
port = process.env.PORT || 5000;
app.use(express.static('public'));
var pedidos = [];
var id = 0;
io.on('connection', function(socket){
io.to(socket.id).emit('loja pedidos', pedidos);
socket.on('loja enviar', function(pedido){
pedido.id = id++;
pedido.data = new Date();
pedido.status = 'Solicitado';
pedidos[pedido.id] = pedido;
io.emit('loja pedido', pedido);
filaSolicitado(pedido.id);
});
function filaSolicitado(id){
var pedido = pedidos[id];
if(verificaSePodeExecutar(pedido.data,3000)){
pedido.status = 'Em atendimento';
io.emit('loja pedido', {id: pedido.id, status: pedido.status});
filaEmAtendimento(id);
}else{
setTimeout(filaSolicitado,1000, id);
}
}
function filaEmAtendimento(id){
var pedido = pedidos[id];
if(verificaSePodeExecutar(pedido.data,7000)){
pedido.status = 'Atendido';
io.emit('loja pedido', {id: pedido.id, status: pedido.status});
}else{
setTimeout(filaEmAtendimento,1000, id);
}
}
function verificaSePodeExecutar(date,time){
var agora = new Date();
var diff = (agora - date);
return diff > time;
}
});
http.listen(port, function(){
console.log('Servidor rodando na porta:'+port);
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment