wechat wss demo

constants.js 2.6KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. 'use strict'
  2. var Buffer = require('safe-buffer').Buffer
  3. /* Protocol - protocol constants */
  4. var protocol = module.exports
  5. /* Command code => mnemonic */
  6. protocol.types = {
  7. 0: 'reserved',
  8. 1: 'connect',
  9. 2: 'connack',
  10. 3: 'publish',
  11. 4: 'puback',
  12. 5: 'pubrec',
  13. 6: 'pubrel',
  14. 7: 'pubcomp',
  15. 8: 'subscribe',
  16. 9: 'suback',
  17. 10: 'unsubscribe',
  18. 11: 'unsuback',
  19. 12: 'pingreq',
  20. 13: 'pingresp',
  21. 14: 'disconnect',
  22. 15: 'reserved'
  23. }
  24. /* Mnemonic => Command code */
  25. protocol.codes = {}
  26. for (var k in protocol.types) {
  27. var v = protocol.types[k]
  28. protocol.codes[v] = k
  29. }
  30. /* Header */
  31. protocol.CMD_SHIFT = 4
  32. protocol.CMD_MASK = 0xF0
  33. protocol.DUP_MASK = 0x08
  34. protocol.QOS_MASK = 0x03
  35. protocol.QOS_SHIFT = 1
  36. protocol.RETAIN_MASK = 0x01
  37. /* Length */
  38. protocol.LENGTH_MASK = 0x7F
  39. protocol.LENGTH_FIN_MASK = 0x80
  40. /* Connack */
  41. protocol.SESSIONPRESENT_MASK = 0x01
  42. protocol.SESSIONPRESENT_HEADER = Buffer.from([protocol.SESSIONPRESENT_MASK])
  43. protocol.CONNACK_HEADER = Buffer.from([protocol.codes['connack'] << protocol.CMD_SHIFT])
  44. /* Connect */
  45. protocol.USERNAME_MASK = 0x80
  46. protocol.PASSWORD_MASK = 0x40
  47. protocol.WILL_RETAIN_MASK = 0x20
  48. protocol.WILL_QOS_MASK = 0x18
  49. protocol.WILL_QOS_SHIFT = 3
  50. protocol.WILL_FLAG_MASK = 0x04
  51. protocol.CLEAN_SESSION_MASK = 0x02
  52. protocol.CONNECT_HEADER = Buffer.from([protocol.codes['connect'] << protocol.CMD_SHIFT])
  53. function genHeader (type) {
  54. return [0, 1, 2].map(function (qos) {
  55. return [0, 1].map(function (dup) {
  56. return [0, 1].map(function (retain) {
  57. var buf = new Buffer(1)
  58. buf.writeUInt8(
  59. protocol.codes[type] << protocol.CMD_SHIFT |
  60. (dup ? protocol.DUP_MASK : 0) |
  61. qos << protocol.QOS_SHIFT | retain, 0, true)
  62. return buf
  63. })
  64. })
  65. })
  66. }
  67. /* Publish */
  68. protocol.PUBLISH_HEADER = genHeader('publish')
  69. /* Subscribe */
  70. protocol.SUBSCRIBE_HEADER = genHeader('subscribe')
  71. /* Unsubscribe */
  72. protocol.UNSUBSCRIBE_HEADER = genHeader('unsubscribe')
  73. /* Confirmations */
  74. protocol.ACKS = {
  75. unsuback: genHeader('unsuback'),
  76. puback: genHeader('puback'),
  77. pubcomp: genHeader('pubcomp'),
  78. pubrel: genHeader('pubrel'),
  79. pubrec: genHeader('pubrec')
  80. }
  81. protocol.SUBACK_HEADER = Buffer.from([protocol.codes['suback'] << protocol.CMD_SHIFT])
  82. /* Protocol versions */
  83. protocol.VERSION3 = Buffer.from([3])
  84. protocol.VERSION4 = Buffer.from([4])
  85. /* QoS */
  86. protocol.QOS = [0, 1, 2].map(function (qos) {
  87. return Buffer.from([qos])
  88. })
  89. /* Empty packets */
  90. protocol.EMPTY = {
  91. pingreq: Buffer.from([protocol.codes['pingreq'] << 4, 0]),
  92. pingresp: Buffer.from([protocol.codes['pingresp'] << 4, 0]),
  93. disconnect: Buffer.from([protocol.codes['disconnect'] << 4, 0])
  94. }