public virtual string StartAsync(string id, string role, string gameDescription, int startClock, int playClock)
        {
            string error;

            MatchId = id;
            Role    = role;

            TheGeneralGame = new GeneralGame(WcfSvcHostExePath)
            {
                TempFilePath = TempFilePath
            };

            TheGeneralGame.LoadDescriptionFromGameDescriptionString(gameDescription);
            TheGeneralGame.InitializeGame(out error);
            TheGeneralGame.ConsultPrologFiles(PlayerSpecificPrologFiles);

            return(PlayerManagerProtocolConstants.ReadyReplyString);
        }
        public GeneralGameManager(string gameDescriptionFileName, int startClock, int playClock, string wcfSvcHostExePath = null, string tempFilePath = null)
        {
            string error;

            AllMoves = new List <Move>();

            MilliSecondsBetweenFreeRunningMoves      = 0;
            AllowFreeRunningOfTurnsWithNoPlayerMoves = true;

            TheGeneralGame = new GeneralGame(wcfSvcHostExePath)
            {
                TempFilePath = tempFilePath
            };

            DebugAndTraceHelper.WriteTraceLine("Loading and parsing game description...", DebugAndTraceHelper.StatusStripChannelId);
            DebugAndTraceHelper.WriteTraceLine(String.Format("Started loading and parsing game description at {0}", DateTime.Now.ToLongTimeString()), DebugAndTraceHelper.ManagerChannelId);
            TheGeneralGame.LoadDescriptionFromKIFFile(gameDescriptionFileName);
            DebugAndTraceHelper.WriteTraceLine(String.Format("Finished loading and parsing game description at {0}", DateTime.Now.ToLongTimeString()), DebugAndTraceHelper.ManagerChannelId);

            DebugAndTraceHelper.WriteTraceLine("Initializing game...", DebugAndTraceHelper.StatusStripChannelId);
            DebugAndTraceHelper.WriteTraceLine(String.Format("Started initializing game at {0}", DateTime.Now.ToLongTimeString()), DebugAndTraceHelper.ManagerChannelId);
            TheGeneralGame.InitializeGame(out error);
            DebugAndTraceHelper.WriteTraceLine(String.Format("Finished initializing game at {0}", DateTime.Now.ToLongTimeString()), DebugAndTraceHelper.ManagerChannelId);

            StartClock = startClock;
            PlayClock  = playClock;

            MatchId = DateTime.Now.ToString() + TheGeneralGame.Name;

            DebugAndTraceHelper.AddLogFileListener(DebugAndTraceHelper.ManagerChannelId);

            DebugAndTraceHelper.WriteTraceLine("Creating players...", DebugAndTraceHelper.StatusStripChannelId);
            Players = new List <IGeneralGamePlayer>();
            var roles = TheGeneralGame.FindRoles().ToArray();

            if (TheGeneralGame.Name == "DarkChess")
            {
                for (int i = 0; i < roles.Count(); i++)
                {
                    if (roles[i] != "random")
                    {
                        var newPlayer = new FirstDarkChessPlayer(roles[i], wcfSvcHostExePath, tempFilePath);
                        DebugAndTraceHelper.AddLogFileListener(roles[i]);
                        Players.Add(newPlayer);
                    }
                    else
                    {
                        var newPlayer = new FirstGeneralGamePlayer(roles[i], wcfSvcHostExePath, tempFilePath);
                        DebugAndTraceHelper.AddLogFileListener(roles[i]);
                        Players.Add(newPlayer);
                    }
                }
            }
            else
            {
                for (int i = 0; i < roles.Count(); i++)
                {
                    var newPlayer = new FirstGeneralGamePlayer(roles[i], wcfSvcHostExePath, tempFilePath);
                    DebugAndTraceHelper.AddLogFileListener(roles[i]);
                    Players.Add(newPlayer);
                }
            }

            foreach (TraceListener traceListener in DebugAndTraceHelper.GetListeners(DebugAndTraceHelper.StateChannelId))
            {
                var ieWebBrowserListener = traceListener as IEWebBrowserListener;
                if (ieWebBrowserListener != null)
                {
                    ieWebBrowserListener.xslFilePath = TheGeneralGame.XMLStyleSheetFilePath;
                }
            }
        }