[apps/tidep0084.git] / example / iot-gateway / node_modules / aws-iot-device-sdk / node_modules / mqtt / examples / server / websocket.js
1 var mqtt = require('../..')
2 , http = require('http')
3 , util = require('util')
4 , server = http.createServer();
6 mqtt.attachWebsocketServer(server, handle);
8 server.listen(process.argv[2] || 1883);
10 function handle(client) {
11 var self = this;
13 if (!self.clients) self.clients = {};
15 client.on('connect', function(packet) {
16 self.clients[packet.clientId] = client;
17 client.id = packet.clientId;
18 console.log("CONNECT: client id: " + client.id);
19 client.subscriptions = [];
20 client.connack({returnCode: 0});
21 });
23 client.on('subscribe', function(packet) {
24 var granted = [];
26 console.log("SUBSCRIBE(%s): %j", client.id, packet);
28 for (var i = 0; i < packet.subscriptions.length; i++) {
29 var qos = packet.subscriptions[i].qos
30 , topic = packet.subscriptions[i].topic
31 , reg = new RegExp(topic.replace('+', '[^\/]+').replace('#', '.+') + '$');
33 granted.push(qos);
34 client.subscriptions.push(reg);
35 }
37 client.suback({messageId: packet.messageId, granted: granted});
38 });
40 client.on('publish', function(packet) {
41 console.log("PUBLISH(%s): %j", client.id, packet);
42 for (var k in self.clients) {
43 var c = self.clients[k];
45 for (var i = 0; i < c.subscriptions.length; i++) {
46 var s = c.subscriptions[i];
48 if (s.test(packet.topic)) {
49 c.publish({topic: packet.topic, payload: packet.payload});
50 break;
51 }
52 }
53 }
54 });
56 client.on('pingreq', function(packet) {
57 console.log('PINGREQ(%s)', client.id);
58 client.pingresp();
59 });
61 client.on('disconnect', function(packet) {
62 client.stream.end();
63 });
65 client.on('close', function(packet) {
66 delete self.clients[client.id];
67 });
69 client.on('error', function(e) {
70 client.stream.end();
71 console.log(e);
72 });
73 }