Tracking de l'application VApp (IHM du jeu)
This commit is contained in:
183
VApp/node_modules/mqtt/src/lib/handlers/publish.ts
generated
vendored
Normal file
183
VApp/node_modules/mqtt/src/lib/handlers/publish.ts
generated
vendored
Normal file
@ -0,0 +1,183 @@
|
||||
import { IPublishPacket } from 'mqtt-packet'
|
||||
import { PacketHandler } from '../shared'
|
||||
|
||||
const validReasonCodes = [0, 16, 128, 131, 135, 144, 145, 151, 153]
|
||||
|
||||
/*
|
||||
those late 2 case should be rewrite to comply with coding style:
|
||||
|
||||
case 1:
|
||||
case 0:
|
||||
// do not wait sending a puback
|
||||
// no callback passed
|
||||
if (1 === qos) {
|
||||
this._sendPacket({
|
||||
cmd: 'puback',
|
||||
messageId: messageId
|
||||
});
|
||||
}
|
||||
// emit the message event for both qos 1 and 0
|
||||
this.emit('message', topic, message, packet);
|
||||
this.handleMessage(packet, done);
|
||||
break;
|
||||
default:
|
||||
// do nothing but every switch mus have a default
|
||||
// log or throw an error about unknown qos
|
||||
break;
|
||||
|
||||
for now i just suppressed the warnings
|
||||
*/
|
||||
const handlePublish: PacketHandler = (client, packet: IPublishPacket, done) => {
|
||||
client.log('handlePublish: packet %o', packet)
|
||||
done = typeof done !== 'undefined' ? done : client.noop
|
||||
let topic = packet.topic.toString()
|
||||
const message = packet.payload
|
||||
const { qos } = packet
|
||||
const { messageId } = packet
|
||||
const { options } = client
|
||||
if (client.options.protocolVersion === 5) {
|
||||
let alias: number
|
||||
if (packet.properties) {
|
||||
alias = packet.properties.topicAlias
|
||||
}
|
||||
if (typeof alias !== 'undefined') {
|
||||
if (topic.length === 0) {
|
||||
if (alias > 0 && alias <= 0xffff) {
|
||||
const gotTopic =
|
||||
client['topicAliasRecv'].getTopicByAlias(alias)
|
||||
if (gotTopic) {
|
||||
topic = gotTopic
|
||||
client.log(
|
||||
'handlePublish :: topic complemented by alias. topic: %s - alias: %d',
|
||||
topic,
|
||||
alias,
|
||||
)
|
||||
} else {
|
||||
client.log(
|
||||
'handlePublish :: unregistered topic alias. alias: %d',
|
||||
alias,
|
||||
)
|
||||
client.emit(
|
||||
'error',
|
||||
new Error('Received unregistered Topic Alias'),
|
||||
)
|
||||
return
|
||||
}
|
||||
} else {
|
||||
client.log(
|
||||
'handlePublish :: topic alias out of range. alias: %d',
|
||||
alias,
|
||||
)
|
||||
client.emit(
|
||||
'error',
|
||||
new Error('Received Topic Alias is out of range'),
|
||||
)
|
||||
return
|
||||
}
|
||||
} else if (client['topicAliasRecv'].put(topic, alias)) {
|
||||
client.log(
|
||||
'handlePublish :: registered topic: %s - alias: %d',
|
||||
topic,
|
||||
alias,
|
||||
)
|
||||
} else {
|
||||
client.log(
|
||||
'handlePublish :: topic alias out of range. alias: %d',
|
||||
alias,
|
||||
)
|
||||
client.emit(
|
||||
'error',
|
||||
new Error('Received Topic Alias is out of range'),
|
||||
)
|
||||
return
|
||||
}
|
||||
}
|
||||
}
|
||||
client.log('handlePublish: qos %d', qos)
|
||||
switch (qos) {
|
||||
case 2: {
|
||||
options.customHandleAcks(
|
||||
topic,
|
||||
message as Buffer,
|
||||
packet,
|
||||
(error, code) => {
|
||||
if (typeof error === 'number') {
|
||||
code = error
|
||||
error = null
|
||||
}
|
||||
if (error) {
|
||||
return client.emit('error', error as Error)
|
||||
}
|
||||
if (validReasonCodes.indexOf(code) === -1) {
|
||||
return client.emit(
|
||||
'error',
|
||||
new Error('Wrong reason code for pubrec'),
|
||||
)
|
||||
}
|
||||
if (code) {
|
||||
client['_sendPacket'](
|
||||
{ cmd: 'pubrec', messageId, reasonCode: code },
|
||||
done,
|
||||
)
|
||||
} else {
|
||||
client.incomingStore.put(packet, () => {
|
||||
client['_sendPacket'](
|
||||
{ cmd: 'pubrec', messageId },
|
||||
done,
|
||||
)
|
||||
})
|
||||
}
|
||||
},
|
||||
)
|
||||
break
|
||||
}
|
||||
case 1: {
|
||||
// emit the message event
|
||||
options.customHandleAcks(
|
||||
topic,
|
||||
message as Buffer,
|
||||
packet,
|
||||
(error, code) => {
|
||||
if (typeof error === 'number') {
|
||||
code = error
|
||||
error = null
|
||||
}
|
||||
if (error) {
|
||||
return client.emit('error', error as Error)
|
||||
}
|
||||
if (validReasonCodes.indexOf(code) === -1) {
|
||||
return client.emit(
|
||||
'error',
|
||||
new Error('Wrong reason code for puback'),
|
||||
)
|
||||
}
|
||||
if (!code) {
|
||||
client.emit('message', topic, message as Buffer, packet)
|
||||
}
|
||||
client.handleMessage(packet, (err) => {
|
||||
if (err) {
|
||||
return done && done(err)
|
||||
}
|
||||
client['_sendPacket'](
|
||||
{ cmd: 'puback', messageId, reasonCode: code },
|
||||
done,
|
||||
)
|
||||
})
|
||||
},
|
||||
)
|
||||
break
|
||||
}
|
||||
case 0:
|
||||
// emit the message event
|
||||
client.emit('message', topic, message as Buffer, packet)
|
||||
client.handleMessage(packet, done)
|
||||
break
|
||||
default:
|
||||
// do nothing
|
||||
client.log('handlePublish: unknown QoS. Doing nothing.')
|
||||
// log or throw an error about unknown qos
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
export default handlePublish
|
Reference in New Issue
Block a user