forked from CCob/SharpBlock
-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathPipeServer.cs
111 lines (91 loc) · 2.78 KB
/
PipeServer.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.IO.Pipes;
using System.Linq;
using System.Text;
using System.Threading;
namespace SharpBlock
{
class PipeServer
{
private string PipeName = "";
private static volatile int RuningThreadID = 0;
private int MaxThread;
private static volatile int SectionCount = 0;
private static NamedPipeServerStream[] ServerGroup;
private StringBuilder PipeContentStream = new StringBuilder();
public static readonly object _locker = new object();
public PipeServer(int MaxThread, String PipeName)
{
this.MaxThread = MaxThread;
ServerGroup = new NamedPipeServerStream[MaxThread];
this.PipeName = PipeName;
}
public void DisposePipe()
{
if (ServerGroup != null)
{
foreach (NamedPipeServerStream item in ServerGroup)
{
try
{
item.Dispose();
}
catch (NullReferenceException e)
{
}
}
}
}
public void StartServers()
{
ArrayList ThreadArr = new ArrayList();
for (int i = 0; i < this.MaxThread; i++)
{
Thread thread = new Thread(new ThreadStart(StartNewPipeServer));
thread.Start();
ThreadArr.Add(thread);
}
foreach (Thread t in ThreadArr)
{
t.Join();
}
}
public StringBuilder GetContent()
{
return this.PipeContentStream;
}
private void StartNewPipeServer()
{
NamedPipeServerStream stream = null;
stream = ServerGroup[RuningThreadID] = new NamedPipeServerStream(
this.PipeName,
PipeDirection.In,
this.MaxThread
);
RuningThreadID += 1;
StreamReader sr = new StreamReader(stream);
while (true)
{
stream.WaitForConnection();
String sResult = sr.ReadToEnd();
if (sResult == "ok")
{
break;
}
else
{
lock (_locker)
{
Console.WriteLine($"[+] PipeStream {SectionCount} {sResult.Length} {sResult[0]}");
this.PipeContentStream.Append(sResult);
SectionCount++;
}
}
stream.Disconnect();
}
}
}
}