heyujie
2021-05-24 4885600ecc369aa2e30a65de8dd7a410f13c34df
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
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
/// <reference types="node" />
 
import * as events from 'events'
import {
  IClientOptions,
  IClientPublishOptions,
  IClientSubscribeOptions,
  IClientReconnectOptions
} from './client-options'
import { Store } from './store'
import { Packet, QoS } from 'mqtt-packet'
 
export interface ISubscriptionGrant {
  /**
   *  is a subscribed to topic
   */
  topic: string
  /**
   *  is the granted qos level on it, may return 128 on error
   */
  qos: QoS | number
}
export interface ISubscriptionRequest {
  /**
   *  is a subscribed to topic
   */
  topic: string
  /**
   *  is the granted qos level on it
   */
  qos: QoS
}
export interface ISubscriptionMap {
  /**
   * object which has topic names as object keys and as value the QoS, like {'test1': 0, 'test2': 1}.
   */
  [topic: string]: QoS
}
 
export declare type ClientSubscribeCallback = (err: Error, granted: ISubscriptionGrant[]) => void
export declare type OnMessageCallback = (topic: string, payload: Buffer, packet: Packet) => void
export declare type OnPacketCallback = (packet: Packet) => void
export declare type OnErrorCallback = (error: Error) => void
export declare type PacketCallback = (error?: Error, packet?: Packet) => any
export declare type CloseCallback = () => void
 
export interface IStream extends events.EventEmitter {
  pipe (to: any): any
  destroy (): any
  end (): any
}
/**
 * MqttClient constructor
 *
 * @param {Stream} stream - stream
 * @param {Object} [options] - connection options
 * (see Connection#connect)
 */
export declare class MqttClient extends events.EventEmitter {
  public connected: boolean
  public disconnecting: boolean
  public disconnected: boolean
  public reconnecting: boolean
  public incomingStore: Store
  public outgoingStore: Store
  public options: IClientOptions
  public queueQoSZero: boolean
 
  constructor (streamBuilder: (client: MqttClient) => IStream, options: IClientOptions)
 
  public on (event: 'message', cb: OnMessageCallback): this
  public on (event: 'packetsend' | 'packetreceive', cb: OnPacketCallback): this
  public on (event: 'error', cb: OnErrorCallback): this
  public on (event: string, cb: Function): this
 
  public once (event: 'message', cb: OnMessageCallback): this
  public once (event:
                'packetsend'
                | 'packetreceive', cb: OnPacketCallback): this
  public once (event: 'error', cb: OnErrorCallback): this
  public once (event: string, cb: Function): this
 
  /**
   * publish - publish <message> to <topic>
   *
   * @param {String} topic - topic to publish to
   * @param {(String|Buffer)} message - message to publish
   *
   * @param {Object}    [opts] - publish options, includes:
   *   @param {Number}  [opts.qos] - qos level to publish on
   *   @param {Boolean} [opts.retain] - whether or not to retain the message
   *
   * @param {Function} [callback] - function(err){}
   *    called when publish succeeds or fails
   * @returns {Client} this - for chaining
   * @api public
   *
   * @example client.publish('topic', 'message')
   * @example
   *     client.publish('topic', 'message', {qos: 1, retain: true})
   * @example client.publish('topic', 'message', console.log)
   */
  public publish (topic: string, message: string | Buffer,
                 opts: IClientPublishOptions, callback?: PacketCallback): this
  public publish (topic: string, message: string | Buffer,
                 callback?: PacketCallback): this
 
  /**
   * subscribe - subscribe to <topic>
   *
   * @param {String, Array, Object} topic - topic(s) to subscribe to, supports objects in the form {'topic': qos}
   * @param {Object} [opts] - optional subscription options, includes:
   * @param  {Number} [opts.qos] - subscribe qos level
   * @param {Function} [callback] - function(err, granted){} where:
   *    {Error} err - subscription error (none at the moment!)
   *    {Array} granted - array of {topic: 't', qos: 0}
   * @returns {MqttClient} this - for chaining
   * @api public
   * @example client.subscribe('topic')
   * @example client.subscribe('topic', {qos: 1})
   * @example client.subscribe({'topic': 0, 'topic2': 1}, console.log)
   * @example client.subscribe('topic', console.log)
   */
  public subscribe (topic:
                     string
                     | string[], opts: IClientSubscribeOptions, callback?: ClientSubscribeCallback): this
  public subscribe (topic:
                     string
                     | string[]
                     | ISubscriptionMap, callback?: ClientSubscribeCallback): this
 
  /**
   * unsubscribe - unsubscribe from topic(s)
   *
   * @param {String, Array} topic - topics to unsubscribe from
   * @param {Function} [callback] - callback fired on unsuback
   * @returns {MqttClient} this - for chaining
   * @api public
   * @example client.unsubscribe('topic')
   * @example client.unsubscribe('topic', console.log)
   */
  public unsubscribe (topic: string | string[], callback?: PacketCallback): this
 
  /**
   * end - close connection
   *
   * @returns {MqttClient} this - for chaining
   * @param {Boolean} force - do not wait for all in-flight messages to be acked
   * @param {Function} cb - called when the client has been closed
   *
   * @api public
   */
  public end (force?: boolean, cb?: CloseCallback): this
 
  /**
   * removeOutgoingMessage - remove a message in outgoing store
   * the outgoing callback will be called withe Error('Message removed') if the message is removed
   *
   * @param {Number} mid - messageId to remove message
   * @returns {MqttClient} this - for chaining
   * @api public
   *
   * @example client.removeOutgoingMessage(client.getLastMessageId());
   */
  public removeOutgoingMessage (mid: number): this
 
  /**
   * reconnect - connect again using the same options as connect()
   *
   * @param {Object} [opts] - optional reconnect options, includes:
   *    {Store} incomingStore - a store for the incoming packets
   *    {Store} outgoingStore - a store for the outgoing packets
   *    if opts is not given, current stores are used
   *
   * @returns {MqttClient} this - for chaining
   *
   * @api public
   */
  public reconnect (opts?: IClientReconnectOptions): this
 
  /**
   * Handle messages with backpressure support, one at a time.
   * Override at will.
   *
   * @param packet packet the packet
   * @param callback callback call when finished
   * @api public
   */
  public handleMessage (packet: Packet, callback: PacketCallback): void
 
  /**
   * getLastMessageId
   */
  public getLastMessageId (): number
}
export { IClientOptions }