80 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			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;
 | 
						|
			}
 | 
						|
		}
 | 
						|
	}
 | 
						|
} |