private Task HandleIncomingPacketAsync(MqttBasePacket packet) { var subscribePacket = packet as MqttSubscribePacket; if (subscribePacket != null) { return(_adapter.SendPacketAsync(_subscriptionsManager.Subscribe(subscribePacket), _options.DefaultCommunicationTimeout)); } var unsubscribePacket = packet as MqttUnsubscribePacket; if (unsubscribePacket != null) { return(_adapter.SendPacketAsync(_subscriptionsManager.Unsubscribe(unsubscribePacket), _options.DefaultCommunicationTimeout)); } var publishPacket = packet as MqttPublishPacket; if (publishPacket != null) { return(HandleIncomingPublishPacketAsync(publishPacket)); } var pubRelPacket = packet as MqttPubRelPacket; if (pubRelPacket != null) { return(HandleIncomingPubRelPacketAsync(pubRelPacket)); } var pubAckPacket = packet as MqttPubAckPacket; if (pubAckPacket != null) { return(HandleIncomingPubAckPacketAsync(pubAckPacket)); } if (packet is MqttPingReqPacket) { return(_adapter.SendPacketAsync(new MqttPingRespPacket(), _options.DefaultCommunicationTimeout)); } if (packet is MqttDisconnectPacket || packet is MqttConnectPacket) { _cancellationTokenSource.Cancel(); return(Task.FromResult((object)null)); } MqttTrace.Warning(nameof(MqttClientSession), $"Client '{_identifier}': Received not supported packet ({packet}). Closing connection."); _cancellationTokenSource.Cancel(); return(Task.FromResult((object)null)); }
private Task ProcessReceivedPacketAsync(IMqttCommunicationAdapter adapter, MqttBasePacket packet, CancellationToken cancellationToken) { if (packet is MqttPingReqPacket) { return(adapter.SendPacketsAsync(_options.DefaultCommunicationTimeout, cancellationToken, new MqttPingRespPacket())); } if (packet is MqttPublishPacket publishPacket) { return(HandleIncomingPublishPacketAsync(adapter, publishPacket, cancellationToken)); } if (packet is MqttPubRelPacket pubRelPacket) { return(HandleIncomingPubRelPacketAsync(adapter, pubRelPacket, cancellationToken)); } if (packet is MqttPubRecPacket pubRecPacket) { return(adapter.SendPacketsAsync(_options.DefaultCommunicationTimeout, cancellationToken, pubRecPacket.CreateResponse <MqttPubRelPacket>())); } if (packet is MqttPubAckPacket || packet is MqttPubCompPacket) { // Discard message. return(Task.FromResult(0)); } if (packet is MqttSubscribePacket subscribePacket) { return(HandleIncomingSubscribePacketAsync(adapter, subscribePacket, cancellationToken)); } if (packet is MqttUnsubscribePacket unsubscribePacket) { return(adapter.SendPacketsAsync(_options.DefaultCommunicationTimeout, cancellationToken, _subscriptionsManager.Unsubscribe(unsubscribePacket))); } if (packet is MqttDisconnectPacket || packet is MqttConnectPacket) { return(StopAsync()); } _logger.LogWarning("Client '{0}': Received not supported packet ({1}). Closing connection.", ClientId, packet); return(StopAsync()); }
private Task HandleIncomingPacketAsync(MqttBasePacket packet) { if (packet is MqttSubscribePacket subscribePacket) { return(Adapter.SendPacketsAsync(_options.DefaultCommunicationTimeout, _cancellationTokenSource.Token, _subscriptionsManager.Subscribe(subscribePacket))); } if (packet is MqttUnsubscribePacket unsubscribePacket) { return(Adapter.SendPacketsAsync(_options.DefaultCommunicationTimeout, _cancellationTokenSource.Token, _subscriptionsManager.Unsubscribe(unsubscribePacket))); } if (packet is MqttPublishPacket publishPacket) { return(HandleIncomingPublishPacketAsync(publishPacket)); } if (packet is MqttPubRelPacket pubRelPacket) { return(HandleIncomingPubRelPacketAsync(pubRelPacket)); } if (packet is MqttPubRecPacket pubRecPacket) { return(Adapter.SendPacketsAsync(_options.DefaultCommunicationTimeout, _cancellationTokenSource.Token, pubRecPacket.CreateResponse <MqttPubRelPacket>())); } if (packet is MqttPubAckPacket || packet is MqttPubCompPacket) { // Discard message. return(Task.FromResult((object)null)); } if (packet is MqttPingReqPacket) { return(Adapter.SendPacketsAsync(_options.DefaultCommunicationTimeout, _cancellationTokenSource.Token, new MqttPingRespPacket())); } if (packet is MqttDisconnectPacket || packet is MqttConnectPacket) { _cancellationTokenSource.Cancel(); return(Task.FromResult((object)null)); } MqttTrace.Warning(nameof(MqttClientSession), "Client '{0}': Received not supported packet ({1}). Closing connection.", _identifier, packet); _cancellationTokenSource.Cancel(); return(Task.FromResult((object)null)); }
private async Task ProcessReceivedPacketAsync(IMqttCommunicationAdapter adapter, MqttBasePacket packet) { if (packet is MqttSubscribePacket subscribePacket) { await adapter.SendPacketsAsync(_options.DefaultCommunicationTimeout, _cancellationTokenSource.Token, _subscriptionsManager.Subscribe(subscribePacket)); EnqueueRetainedMessages(subscribePacket); } else if (packet is MqttUnsubscribePacket unsubscribePacket) { await adapter.SendPacketsAsync(_options.DefaultCommunicationTimeout, _cancellationTokenSource.Token, _subscriptionsManager.Unsubscribe(unsubscribePacket)); } else if (packet is MqttPublishPacket publishPacket) { await HandleIncomingPublishPacketAsync(adapter, publishPacket); } else if (packet is MqttPubRelPacket pubRelPacket) { await HandleIncomingPubRelPacketAsync(adapter, pubRelPacket); } else if (packet is MqttPubRecPacket pubRecPacket) { await adapter.SendPacketsAsync(_options.DefaultCommunicationTimeout, _cancellationTokenSource.Token, pubRecPacket.CreateResponse <MqttPubRelPacket>()); } else if (packet is MqttPubAckPacket || packet is MqttPubCompPacket) { // Discard message. } else if (packet is MqttPingReqPacket) { await adapter.SendPacketsAsync(_options.DefaultCommunicationTimeout, _cancellationTokenSource.Token, new MqttPingRespPacket()); } else if (packet is MqttDisconnectPacket || packet is MqttConnectPacket) { Stop(); } else { MqttNetTrace.Warning(nameof(MqttClientSession), "Client '{0}': Received not supported packet ({1}). Closing connection.", ClientId, packet); Stop(); } }