示例#1
0
        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);
        }