Esempio n. 1
0
        public IPersistentConnection GetPeekConnection()
        {
            RequeueTimedOutCommits();

            while (true)
            {
                IPersistentConnection connection;

                if (!PeekConnections.TryPeek(out connection))
                {
                    Thread.Sleep(1);
                    return(null);
                }

                if (!connection.ConnectionState.HasFlag(ConnectionState.Subscribed) ||
                    connection.SubscriptionType != SubscriptionType.PeekAndCommit)
                {
                    PeekConnections.TryDequeue(out connection);
                    continue;
                }

                if (connection.NextPeekTime < _dateTimeProvider.UtcNow) // device can be checked for new outgoing messages
                {
                    if (!PeekConnections.TryDequeue(out connection))
                    {
                        continue;
                    }
                    return(connection);
                }

                Thread.Sleep(1);

                return(null); // we are too early
            }
        }
Esempio n. 2
0
 public void RequeueAsPeekConnections(IEnumerable <IPersistentConnection> connections)
 {
     foreach (var connection in connections)
     {
         connection.NextPeekTime = PeekTime;
         PeekConnections.Enqueue(connection);
     }
 }
Esempio n. 3
0
        public void CommitSuccess(string deviceId)
        {
            IPersistentConnection connection;

            if (CommitConnections.TryRemove(deviceId, out connection))
            {
                connection.NextPeekTime = PeekTime;
                PeekConnections.Enqueue(connection);
            }
        }
Esempio n. 4
0
        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();
        }