Beispiel #1
0
        public void Set(RemoteXControlMessage controlMessage)
        {
            if (!Running)
            {
                return;
            }
            if (latestControlMessage.ContainsKey(controlMessage.DataType))
            {
                latestControlMessage[controlMessage.DataType] = controlMessage;
            }
            else
            {
                latestControlMessage.Add(controlMessage.DataType, controlMessage);
            }

            RCMWithEnqueueTime rcmWithEnqueueTime = new RCMWithEnqueueTime(DateTime.Now, controlMessage);

            lock (unfetchedControlMessageBufferLock)
            {
                unfetchedControlMessageBuffer.Enqueue(rcmWithEnqueueTime);
                DateTime nowDateTime = DateTime.Now;
                DateTime earliestBufferEnqueueTime = unfetchedControlMessageBuffer.Peek().EnqueueDateTime;
                while ((nowDateTime - earliestBufferEnqueueTime) > RemoveBufferTimeout && unfetchedControlMessageBuffer.Count > 0)
                {
                    unfetchedControlMessageBuffer.Dequeue();
                    earliestBufferEnqueueTime = unfetchedControlMessageBuffer.Peek().EnqueueDateTime;
                }
            }
        }
Beispiel #2
0
 private Task removeTimeoutBufferAsync()
 {
     return(Task.Run(() =>
     {
         while (true)
         {
             lock (unfetchedControlMessageBufferLock)
             {
                 if (unfetchedControlMessageBuffer.Count > 0)
                 {
                     RCMWithEnqueueTime rcmWithEnqueueTime = unfetchedControlMessageBuffer.Peek();
                     if ((DateTime.Now - rcmWithEnqueueTime.EnqueueDateTime) > RemoveBufferTimeout)
                     {
                         unfetchedControlMessageBuffer.Dequeue();
                     }
                 }
             }
         }
     }));
 }