2016-04-05 16:07:52 +00:00

80 lines
2.5 KiB
C#

/*********************************************************************************************
* Copyright 2016 - Volian Enterprises, Inc. All rights reserved.
* Volian Enterprises - Proprietary Information - DO NOT COPY OR DISTRIBUTE
*********************************************************************************************/
using System;
using System.Collections.Generic;
using System.IO.Pipes;
using System.Linq;
using System.Text;
//using System.Threading.Tasks;
namespace Volian.Pipe.Library
{
// Delegate for passing received message back to caller
public delegate void DelegateMessage(string Reply);
public class PipeServer
{
private string _Name;
public string Name
{
get { return _Name; }
set { _Name = value; }
}
public PipeServer(string name)
{
_Name = name;
}
public event DelegateMessage PipeMessage;
string _pipeName;
public void Listen()
{
try
{
// Create the new async pipe
NamedPipeServerStream pipeServer = new NamedPipeServerStream(Name, PipeDirection.In, 1, PipeTransmissionMode.Byte, PipeOptions.Asynchronous);
// Wait for a connection
pipeServer.BeginWaitForConnection(WaitForConnectionCallBack, pipeServer);
}
catch (Exception oEX)
{
Console.WriteLine(oEX.Message);
}
}
private void WaitForConnectionCallBack(IAsyncResult iar)
{
try
{
Console.WriteLine("========WaitForConnectionCallBack========\r\n");
// Get the pipe
NamedPipeServerStream pipeServer = (NamedPipeServerStream)iar.AsyncState;
// End waiting for the connection
pipeServer.EndWaitForConnection(iar);
byte[] buffer = new byte[4096];
// Read the incoming message
int bytecount = 4096;
StringBuilder sb = new StringBuilder();
while (bytecount == 4096)
{
bytecount = pipeServer.Read(buffer, 0, 4096);
// Convert byte buffer to string
string stringData = Encoding.UTF8.GetString(buffer, 0, bytecount);
sb.Append(stringData);
}
// Pass message back to calling form
PipeMessage.Invoke(sb.ToString());
// Kill original sever and create new wait server
pipeServer.Close();
pipeServer = null;
//pipeServer = new NamedPipeServerStream(_pipeName, PipeDirection.In, 1, PipeTransmissionMode.Byte, PipeOptions.Asynchronous);
//// Recursively wait for the connection again and again....
//pipeServer.BeginWaitForConnection(new AsyncCallback(WaitForConnectionCallBack), pipeServer);
Listen();
}
catch
{
return;
}
}
}
}