using System.Collections.Generic;
interface IServerStrategy
string Process(string request);
class Server : IServerStrategy
private HashSet<string> modifiers;
public Server(params string[] modifiers)
this.modifiers = new HashSet<string>(modifiers);
public string Process(string request)
if (request.StartsWith("ECHO "))
respose = ProcessEchoRequest(request);
else if (request == "PING" )
respose = ProcessPingRequest();
return ProcessModifiers(respose);
public string ProcessModifiers(string request)
string response = request;
if (this.modifiers.Contains("TIME"))
response = string.Concat(DateTime.Now.ToString("HH:mm:ss")," ", response);
if (this.modifiers.Contains("TOUPPER"))
response = response.ToUpper();
private string ProcessEchoRequest(string request)
string echoKeyword = "ECHO ";
return request.Substring(echoKeyword.Length);
private string ProcessPingRequest()
public static void Main()
var server1 = new Server();
Console.WriteLine(server1.Process("ECHO Hello world!"));
Console.WriteLine(server1.Process("PING"));
Console.WriteLine(server1.Process("XYZV"));
var server2 = new Server("TOUPPER");
Console.WriteLine(server2.Process("ECHO Hello world!"));
Console.WriteLine(server2.Process("PING"));
var server3 = new Server("TIME");
Console.WriteLine(server3.Process("ECHO Hello world!"));
Console.WriteLine(server3.Process("PING"));
var server4 = new Server("TIME", "TOUPPER");
Console.WriteLine(server4.Process("ECHO Hello world!"));
Console.WriteLine(server4.Process("PING"));