static void Main(string[] args) { CgTimeStampSource.SupplyAlternateProvider(HpTimeStampProvider.CreateInstance()); TimeStampSource.Calibrate(); var gameFactories = new ClortonGameFactorySource(); (bool gotFileOk, string errorGettingFile, FileInfo outputFile, int numGames, VaultType varietyOfVault) = GetOutputFile(args); GameFactory = varietyOfVault == VaultType.Basic ? gameFactories.BasicVaultGameFactory : gameFactories.CustomVaultGameFactory; if (numGames == 1) { Console.WriteLine("Type of vault selected: [" + varietyOfVault + "]."); } Debug.Assert(gotFileOk == (outputFile != null)); if (gotFileOk) { if (numGames > 1) { try { PlayMultipleClortonGames(numGames, outputFile); } catch (Exception ex) { Console.Error.WriteLine(ex.ToString()); Console.Error.WriteLine("Unexpected error initializing game. Terminating."); Environment.Exit(-1); } } else { try { PlayClortonGame(outputFile); } catch (Exception ex) { Console.Error.WriteLine(ex.ToString()); Console.Error.WriteLine("Unexpected error initializing game. Terminating."); Environment.Exit(-1); } } } else { Console.Error.WriteLine("There was a problem with the output file. Additional info: [" + errorGettingFile + "]."); } }
static void Main(string[] args) { CgTimeStampSource.SupplyAlternateProvider(HpTimeStampProvider.CreateInstance()); TimeStampSource.Calibrate(); (bool gotFileOk, string errorInfo, FileInfo outputFile, int numGames, TimeSpan timeout) = GetOutputFile(args); Debug.Assert((outputFile != null) == gotFileOk); if (gotFileOk) { Console.WriteLine($"Going to play {numGames} CafeBabe games, each with a time limit of {timeout.TotalSeconds:F5} seconds. Results will be written to file {outputFile?.FullName ?? "UNSPECIFIED"} "); if (numGames > 1) { try { PlayMultipleCafeBabeGames(numGames, outputFile, timeout); } catch (Exception ex) { Console.Error.WriteLine(ex.ToString()); Console.Error.WriteLine("Unexpected error initializing game. Terminating."); Environment.Exit(-1); } } else { try { PlayCafeBabeGame(outputFile, timeout); } catch (Exception e) { Console.Error.WriteLine(e.ToString()); Console.Error.WriteLine("Unexpected error initializing game. Terminating."); Environment.Exit(-1); } } } else { Console.Error.WriteLine( "There was a problem parsing the parameters passed hereto." + $"{(!string.IsNullOrEmpty(errorInfo) ? (" " + errorInfo) : string.Empty)}"); } }
/// <summary> /// the thread loop /// </summary> /// <param name="tokenObj"></param> protected void ThreadLoop(object tokenObj) { DateTime startedAt; CgTimeStampSource.Calibrate(); if (tokenObj is CancellationToken token && _status.TrySetStarting()) { startedAt = CgTimeStampSource.Now; try { DoJob(token); } catch (OperationCanceledException) { _status.TrySetCancelRequested(); } catch (Exception ex) { Fault = ex; } finally { try { PerformFinishingActions(); } catch (Exception ex) { FinishingFault = ex; } _status.ForceEnded(); DateTime ts = CgTimeStampSource.Now; TimeSpan duration = ts - startedAt; _duration.TrySet(duration); _helper.WriteLine("At [" + ts.ToString("O") + "], game thread of type [" + ConcreteType.Name + "] and thread name [" + _t.Value.Name + "] terminated. Duration: [" + duration.TotalMilliseconds.ToString("N3") + "] milliseconds."); } } }