public static SubAckPacket InResponseTo(SubscribePacket subscribePacket, QualityOfService maxQoS) { var subAckPacket = new SubAckPacket { PacketId = subscribePacket.PacketId }; IReadOnlyList<SubscriptionRequest> subscriptionRequests = subscribePacket.Requests; var returnCodes = new QualityOfService[subscriptionRequests.Count]; for (int i = 0; i < subscriptionRequests.Count; i++) { QualityOfService requestedQos = subscriptionRequests[i].QualityOfService; returnCodes[i] = requestedQos <= maxQoS ? requestedQos : maxQoS; } subAckPacket.ReturnCodes = returnCodes; return subAckPacket; }
public static SubAckPacket InResponseTo(SubscribePacket subscribePacket, QualityOfService maxQoS) { var subAckPacket = new SubAckPacket { PacketId = subscribePacket.PacketId }; var subscriptionRequests = subscribePacket.Requests; var returnCodes = new QualityOfService[subscriptionRequests.Count]; for (int i = 0; i < subscriptionRequests.Count; i++) { QualityOfService requestedQos = subscriptionRequests[i].QualityOfService; returnCodes[i] = requestedQos <= maxQoS ? requestedQos : maxQoS; } subAckPacket.ReturnCodes = returnCodes; return(subAckPacket); }
async Task SubscribeAsync(IChannelHandlerContext context) { if (this.IsInState(StateFlags.Receiving) || this.IsInState(StateFlags.Subscribing)) { return; } this.stateFlags |= StateFlags.Subscribing; this.subscribeCompletion = new TaskCompletionSource(); string topicFilter = CommandTopicFilterFormat.FormatInvariant(this.deviceId); var subscribePacket = new SubscribePacket(Util.GetNextPacketId(), new SubscriptionRequest(topicFilter, this.mqttTransportSettings.ReceivingQoS)); await Util.WriteMessageAsync(context, subscribePacket, ShutdownOnWriteErrorHandler); await this.subscribeCompletion.Task; }
public static SubAckPacket AddSubscriptions(ISessionState session, SubscribePacket packet, QualityOfService maxSupportedQos) { List<Subscription> subscriptions = session.Subscriptions; var returnCodes = new List<QualityOfService>(subscriptions.Count); foreach (SubscriptionRequest request in packet.Requests) { Subscription existingSubscription = null; for (int i = subscriptions.Count - 1; i >= 0; i--) { Subscription subscription = subscriptions[i]; if (subscription.TopicFilter.Equals(request.TopicFilter, StringComparison.Ordinal)) { subscriptions.RemoveAt(i); existingSubscription = subscription; break; } } QualityOfService finalQos = request.QualityOfService < maxSupportedQos ? request.QualityOfService : maxSupportedQos; subscriptions.Add(existingSubscription == null ? new Subscription(request.TopicFilter, request.QualityOfService) : existingSubscription.CreateUpdated(finalQos)); returnCodes.Add(finalQos); } var ack = new SubAckPacket { PacketId = packet.PacketId, ReturnCodes = returnCodes }; return ack; }
public static SubAckPacket AddSubscriptions(ISessionState session, SubscribePacket packet, QualityOfService maxSupportedQos) { IReadOnlyList<ISubscription> subscriptions = session.Subscriptions; var returnCodes = new List<QualityOfService>(subscriptions.Count); foreach (SubscriptionRequest request in packet.Requests) { QualityOfService finalQos = request.QualityOfService < maxSupportedQos ? request.QualityOfService : maxSupportedQos; session.AddOrUpdateSubscription(request.TopicFilter, finalQos); returnCodes.Add(finalQos); } var ack = new SubAckPacket { PacketId = packet.PacketId, ReturnCodes = returnCodes }; return ack; }