using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO.Pipes;
using System.Security.Principal;
namespace TopInfo.Metevation.Common
{
public class PipeMessageUtil
{
private const string PipeName = "TopInfoPipe";
public static bool NeedSendMessage = false;
private static NamedPipeServerStream pipeServer;
private static NamedPipeClientStream pipeClient;
public static void OpenPiepServer()
{
if (pipeServer == null)
{
pipeServer = new NamedPipeServerStream(PipeName,
PipeDirection.Out, 1,
PipeTransmissionMode.Byte,
PipeOptions.Asynchronous);
pipeServer.BeginWaitForConnection(
delegate
{
NeedSendMessage = true;
pipeServer.WaitForConnection();
//pipeServer.EndWaitForConnection();
},
null);
}
}
public static void ClosePipeServer()
{
if (pipeServer != null && pipeServer.IsConnected)
pipeServer.Close();
NeedSendMessage = false;
}
public static void SendMessage(string msg)
{
if (NeedSendMessage && pipeServer.IsConnected && pipeServer.CanWrite)
{
StreamString ss = new StreamString(pipeServer);
ss.WriteString(msg);
}
}
public delegate void PrintMessage(string msg);//委托接受消息处理方法
public static void ReciverMessage(PrintMessage printMessage)
{
if (pipeClient == null)
{
pipeClient = new NamedPipeClientStream(".", PipeName, PipeDirection.In, PipeOptions.None, TokenImpersonationLevel.None);
pipeClient.Connect();
}
while (pipeClient.CanRead)
{
StreamString ss = new StreamString(pipeClient);
printMessage(ss.ReadString());
}
pipeClient.Close();
}
}
}