SoftMsgQueue.cs 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using Newtonsoft.Json.Linq;
  6. namespace HslCommunication.BasicFramework
  7. {
  8. /// <summary>
  9. /// 一个简单通用的消息队列
  10. /// </summary>
  11. /// <typeparam name="T">类型</typeparam>
  12. public class SoftMsgQueue<T> : SoftFileSaveBase
  13. {
  14. #region Constructor
  15. /// <summary>
  16. /// 实例化一个对象
  17. /// </summary>
  18. public SoftMsgQueue()
  19. {
  20. LogHeaderText = "SoftMsgQueue<" + typeof(T).ToString() + ">";
  21. }
  22. #endregion
  23. /// <summary>
  24. /// 所有临时存储的数据
  25. /// </summary>
  26. private Queue<T> all_items = new Queue<T>();
  27. private int m_Max_Cache = 200;
  28. /// <summary>
  29. /// 临时消息存储的最大条数,必须大于10
  30. /// </summary>
  31. public int MaxCache
  32. {
  33. get { return m_Max_Cache; }
  34. set { if (value > 10) m_Max_Cache = value; }
  35. }
  36. /// <summary>
  37. /// 获取最新添加进去的数据
  38. /// </summary>
  39. public T CurrentItem
  40. {
  41. get
  42. {
  43. if (all_items.Count > 0)
  44. {
  45. return all_items.Peek();
  46. }
  47. else
  48. {
  49. return default(T);
  50. }
  51. }
  52. }
  53. /// <summary>
  54. /// 将集合进行锁定
  55. /// </summary>
  56. private object lock_queue = new object();
  57. /// <summary>
  58. /// 新增一条数据
  59. /// </summary>
  60. public void AddNewItem(T item)
  61. {
  62. lock (lock_queue)
  63. {
  64. while (all_items.Count >= m_Max_Cache)
  65. {
  66. all_items.Dequeue();
  67. }
  68. all_items.Enqueue(item);
  69. }
  70. }
  71. /// <summary>
  72. /// 获取存储字符串
  73. /// </summary>
  74. /// <returns></returns>
  75. public override string ToSaveString()
  76. {
  77. return JArray.FromObject(all_items).ToString();
  78. }
  79. /// <summary>
  80. /// 获取加载字符串
  81. /// </summary>
  82. /// <param name="content"></param>
  83. public override void LoadByString(string content)
  84. {
  85. JArray array = JArray.Parse(content);
  86. all_items = (Queue<T>)array.ToObject(typeof(Queue<T>));
  87. }
  88. }
  89. /// <summary>
  90. /// 系统的消息类,用来发送消息,和确认消息的
  91. /// </summary>
  92. public class MessageBoard
  93. {
  94. /// <summary>
  95. /// 发送方名称
  96. /// </summary>
  97. public string NameSend { get; set; } = "";
  98. /// <summary>
  99. /// 接收方名称
  100. /// </summary>
  101. public string NameReceive { get; set; } = "";
  102. /// <summary>
  103. /// 发送时间
  104. /// </summary>
  105. public DateTime SendTime { get; set; } = DateTime.Now;
  106. /// <summary>
  107. /// 发送的消息内容
  108. /// </summary>
  109. public string Content { get; set; } = "";
  110. /// <summary>
  111. /// 消息是否已经被查看
  112. /// </summary>
  113. public bool HasViewed { get; set; }
  114. }
  115. }