78 lines
1.8 KiB
JavaScript
78 lines
1.8 KiB
JavaScript
'use strict'
|
|
|
|
const handleConnect = require('./connect')
|
|
const handleSubscribe = require('./subscribe')
|
|
const handleUnsubscribe = require('./unsubscribe')
|
|
const handlePublish = require('./publish')
|
|
const handlePuback = require('./puback')
|
|
const handlePubrel = require('./pubrel')
|
|
const handlePubrec = require('./pubrec')
|
|
const handlePing = require('./ping')
|
|
|
|
function handle (client, packet, done) {
|
|
if (packet.cmd === 'connect') {
|
|
if (client.connecting || client.connected) {
|
|
// [MQTT-3.1.0-2]
|
|
finish(client.conn, packet, done)
|
|
return
|
|
}
|
|
handleConnect(client, packet, done)
|
|
return
|
|
}
|
|
|
|
if (!client.connecting && !client.connected) {
|
|
// [MQTT-3.1.0-1]
|
|
finish(client.conn, packet, done)
|
|
return
|
|
}
|
|
|
|
switch (packet.cmd) {
|
|
case 'publish':
|
|
handlePublish(client, packet, done)
|
|
break
|
|
case 'subscribe':
|
|
handleSubscribe(client, packet, false, done)
|
|
break
|
|
case 'unsubscribe':
|
|
handleUnsubscribe(client, packet, done)
|
|
break
|
|
case 'pubcomp':
|
|
case 'puback':
|
|
handlePuback(client, packet, done)
|
|
break
|
|
case 'pubrel':
|
|
handlePubrel(client, packet, done)
|
|
break
|
|
case 'pubrec':
|
|
handlePubrec(client, packet, done)
|
|
break
|
|
case 'pingreq':
|
|
handlePing(client, packet, done)
|
|
break
|
|
case 'disconnect':
|
|
// [MQTT-3.14.4-3]
|
|
client._disconnected = true
|
|
// [MQTT-3.14.4-1] [MQTT-3.14.4-2]
|
|
client.conn.destroy()
|
|
done()
|
|
return
|
|
default:
|
|
client.conn.destroy()
|
|
done()
|
|
return
|
|
}
|
|
|
|
if (client._keepaliveInterval > 0) {
|
|
client._keepaliveTimer.reschedule(client._keepaliveInterval)
|
|
}
|
|
}
|
|
|
|
function finish (conn, packet, done) {
|
|
conn.destroy()
|
|
const error = new Error('Invalid protocol')
|
|
error.info = packet
|
|
done(error)
|
|
}
|
|
|
|
module.exports = handle
|