Queue.cs 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175
  1. using System;
  2. using System.Collections;
  3. using System.IO;
  4. using System.Runtime.Serialization;
  5. using System.Runtime.Serialization.Formatters.Binary;
  6. namespace ApiProcessToken.Models.common
  7. {
  8. public class Queue
  9. {
  10. private int maxQueueSize = 0;
  11. private ArrayList queueData = new ArrayList();
  12. private object mutex;
  13. public Queue()
  14. {
  15. maxQueueSize = 1000000;
  16. mutex = this;
  17. }
  18. public Queue(int maxSize)
  19. {
  20. maxQueueSize = maxSize;
  21. mutex = this;
  22. }
  23. public int Size()
  24. {
  25. lock (mutex)
  26. {
  27. return queueData.Count;
  28. }
  29. }
  30. public bool IsEmpty()
  31. {
  32. lock (mutex)
  33. {
  34. return (queueData.Count == 0);
  35. }
  36. }
  37. public object Dequeue()
  38. {
  39. lock (mutex)
  40. {
  41. object first = null;
  42. if (queueData.Count > 0)
  43. {
  44. first = queueData[0];
  45. queueData.RemoveAt(0);
  46. }
  47. return first;
  48. }
  49. }
  50. public object Dequeue(object obj)
  51. {
  52. object found = null;
  53. lock (mutex)
  54. {
  55. found = queueData.Contains(obj);
  56. if (found != null)
  57. {
  58. queueData.Remove(obj);
  59. }
  60. }
  61. return obj;
  62. }
  63. public void Enqueue(Object obj)
  64. {
  65. lock (mutex)
  66. {
  67. if (queueData.Count >= maxQueueSize)
  68. {
  69. throw new IndexOutOfRangeException("Queue is full. Element not added.");
  70. }
  71. queueData.Add(obj);
  72. }
  73. }
  74. public void Clear()
  75. {
  76. lock (mutex)
  77. {
  78. if (queueData.Count >= 0)
  79. {
  80. queueData.Clear();
  81. }
  82. }
  83. }
  84. public object Find(object obj)
  85. {
  86. lock (mutex)
  87. {
  88. object current;
  89. IEnumerator iter = queueData.GetEnumerator();
  90. while (iter.MoveNext())
  91. {
  92. current = iter.Current;
  93. if (current.Equals(obj))
  94. {
  95. return current;
  96. }
  97. }
  98. }
  99. return null;
  100. }
  101. public ArrayList ToArrayList()
  102. {
  103. return queueData;
  104. }
  105. public ArrayList ToArrayListAndClear()
  106. {
  107. lock (mutex)
  108. {
  109. ArrayList result = new ArrayList();
  110. if (queueData.Count >= 0)
  111. {
  112. result.AddRange(queueData);
  113. queueData.Clear();
  114. }
  115. return result;
  116. }
  117. }
  118. public void SaveQueue(string file_name)
  119. {
  120. if (File.Exists(file_name))
  121. {
  122. File.Delete(file_name);
  123. }
  124. Stream st = File.Create(file_name);
  125. BinaryFormatter bf = new BinaryFormatter();
  126. bf.Serialize(st, queueData);
  127. st.Close();
  128. }
  129. public int LoadQueue(string file_name)
  130. {
  131. if (File.Exists(file_name))
  132. {
  133. Stream st = File.OpenRead(file_name);
  134. if (st.Length > 0)
  135. {
  136. BinaryFormatter bf = new BinaryFormatter();
  137. queueData = (ArrayList)bf.Deserialize(st);
  138. }
  139. st.Close();
  140. //File.Delete(file_name);
  141. }
  142. return queueData.Count;
  143. }
  144. }
  145. }