@@ -234,9 +234,14 @@ public async Task<PublishResult> PublishAsync(MQTT5PublishMessage message, Cance
234
234
throw new HiveMQttClientException ( "Retained messages are not supported by the broker" ) ;
235
235
}
236
236
237
- if ( message . QoS . HasValue && this . Connection . ConnectionProperties . MaximumQoS . HasValue &&
237
+ if ( message . QoS . HasValue && this . Connection ? . ConnectionProperties ? . MaximumQoS . HasValue == true &&
238
238
( ushort ) message . QoS . Value > this . Connection . ConnectionProperties . MaximumQoS . Value )
239
239
{
240
+ if ( this . Connection == null )
241
+ {
242
+ throw new HiveMQttClientException ( "Connection is not available" ) ;
243
+ }
244
+
240
245
Logger . Debug ( $ "Reducing message QoS from { message . QoS } to broker enforced maximum of { this . Connection . ConnectionProperties . MaximumQoS } ") ;
241
246
message . QoS = ( QualityOfService ) this . Connection . ConnectionProperties . MaximumQoS . Value ;
242
247
}
@@ -247,12 +252,17 @@ public async Task<PublishResult> PublishAsync(MQTT5PublishMessage message, Cance
247
252
var publishPacket = new PublishPacket ( message , 0 ) ;
248
253
Logger . Trace ( $ "Queuing QoS 0 publish packet for send: { publishPacket . GetType ( ) . Name } ") ;
249
254
250
- this . Connection . OutgoingPublishQueue . Enqueue ( publishPacket ) ;
255
+ this . Connection ? . OutgoingPublishQueue . Enqueue ( publishPacket ) ;
251
256
return new PublishResult ( publishPacket . Message ) ;
252
257
}
253
258
else if ( message . QoS == QualityOfService . AtLeastOnceDelivery )
254
259
{
255
260
// QoS 1: Acknowledged Delivery
261
+ if ( this . Connection == null )
262
+ {
263
+ throw new HiveMQttClientException ( "Connection is not available" ) ;
264
+ }
265
+
256
266
var packetIdentifier = await this . Connection . PacketIDManager . GetAvailablePacketIDAsync ( ) . ConfigureAwait ( false ) ;
257
267
var publishPacket = new PublishPacket ( message , ( ushort ) packetIdentifier ) ;
258
268
PubAckPacket pubAckPacket ;
@@ -278,6 +288,11 @@ public async Task<PublishResult> PublishAsync(MQTT5PublishMessage message, Cance
278
288
else if ( message . QoS == QualityOfService . ExactlyOnceDelivery )
279
289
{
280
290
// QoS 2: Assured Delivery
291
+ if ( this . Connection == null )
292
+ {
293
+ throw new HiveMQttClientException ( "Connection is not available" ) ;
294
+ }
295
+
281
296
var packetIdentifier = await this . Connection . PacketIDManager . GetAvailablePacketIDAsync ( ) . ConfigureAwait ( false ) ;
282
297
var publishPacket = new PublishPacket ( message , ( ushort ) packetIdentifier ) ;
283
298
var publishResult = new PublishResult ( publishPacket . Message ) ;
@@ -406,6 +421,11 @@ public async Task<SubscribeResult> SubscribeAsync(SubscribeOptions options)
406
421
// Fire the corresponding event
407
422
this . BeforeSubscribeEventLauncher ( options ) ;
408
423
424
+ if ( this . Connection == null )
425
+ {
426
+ throw new HiveMQttClientException ( "Connection is not available" ) ;
427
+ }
428
+
409
429
// FIXME: We should only ever have one subscribe in flight at any time (for now)
410
430
// Construct the MQTT Subscribe packet
411
431
var packetIdentifier = await this . Connection . PacketIDManager . GetAvailablePacketIDAsync ( ) . ConfigureAwait ( false ) ;
0 commit comments