Skip to content

Commit 21d7710

Browse files
committed
Updated Benchmarks & optimisation
1 parent 1c0a119 commit 21d7710

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

49 files changed

+3830
-1020
lines changed
Lines changed: 274 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,274 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.Linq;
4+
using System.Text;
5+
using System.Threading.Tasks;
6+
7+
8+
internal class ConsoleInputHandler
9+
{
10+
public readonly ref struct ConfigInputs
11+
{
12+
public readonly bool runAsServer;
13+
public readonly bool isFixedMessage;
14+
public readonly int fixedMessageSize;
15+
public readonly bool runAsClient;
16+
public readonly int numClients;
17+
public readonly int numMessages;
18+
public readonly int messageSize;
19+
20+
public ConfigInputs(bool runAsServer, bool runAsClient, bool isFixedMessage, int fixedMessageSize, int numClients, int numMessages, int messageSize)
21+
{
22+
this.runAsServer = runAsServer;
23+
this.runAsClient = runAsClient;
24+
this.isFixedMessage = isFixedMessage;
25+
this.fixedMessageSize = fixedMessageSize;
26+
this.numClients = numClients;
27+
this.numMessages = numMessages;
28+
this.messageSize = messageSize;
29+
}
30+
}
31+
enum InputState
32+
{
33+
ObtainModeServer,
34+
ServerStaticResponse,
35+
ServerStaticResponseSize,
36+
ObtainModeClient,
37+
NumClients,
38+
NumMessages,
39+
MessageSize,
40+
Done
41+
}
42+
static bool runAsServer;
43+
static bool isFixedMessage;
44+
static int fixedMessageSize;
45+
46+
static bool runAsClient;
47+
static int numClients;
48+
static int numMessages;
49+
static int messageSize;
50+
private static InputState inputState = InputState.ObtainModeServer;
51+
52+
public static ConfigInputs ObtainConfig()
53+
{
54+
55+
Console.WriteLine("[Hint] You can enter a command for quick configure");
56+
Console.WriteLine("'xx' Server Client on same application");
57+
Console.WriteLine("'s0' is Server with fixed response");
58+
Console.WriteLine("'s1' is Server with dynamic echo response");
59+
Console.WriteLine("'c0' is 100 Client, 1000 Message, 32 byte payload");
60+
Console.WriteLine();
61+
62+
string input = "";
63+
bool isYes() => input.Equals("y", StringComparison.OrdinalIgnoreCase);
64+
bool isNo() => input.Equals("n", StringComparison.OrdinalIgnoreCase);
65+
66+
while (true)
67+
{
68+
switch (inputState)
69+
{
70+
case InputState.ObtainModeServer:
71+
72+
Console.WriteLine("-> Run As Echo Server? <y/n>?");
73+
input = Console.ReadLine() ?? "";
74+
if (CheckQuickConfig(input))
75+
continue;
76+
77+
if (!isYes() && !isNo())
78+
continue;
79+
if (isYes())
80+
{
81+
runAsServer = true;
82+
inputState = InputState.ServerStaticResponse;
83+
}
84+
else
85+
inputState = InputState.ObtainModeClient;
86+
87+
continue;
88+
89+
case InputState.ServerStaticResponse:
90+
Console.WriteLine("-> Respond Fixed Static Message? <y/n>?");
91+
input = Console.ReadLine() ?? "";
92+
if (!isYes() && !isNo())
93+
continue;
94+
if (isYes())
95+
{
96+
isFixedMessage = isYes();
97+
inputState = InputState.ServerStaticResponseSize;
98+
}
99+
else
100+
{
101+
inputState = InputState.ObtainModeClient;
102+
Console.WriteLine("Server will reply dynamic echo messages same size as incoming");
103+
}
104+
continue;
105+
106+
case InputState.ServerStaticResponseSize:
107+
Console.WriteLine("-> Enter Fixed Response Message Size In Bytes:");
108+
input = Console.ReadLine() ?? "";
109+
if (int.TryParse(input, out var byteSize))
110+
{
111+
fixedMessageSize = byteSize;
112+
inputState = InputState.ObtainModeClient;
113+
}
114+
else
115+
Console.WriteLine("Enter a valid number");
116+
continue;
117+
118+
case InputState.ObtainModeClient:
119+
120+
Console.WriteLine("-> Run As Client <y/n>?");
121+
input = Console.ReadLine() ?? "";
122+
123+
if (!isYes() && !isNo())
124+
continue;
125+
126+
runAsClient = isYes();
127+
if (!runAsClient && !runAsServer)
128+
inputState = InputState.ObtainModeServer;
129+
else if (runAsClient)
130+
inputState = InputState.NumClients;
131+
else
132+
inputState = InputState.Done; ;
133+
134+
continue;
135+
136+
case InputState.NumClients:
137+
Console.WriteLine("-> Enter Number of Clients:");
138+
input = Console.ReadLine() ?? "";
139+
if (ushort.TryParse(input, out var num))
140+
{
141+
numClients = num;
142+
inputState = InputState.NumMessages;
143+
}
144+
else
145+
Console.WriteLine("Enter a valid number");
146+
continue;
147+
148+
149+
case InputState.NumMessages:
150+
Console.WriteLine("-> Enter Number of Messages:");
151+
input = Console.ReadLine() ?? "";
152+
if (int.TryParse(input, out var nummsg))
153+
{
154+
numMessages = nummsg;
155+
inputState = InputState.MessageSize;
156+
}
157+
else
158+
Console.WriteLine("Enter a valid number");
159+
continue;
160+
161+
case InputState.MessageSize:
162+
Console.WriteLine("-> Enter Message Size In Bytes:");
163+
input = Console.ReadLine() ?? "";
164+
if (int.TryParse(input, out var byteSizefm))
165+
{
166+
messageSize = byteSizefm;
167+
inputState = InputState.Done;
168+
}
169+
else
170+
Console.WriteLine("Enter a valid number");
171+
continue;
172+
173+
174+
case InputState.Done:
175+
Console.WriteLine("Configuration Complete\n");
176+
string validate = "";
177+
if (runAsServer)
178+
{
179+
validate += "Running as Server" + "\n";
180+
validate += isFixedMessage ? "Server will Reply Fixed Message with size:" + fixedMessageSize :
181+
"Server will Reply Dynamic Echo Messages" + "\n";
182+
}
183+
if (runAsClient)
184+
{
185+
validate += "\nRunning as Client" + "\n";
186+
validate += "Number of Echo Clients: " + numClients.ToString() + "\n";
187+
validate += "Number of Messages: " + numMessages.ToString() + "\n";
188+
validate += "Message size in bytes: " + messageSize.ToString();
189+
190+
}
191+
Console.WriteLine(validate);
192+
Console.WriteLine("\n-> Confirm <y/n>?");
193+
input = Console.ReadLine() ?? "";
194+
195+
if (!isYes() && !isNo())
196+
continue;
197+
if (isYes())
198+
break;
199+
else
200+
Reset();
201+
continue;
202+
}
203+
break;
204+
205+
}
206+
return new ConfigInputs(runAsServer: runAsServer,
207+
runAsClient: runAsClient,
208+
isFixedMessage: isFixedMessage,
209+
fixedMessageSize: fixedMessageSize,
210+
numClients: numClients,
211+
numMessages: numMessages,
212+
messageSize: messageSize);
213+
214+
void Reset()
215+
{
216+
runAsServer = false;
217+
runAsClient = false;
218+
isFixedMessage = false;
219+
fixedMessageSize = 0;
220+
numClients = 0;
221+
numMessages = 0;
222+
messageSize = 0;
223+
inputState = InputState.ObtainModeServer;
224+
}
225+
226+
}
227+
228+
private static bool CheckQuickConfig(string input)
229+
{
230+
if (input == "xx")
231+
{
232+
runAsServer = true;
233+
runAsClient = true;
234+
isFixedMessage = true;
235+
fixedMessageSize = 32;
236+
numClients = 100;
237+
numMessages = 1000;
238+
messageSize = 32;
239+
inputState = InputState.Done;
240+
return true;
241+
}
242+
if (input == "s0")
243+
{
244+
runAsServer = true;
245+
runAsClient = false;
246+
isFixedMessage = true;
247+
fixedMessageSize = 32;
248+
inputState = InputState.Done;
249+
return true;
250+
}
251+
if (input == "s1")
252+
{
253+
runAsServer = true;
254+
runAsClient = false;
255+
isFixedMessage = false;
256+
inputState = InputState.Done;
257+
return true;
258+
}
259+
if (input == "c0")
260+
{
261+
runAsServer = false;
262+
runAsClient = true;
263+
isFixedMessage = false;
264+
numClients = 100;
265+
numMessages = 1000;
266+
messageSize = 32;
267+
inputState = InputState.Done;
268+
return true;
269+
}
270+
return false;
271+
}
272+
273+
274+
}

0 commit comments

Comments
 (0)