public void Start(Func<BinaryReader, BinaryWriter, bool> action, IDictionary<string, object> initialMessage, int timeout)
{
StreamAction = action;
using (NamedPipeClientStream pipeClient = new NamedPipeClientStream(".", Name, PipeDirection.InOut,
PipeOptions.WriteThrough, TokenImpersonationLevel.None, HandleInheritability.None))
{
for (int x = 1; x <= 5; x++)
{
try
{
pipeClient.Connect(timeout);
}
catch (Exception e)
{
if (x == 5)
{
LibraryLogging.Error("Error connecting PipeClient: {0}", e);
return;
}
Thread.Sleep(100);
}
}
// Write the initial message to get the pumps running,
// error handling to prevent a pipe error exception
try
{
using (BinaryReader reader = new BinaryReader(pipeClient, Encoding.Unicode/*, true*/))
{
using (BinaryWriter writer = new BinaryWriter(pipeClient, Encoding.Unicode/*, true*/))
{
HandlePipeConnection(reader, writer, null);
}
}
}
catch (IOException)
{
LibraryLogging.Error("Error broken pipe connection");
Start(action, initialMessage, timeout);
}
}
}