using IL.Common;
using System;
using System.Collections.Generic;
using System.IO.Pipes;
using System.Linq;
using System.Text;
using System.Threading;
namespace MediII.Adapter.MsgToKCServer
{
///
///
///
public class ServiceStatusPublishManager
{
///
///
///
static public readonly ServiceStatusPublishManager Instance = new ServiceStatusPublishManager();
private const int MAX_LENGTH = 1000;
private const string PIPENAME = ApplictStatic.ServerName;
private List _msgs;
private ManagerImple _managerImp;
///
///
///
protected ServiceStatusPublishManager()
{
_managerImp = new ManagerImple(this);
_msgs = new List();
}
///
///
///
///
public void AppendMessage(LogEventArgs msg)
{
lock (this) _msgs.Add(msg);
if (_msgs.Count > MAX_LENGTH)
{
lock (this)
{
_msgs.RemoveAt(0);
//if (_managerImp._msgIndex == _msgs.Count) _managerImp._msgIndex -= 2;
}
}
}
public LogEventArgs GetMessage()
{
lock (this)
{
if (_msgs.Count <= 0)
return null;
var data = _msgs[_msgs.Count - 1];
_msgs.Remove(data);
return data;
}
}
class ManagerImple
{
private ServiceStatusPublishManager _trace;
private Thread _thread;
public ManagerImple(ServiceStatusPublishManager trace)
{
_trace = trace;
_thread = new Thread(WriteServiceStatus);
_thread.Start();
}
//public int _msgIndex = 0;
private void WriteServiceStatus(object stats)
{
while (true)
{
try
{
using (var serverStream = new NamedPipeServerStream(PIPENAME, PipeDirection.InOut, 10, PipeTransmissionMode.Message))
{
serverStream.WaitForConnection();
while (serverStream.IsConnected)
{
System.Diagnostics.Debug.WriteLine("serverStream.IsConnected", ApplictStatic.ServerName);
bool writeSomeMessage = false;
LogEventArgs logData = null;
while ((logData = _trace.GetMessage()) != null)
{
var msg = string.Format("时间:{0} 是否成功:{1} 消息ID:{2} 消息内容:{3} ", logData.LogTime, string.IsNullOrEmpty(logData.LogModel.ErrorMsg), logData.LogModel.MessageID,
logData.LogModel.Message);
if (!string.IsNullOrEmpty(logData.LogModel.ErrorMsg))
{
msg += " 错误消息:"+logData.LogModel.ErrorMsg;
}
byte[] bytes = Encoding.UTF8.GetBytes(msg);
serverStream.Write(bytes, 0, bytes.Length);
serverStream.Flush();
writeSomeMessage = true;
Thread.Sleep(100);
}
//while (_msgIndex < _trace._msgs.Count)
//{
// var logData = _trace._msgs[_msgIndex];
// var msg = string.Format("时间:{0} 是否成功:{1} 消息ID:{2} 消息内容:{3} 错误信息:{4} ", logData.LogTime, string.IsNullOrEmpty(logData.LogModel.ErrorMsg), logData.LogModel.MessageID,
// logData.LogModel.Message, logData.LogModel.ErrorMsg);
// byte[] bytes = Encoding.UTF8.GetBytes(msg);
// serverStream.Write(bytes, 0, bytes.Length);
// serverStream.Flush();
// _msgIndex++;
// writeSomeMessage = true;
//}
if (!writeSomeMessage)
{
byte[] bytes = Encoding.UTF8.GetBytes("无消息输出");
serverStream.Write(bytes, 0, bytes.Length);
serverStream.Flush();
Thread.Sleep(1000 * 10);
}
Thread.Sleep(1000);
}
}
}
catch (Exception ex)
{
System.Diagnostics.Debug.WriteLine(ex.ToString(), ApplictStatic.ServerName);
}
}
}
}
}
}