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;
 | |
| 			}
 | |
| 		}
 | |
| 	}
 | |
| } | 
