-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathserver.js
More file actions
67 lines (63 loc) · 2.95 KB
/
server.js
File metadata and controls
67 lines (63 loc) · 2.95 KB
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
let config = require('./config.json');
var amqp = require('amqp'),
io = require('socket.io')(8001, {path: '/socket/'});
var connection = amqp.createConnection({
host: config.host,
port: config.port,
login: config.login,
password: config.password});
connection.on('error', function(e) {
console.log("Error from amqp: ", e);
});
let checkAuthToken = function(token) {
//тут можем проверять токен, делая запрос на бекенд
return (typeof token !== "undefined" && token) ? true : false;
};
connection.on('ready', function () {
connection.exchange("chat_exchange", options={type:'fanout'}, function(exchange) {
io.sockets.on('connection', function(socket){
console.log('A user connected', socket.id);
socket.auth = false;
socket.token = '';
socket.on('authenticate', function(data){
if(checkAuthToken(data.token)) {
console.log("Authenticated socket ", socket.id);
socket.auth = true;
}
socket.token = data.token;
if (!socket.auth) {
console.log("Disconnecting socket ", socket.id);
socket.emit('auth', 'unauthorized');
socket.disconnect('unauthorized');
}
connection.queue('yashenkov' + socket.token, {closeChannelOnUnsubscribe: true, autoDelete: true}, function (queue) {
var ctag;
queue.bind(exchange, '');
queue.subscribe(function (message) {
console.log('-----------------');
console.log('Subscribed to queue', queue.name);
var encoded_payload = unescape(message.data);
var payload = JSON.parse(encoded_payload);
console.log('Recieved a message:', payload);
socket.emit('chat-message', payload);
}).addCallback(function(ok) { ctag = ok.consumerTag; });
socket.on('disconnect', function () {
console.log('User disconnected', socket.id);
queue.unsubscribe(ctag);
console.log('User unsubscribed', socket.id);
console.log('-----------------');
});
socket.on('chat-message', function(msg){
console.log('Received message from client: ' + msg);
sendMessage(exchange, msg)
});
});
});
});
var sendMessage = function(exchange, payload) {
console.log('Sending message to exchange...', exchange.name);
var encoded_payload = JSON.stringify(payload);
exchange.publish('', encoded_payload, {})
};
})
});