Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Diagnostics;
- using System.IO;
- using System.IO.Pipes;
- using System.Threading;
- namespace ConsoleApplication1
- {
- public class PipeServer
- {
- bool running;
- Thread runningThread;
- EventWaitHandle terminateHandle = new EventWaitHandle(false, EventResetMode.AutoReset);
- public string PipeName { get; set; }
- void ServerLoop()
- {
- while (running)
- {
- ProcessNextClient();
- }
- terminateHandle.Set();
- }
- public void Run()
- {
- running = true;
- runningThread = new Thread(ServerLoop);
- runningThread.Start();
- }
- public void Stop()
- {
- running = false;
- terminateHandle.WaitOne();
- }
- public virtual string ProcessRequest(string message)
- {
- return "";
- }
- public void ProcessClientThread(object o)
- {
- NamedPipeServerStream pipeStream = (NamedPipeServerStream)o;
- //TODO FOR YOU: Write code for handling pipe client here
- StreamReader reader = new StreamReader(pipeStream);
- int number = Process.GetCurrentProcess().Threads.Count;
- Console.WriteLine(number);
- string line = "";
- line = reader.ReadLine();
- pipeStream.Close();
- pipeStream.Dispose();
- }
- public void ProcessNextClient()
- {
- try
- {
- NamedPipeServerStream pipeStream = new NamedPipeServerStream(PipeName, PipeDirection.InOut, 254);
- Console.WriteLine(PipeName);
- pipeStream.WaitForConnection();
- //Spawn a new thread for each request and continue waiting
- Thread t = new Thread(ProcessClientThread);
- t.Start(pipeStream);
- }
- catch (Exception e)
- {//If there are no more avail connections (254 is in use already) then just keep looping until one is avail
- }
- }
- class Program
- {
- static void Main(string[] args)
- {
- var pipedServer = new PipeServer();
- pipedServer.PipeName = "TestPipe";
- pipedServer.Run();
- int number = Process.GetCurrentProcess().Threads.Count;
- Console.WriteLine(number);
- }
- }
- }
- }
- /*
- var server = new NamedPipeServerStream("PipesOfPiece");
- server.WaitForConnection();
- StreamReader reader = new StreamReader(server);
- StreamWriter writer = new StreamWriter(server);
- string line = "";
- line = reader.ReadLine();
- var client_request = line.Split(".");
- if (client_request[0] == @"-w")
- {
- try
- {
- string writePath = @"D:\_Useful stuff here\Developing\ForServ\Response.txt";
- using (StreamWriter sw = new StreamWriter(writePath, true, System.Text.Encoding.Default))
- {
- sw.WriteLine(client_request[1]);
- }
- Console.WriteLine("Write complete");
- }
- catch (Exception e)
- {
- Console.WriteLine(e.Message);
- }
- }
- if (client_request[0] == @"-r")
- {
- string response_string = "";
- try
- {
- string readPath = @"D:\_Useful stuff here\Developing\ForServ\Response.txt";
- using (StreamReader sr = new StreamReader(readPath, System.Text.Encoding.Default))
- {
- string line2;
- while ((line2 = sr.ReadLine()) != null)
- {
- response_string += line2 + "\n";
- }
- }
- }
- catch (Exception e)
- {
- Console.WriteLine(e.Message);
- }
- Task.Delay(1000).Wait();
- // отправляем сообщение
- writer.WriteLine(response_string);
- writer.Write((char)0);
- writer.Flush();
- server.WaitForPipeDrain();
- line = "";
- client_request[0] = null;
- }
- */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement