private bool ParseCommand(string command) { string processPId; if (string.IsNullOrWhiteSpace(command)) { return(false); } Console.WriteLine("Starting: " + command); string[] parts = command.Split(' '); switch (parts[0]) { case "q": foreach (IServicePCS PCS in PCSDic.Values) { try { PCS.QuitAllPrograms(); } catch { // pragram can be already closed } } Environment.Exit(1); return(false); case "StartServer": serverPId = parts[1]; string PCSURL = parts[2]; serverURL = parts[3]; string mSec = parts[4]; string numOfPlayers = parts[5]; Task.Run(() => StartServerParalel(PCSURL, mSec, numOfPlayers)); break; case "StartClient": string clientPId = parts[1]; string PCSURL2 = parts[2]; string clientURL = parts[3]; string clientMSec = parts[4]; string filename = parts.Count() == 6 ? null : parts[6]; Task.Run(() => StartClientParal(clientPId, PCSURL2, clientURL, clientMSec, filename)); break; case "GlobalStatus": Task.Run(() => GlobalStatusParal()); break; case "Crash": processPId = parts[1]; Task.Run(() => CrashParal(processPId)); break; case "Freeze": processPId = parts[1]; Task.Run(() => FreezParal(processPId)); break; case "Unfreeze": processPId = parts[1]; Task.Run(() => UnfreezParal(processPId)); break; case "InjectDelay": string srcPID = parts[1]; string dstPID = parts[2]; Task.Run(() => InjectDelayParal(srcPID, dstPID)); break; case "LocalState": processPId = parts[1]; Task.Run(() => LocalStateParal(processPId, parts)); break; case "Wait": Thread.Sleep(int.Parse(parts[1])); break; default: Console.WriteLine("Unknow command " + command); break; } return(true); }