예제 #1
0
        public void UnsequentalDequeueWithSubOrdersTest()
        {
            var orderedQueue = new OrderedQueue <int>();

            int item;

            orderedQueue.Enqueue(0, 0, 1);
            orderedQueue.Enqueue(1, 1, 4);

            Assert.IsTrue(orderedQueue.TryDequeue(out item));
            Assert.AreEqual(1, item);
            Assert.IsFalse(orderedQueue.TryDequeue(out item));
            Assert.AreEqual(1, orderedQueue.Size);

            orderedQueue.Enqueue(1, 2, 5, true);
            Assert.IsFalse(orderedQueue.TryDequeue(out item));

            orderedQueue.Enqueue(1, 0, 3);
            Assert.IsFalse(orderedQueue.TryDequeue(out item));

            orderedQueue.Enqueue(0, 1, 2, true);
            Assert.IsTrue(orderedQueue.TryDequeue(out item));
            Assert.AreEqual(2, item);

            Assert.IsTrue(orderedQueue.TryDequeue(out item));
            Assert.AreEqual(3, item);

            Assert.IsTrue(orderedQueue.TryDequeue(out item));
            Assert.AreEqual(4, item);

            Assert.IsTrue(orderedQueue.TryDequeue(out item));
            Assert.AreEqual(5, item);
        }
예제 #2
0
        public void DequeueFromEmptryQueueTest()
        {
            var orderedQueue = new OrderedQueue <int>();
            int item;

            Assert.IsFalse(orderedQueue.TryDequeue(out item));
        }
예제 #3
0
        private SampleStream CreateTrackedStream(string track)
        {
            this.Running = true;

            var oq = new OrderedQueue();

            var ct = new SampleStream(credentials, oq)
                     .AddLanguage(Language.English)
                     .AddTrack(track)
                     .AddQueryParameter("result_type", "recent");

            return(ct);
        }
예제 #4
0
        public void EnqueueTest()
        {
            var orderedQueue = new OrderedQueue <int>();

            Assert.AreEqual(0, orderedQueue.Size);

            orderedQueue.Enqueue(0, 1);
            Assert.AreEqual(1, orderedQueue.Size);
            orderedQueue.Enqueue(2, 3);
            Assert.AreEqual(2, orderedQueue.Size);
            orderedQueue.Enqueue(1, 2);
            Assert.AreEqual(3, orderedQueue.Size);
        }
예제 #5
0
        public void UnsequentalDequeueTest()
        {
            var orderedQueue = new OrderedQueue <int>();

            int item;

            orderedQueue.Enqueue(0, 1);

            orderedQueue.Enqueue(4, 5);
            Assert.IsTrue(orderedQueue.TryDequeue(out item));
            Assert.AreEqual(1, item);
            Assert.IsFalse(orderedQueue.TryDequeue(out item));
            Assert.AreEqual(1, orderedQueue.Size);

            orderedQueue.Enqueue(3, 4);
            Assert.IsFalse(orderedQueue.TryDequeue(out item));

            orderedQueue.Enqueue(1, 2);
            Assert.IsTrue(orderedQueue.TryDequeue(out item));
            Assert.AreEqual(2, item);
            Assert.IsFalse(orderedQueue.TryDequeue(out item));
            Assert.AreEqual(2, orderedQueue.Size);

            orderedQueue.Enqueue(2, 3);

            Assert.IsTrue(orderedQueue.TryDequeue(out item));
            Assert.AreEqual(3, item);
            Assert.AreEqual(2, orderedQueue.Size);

            Assert.IsTrue(orderedQueue.TryDequeue(out item));
            Assert.AreEqual(4, item);
            Assert.AreEqual(1, orderedQueue.Size);

            Assert.IsTrue(orderedQueue.TryDequeue(out item));
            Assert.AreEqual(5, item);
            Assert.AreEqual(0, orderedQueue.Size);
        }
예제 #6
0
 public SampleStream(ICredentials credentials, OrderedQueue orderedQueue)
 {
     Auth.SetCredentials(new Tweetinvi.Models.TwitterCredentials(credentials.ConsumerKey, credentials.ConsumerSecret, credentials.AccessToken, credentials.AccessTokenSecret));
     this.Queue          = orderedQueue;
     this.filteredStream = Tweetinvi.Stream.CreateFilteredStream();
 }
        private ProcessRequest RunProcessRequestProtocol(ClientRequest clientRequest)
        {
            if (this.replicaState.ClientTable.TryGetValue(clientRequest.ClientId, out Tuple <int, ClientResponse> clientResponse))
            {
                // Key is in the dictionary
                if (clientResponse == null || clientResponse.Item1 < 0 ||
                    clientRequest.RequestNumber < clientResponse.Item1)
                {
                    // Duplicate Request: Long forgotten => drop
                    return(ProcessRequest.DROP);
                }

                if (clientRequest.RequestNumber == clientResponse.Item1)
                {
                    // Duplicate Request
                    // If it is in execution.. wait.
                    if (clientResponse.Item2.GetType() == typeof(Executor))
                    {
                        Executor executor = (Executor)clientResponse.Item2;
                        executor.Executed.WaitOne();
                    }
                    return(ProcessRequest.LAST_EXECUTION);
                }

                // Execute the requests in client's casual order
                if (clientRequest.RequestNumber != clientResponse.Item1 + 1)
                {
                    if (!this.replicaState.HandlersClient.ContainsKey(clientRequest.ClientId))
                    {
                        this.replicaState.HandlersClient.TryAdd(
                            clientRequest.ClientId,
                            new EventWaitHandle(false, EventResetMode.ManualReset));
                    }

                    this.replicaState.HandlersClient.TryGetValue(
                        clientRequest.ClientId,
                        out EventWaitHandle myHandler);
                    while (clientRequest.RequestNumber != clientResponse.Item1 + 1)
                    {
                        if (clientRequest.RequestNumber > clientResponse.Item1 + 1)
                        {
                            return(ProcessRequest.DROP);
                        }
                        myHandler.WaitOne();
                    }
                }
            }
            else
            {
                // Not in dictionary... Add with value as null
                this.replicaState.ClientTable.Add(clientRequest.ClientId, new Tuple <int, ClientResponse>(-1, null));
            }

            // Send Prepare Message and waits for f replies. opNumber is the order we agreed upon.
            int      opNumber       = this.SendPrepareMessage(clientRequest);
            Executor clientExecutor = ExecutorFactory.Factory(clientRequest, opNumber);

            // Add request to queue
            OrderedQueue.AddRequestToQueue(this.replicaState, clientRequest, clientExecutor);

            // Wait execution
            clientExecutor.Executed.WaitOne();

            return(ProcessRequest.LAST_EXECUTION);
        }
예제 #8
0
 public EventScheduler()
 {
     this.queue = new OrderedQueue <Event <T> >();
 }