-
Notifications
You must be signed in to change notification settings - Fork 3
/
app.js
98 lines (82 loc) · 4.48 KB
/
app.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
var express = require("express"),
http = require("http"),
app = express(),
server = http.createServer(app),
amqp = require('amqp'),
path = require('path');
var host = 'localhost';//'192.168.0.82'
app.use(express.static(path.join(__dirname, 'public')));
app.set('port', process.env.OPENSHIFT_NODEJS_PORT || 3000);
app.set('ipaddr', process.env.OPENSHIFT_NODEJS_IP || "127.0.0.1");
app.set("views",__dirname + "/views");
app.get("/", function(req,res){
res.render("index.jade", {title : "Chat"});
});
//objecto para guardar en la sesión del socket a los que se vayan conectando
var usuariosOnline = {};
var io = require("socket.io").listen(server);
var rabbitMqconnection = amqp.createConnection({host: host, login: 'admin', password: 'admin'});
rabbitMqconnection.on('ready', function(){
rabbitMqconnection.queue('sencilla', {autoDelete: false}, function(cola){
//al conectar un usuario||socket, este evento viene predefinido por socketio
io.sockets.on('connection', function(socket)
{
cola.subscribe(function(mensaje){
console.log('Mensaje recibido -> %s', mensaje.data.toString('utf-8'));
socket.emit('refreshChat', "conectado", mensaje.data.toString('utf-8'));
socket.broadcast.emit("refreshChat", "conectado", mensaje.data.toString('utf-8'));
});
//cuando el usuario conecta al chat comprobamos si está logueado
//el parámetro es la sesión login almacenada con sessionStorage
socket.on("loginUser", function(username)
{
//si existe el nombre de usuario en el chat
if(usuariosOnline[username])
{
socket.emit("userInUse");
return;
}
//Guardamos el nombre de usuario en la sesión del socket para este cliente
socket.username = username;
//añadimos al usuario a la lista global donde almacenamos usuarios
usuariosOnline[username] = socket.username;
//mostramos al cliente como que se ha conectado
socket.emit("refreshChat", "yo", "Bienvenido " + socket.username + ", te has conectado correctamente.");
//mostramos de forma global a todos los usuarios que un usuario
//se acaba de conectar al chat
socket.broadcast.emit("refreshChat", "conectado", "El usuario " + socket.username + " se ha conectado al chat.");
//actualizamos la lista de usuarios en el chat del lado del cliente
io.sockets.emit("updateSidebarUsers", usuariosOnline);
});
//cuando un usuario envia un nuevo mensaje, el parámetro es el
//mensaje que ha escrito en la caja de texto
socket.on('addNewMessage', function(message)
{
//pasamos un parámetro, que es el mensaje que ha escrito en el chat,
//ésto lo hacemos cuando el usuario pulsa el botón de enviar un nuevo mensaje al chat
//con socket.emit, el mensaje es para mi
socket.emit("refreshChat", "msg", "Yo : " + message + ".");
//con socket.broadcast.emit, es para el resto de usuarios
socket.broadcast.emit("refreshChat", "msg", socket.username + " dice: " + message + ".");
});
//cuando el usuario cierra o actualiza el navegador
socket.on("disconnect", function()
{
//si el usuario, por ejemplo, sin estar logueado refresca la
//página, el typeof del socket username es undefined, y el mensaje sería
//El usuario undefined se ha desconectado del chat, con ésto lo evitamos
if(typeof(socket.username) == "undefined")
{
return;
}
//en otro caso, eliminamos al usuario
delete usuariosOnline[socket.username];
//actualizamos la lista de usuarios en el chat, zona cliente
io.sockets.emit("updateSidebarUsers", usuariosOnline);
//emitimos el mensaje global a todos los que están conectados con broadcasts
socket.broadcast.emit("refreshChat", "desconectado", "El usuario " + socket.username + " se ha desconectado del chat.");
});
});
});
});
server.listen(process.env.OPENSHIFT_NODEJS_PORT || 3000,host);