diff options
| author | Roy Ben Shabat <Roy.mail.net@gmail.com> | 2020-03-20 04:03:05 +0200 |
|---|---|---|
| committer | Roy Ben Shabat <Roy.mail.net@gmail.com> | 2020-03-20 04:03:05 +0200 |
| commit | d0dba9752d0a8e787d9ae1d4d25542bd4b386df6 (patch) | |
| tree | b71977215c188d65d61fcfb66e982a8363b4d803 /Software/Visual_Studio/Tango.Core | |
| parent | 7f0b3b209792cb935b9cfca4542c45318a309717 (diff) | |
| download | Tango-d0dba9752d0a8e787d9ae1d4d25542bd4b386df6.tar.gz Tango-d0dba9752d0a8e787d9ae1d4d25542bd4b386df6.zip | |
Implemented priority queues for Transport Layer.
Working on file/folder download.
Diffstat (limited to 'Software/Visual_Studio/Tango.Core')
| -rw-r--r-- | Software/Visual_Studio/Tango.Core/PriorityProducerConsumerQueue.cs | 63 | ||||
| -rw-r--r-- | Software/Visual_Studio/Tango.Core/Tango.Core.csproj | 3 |
2 files changed, 65 insertions, 1 deletions
diff --git a/Software/Visual_Studio/Tango.Core/PriorityProducerConsumerQueue.cs b/Software/Visual_Studio/Tango.Core/PriorityProducerConsumerQueue.cs new file mode 100644 index 000000000..dcc71a4ef --- /dev/null +++ b/Software/Visual_Studio/Tango.Core/PriorityProducerConsumerQueue.cs @@ -0,0 +1,63 @@ +using System; +using System.Collections.Concurrent; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Tango.Core +{ + public enum QueuePriority + { + Standard, + High, + Low + } + + public class PriorityProducerConsumerQueue<T> + { + private ProducerConsumerQueue<T> _lowPriorityCollection; + private ProducerConsumerQueue<T> _standardPriorityCollection; + private ProducerConsumerQueue<T> _highPriorityCollection; + private ProducerConsumerQueue<T>[] _collections; + + public PriorityProducerConsumerQueue() + { + _lowPriorityCollection = new ProducerConsumerQueue<T>(); + _standardPriorityCollection = new ProducerConsumerQueue<T>(); + _highPriorityCollection = new ProducerConsumerQueue<T>(); + _collections = new ProducerConsumerQueue<T>[] { _highPriorityCollection, _standardPriorityCollection, _lowPriorityCollection }; + } + + /// <summary> + /// Enqueues the specified item. + /// </summary> + /// <param name="item">The item.</param> + public void BlockEnqueue(T item, QueuePriority priority = QueuePriority.Standard) + { + switch (priority) + { + case QueuePriority.Low: + _lowPriorityCollection.Add(item); + break; + case QueuePriority.Standard: + _standardPriorityCollection.Add(item); + break; + case QueuePriority.High: + _highPriorityCollection.Add(item); + break; + } + } + + /// <summary> + /// Blocks until an item is available for dequeuing. + /// </summary> + /// <returns></returns> + public T BlockDequeue() + { + T item; + int index = BlockingCollection<T>.TakeFromAny(_collections, out item); + return item; + } + } +} diff --git a/Software/Visual_Studio/Tango.Core/Tango.Core.csproj b/Software/Visual_Studio/Tango.Core/Tango.Core.csproj index b4496a368..d37259b58 100644 --- a/Software/Visual_Studio/Tango.Core/Tango.Core.csproj +++ b/Software/Visual_Studio/Tango.Core/Tango.Core.csproj @@ -98,6 +98,7 @@ <Compile Include="ExtensionMethods\ZipArchiveExtensions.cs" /> <Compile Include="IO\KnownFolders.cs" /> <Compile Include="Json\ProtobufContractResolver.cs" /> + <Compile Include="PriorityProducerConsumerQueue.cs" /> <Compile Include="Threading\ActionTimer.cs" /> <Compile Include="Threading\IntervalMessageDispatcher.cs" /> <Compile Include="Threading\TaskSequencer.cs" /> @@ -207,7 +208,7 @@ <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> <ProjectExtensions> <VisualStudio> - <UserProperties BuildVersion_StartDate="2000/1/1" BuildVersion_UseGlobalSettings="False" BuildVersion_BuildVersioningStyle="None.None.Increment.TimeStamp" BuildVersion_UpdateAssemblyVersion="True" BuildVersion_AssemblyInfoFilename="Properties\AssemblyInfo.cs" /> + <UserProperties BuildVersion_AssemblyInfoFilename="Properties\AssemblyInfo.cs" BuildVersion_UpdateAssemblyVersion="True" BuildVersion_BuildVersioningStyle="None.None.Increment.TimeStamp" BuildVersion_UseGlobalSettings="False" BuildVersion_StartDate="2000/1/1" /> </VisualStudio> </ProjectExtensions> <Import Project="..\packages\System.Data.SQLite.Core.1.0.108.0\build\net46\System.Data.SQLite.Core.targets" Condition="Exists('..\packages\System.Data.SQLite.Core.1.0.108.0\build\net46\System.Data.SQLite.Core.targets')" /> |
