ServiceStatusPublishManager.cs 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149
  1. using IL.Common;
  2. using System;
  3. using System.Collections.Generic;
  4. using System.IO.Pipes;
  5. using System.Linq;
  6. using System.Text;
  7. using System.Threading;
  8. namespace MediII.Adapter.MsgToScanServer
  9. {
  10. /// <summary>
  11. ///
  12. /// </summary>
  13. public class ServiceStatusPublishManager
  14. {
  15. /// <summary>
  16. ///
  17. /// </summary>
  18. static public readonly ServiceStatusPublishManager Instance = new ServiceStatusPublishManager();
  19. private const int MAX_LENGTH = 1000;
  20. private const string PIPENAME = ApplictStatic.ServerName;
  21. private List<LogEventArgs> _msgs;
  22. private ManagerImple _managerImp;
  23. /// <summary>
  24. ///
  25. /// </summary>
  26. protected ServiceStatusPublishManager()
  27. {
  28. _managerImp = new ManagerImple(this);
  29. _msgs = new List<LogEventArgs>();
  30. }
  31. /// <summary>
  32. ///
  33. /// </summary>
  34. /// <param name="msg"></param>
  35. public void AppendMessage(LogEventArgs msg)
  36. {
  37. lock (this) _msgs.Add(msg);
  38. if (_msgs.Count > MAX_LENGTH)
  39. {
  40. lock (this)
  41. {
  42. _msgs.RemoveAt(0);
  43. //if (_managerImp._msgIndex == _msgs.Count) _managerImp._msgIndex -= 2;
  44. }
  45. }
  46. }
  47. public LogEventArgs GetMessage()
  48. {
  49. lock (this)
  50. {
  51. if (_msgs.Count <= 0)
  52. return null;
  53. var data = _msgs[_msgs.Count - 1];
  54. _msgs.Remove(data);
  55. return data;
  56. }
  57. }
  58. class ManagerImple
  59. {
  60. private ServiceStatusPublishManager _trace;
  61. private Thread _thread;
  62. public ManagerImple(ServiceStatusPublishManager trace)
  63. {
  64. _trace = trace;
  65. _thread = new Thread(WriteServiceStatus);
  66. _thread.Start();
  67. }
  68. //public int _msgIndex = 0;
  69. private void WriteServiceStatus(object stats)
  70. {
  71. while (true)
  72. {
  73. try
  74. {
  75. using (var serverStream = new NamedPipeServerStream(PIPENAME, PipeDirection.InOut, 10, PipeTransmissionMode.Message))
  76. {
  77. serverStream.WaitForConnection();
  78. while (serverStream.IsConnected)
  79. {
  80. System.Diagnostics.Debug.WriteLine("serverStream.IsConnected", ApplictStatic.ServerName);
  81. bool writeSomeMessage = false;
  82. LogEventArgs logData = null;
  83. while ((logData = _trace.GetMessage()) != null)
  84. {
  85. var msg = string.Format("时间:{0} 是否成功:{1} 消息ID:{2} 消息内容:{3} ", logData.LogTime, string.IsNullOrEmpty(logData.LogModel.ErrorMsg), logData.LogModel.MessageID,
  86. logData.LogModel.Message);
  87. if (!string.IsNullOrEmpty(logData.LogModel.ErrorMsg))
  88. {
  89. msg += " 错误消息:"+logData.LogModel.ErrorMsg;
  90. }
  91. byte[] bytes = Encoding.UTF8.GetBytes(msg);
  92. serverStream.Write(bytes, 0, bytes.Length);
  93. serverStream.Flush();
  94. writeSomeMessage = true;
  95. Thread.Sleep(100);
  96. }
  97. //while (_msgIndex < _trace._msgs.Count)
  98. //{
  99. // var logData = _trace._msgs[_msgIndex];
  100. // var msg = string.Format("时间:{0} 是否成功:{1} 消息ID:{2} 消息内容:{3} 错误信息:{4} ", logData.LogTime, string.IsNullOrEmpty(logData.LogModel.ErrorMsg), logData.LogModel.MessageID,
  101. // logData.LogModel.Message, logData.LogModel.ErrorMsg);
  102. // byte[] bytes = Encoding.UTF8.GetBytes(msg);
  103. // serverStream.Write(bytes, 0, bytes.Length);
  104. // serverStream.Flush();
  105. // _msgIndex++;
  106. // writeSomeMessage = true;
  107. //}
  108. if (!writeSomeMessage)
  109. {
  110. byte[] bytes = Encoding.UTF8.GetBytes("无消息输出");
  111. serverStream.Write(bytes, 0, bytes.Length);
  112. serverStream.Flush();
  113. Thread.Sleep(1000 * 10);
  114. }
  115. Thread.Sleep(1000);
  116. }
  117. }
  118. }
  119. catch (Exception ex)
  120. {
  121. System.Diagnostics.Debug.WriteLine(ex.ToString(), ApplictStatic.ServerName);
  122. }
  123. }
  124. }
  125. }
  126. }
  127. }