public IPersistentConnection GetReceiveAndForgetConnection() { while (true) { IPersistentConnection connection; if (!ReceiveAndForgetConnections.TryPeek(out connection)) { Thread.Sleep(1); return(null); } if (!connection.ConnectionState.HasFlag(ConnectionState.Subscribed) || connection.SubscriptionType != SubscriptionType.ReceiveAndForget) { ReceiveAndForgetConnections.TryDequeue(out connection); continue; } if (connection.NextReceiveAndForgetTime < _dateTimeProvider.UtcNow) // device can be checked for new outgoing messages { if (!ReceiveAndForgetConnections.TryDequeue(out connection)) { continue; } connection.NextReceiveAndForgetTime = ReceiveAndForgetTime; ReceiveAndForgetConnections.Enqueue(connection); return(connection); } Thread.Sleep(1); return(null); // we are too early } }
public void AddConnection(IPersistentConnection connection) { if (connection.SubscriptionType == SubscriptionType.ReceiveAndForget) { connection.NextReceiveAndForgetTime = ReceiveAndForgetTime; ReceiveAndForgetConnections.Enqueue(connection); return; } if (connection.SubscriptionType == SubscriptionType.PeekAndCommit) { connection.NextPeekTime = PeekTime; PeekConnections.Enqueue(connection); return; } throw new NotImplementedException(); }