public static SimulacronManager GetForPeersTests() { var manager = new SimulacronManager(8189, "127.0.0.111", 9011); manager.Start(); return(manager); }
public void Start() { if (_initialized) { return; } lock (SimulacronManager.GlobalLock) { if (_initialized) { return; } if (SimulacronManager._currentInstance != null) { SimulacronManager._currentInstance.Stop(); } SimulacronManager._currentInstance = this; var started = false; var errorMessage = "Simulacron is taking too long to start. Aborting initialization..."; _simulacronProcess = new Process(); var jarPath = Environment.GetEnvironmentVariable("SIMULACRON_PATH"); if (string.IsNullOrEmpty(jarPath)) { jarPath = Environment.GetEnvironmentVariable("HOME") + "/simulacron.jar"; } if (!File.Exists(jarPath)) { throw new Exception("Simulacron: Simulacron jar not found: " + jarPath); } var args = $"-jar {jarPath} --ip {StartIp} -p {HttpPort}"; if (StartPort.HasValue) { args += $" -s {StartPort}"; } _simulacronProcess.StartInfo.FileName = "java"; _simulacronProcess.StartInfo.Arguments = args; _simulacronProcess.StartInfo.UseShellExecute = false; _simulacronProcess.StartInfo.CreateNoWindow = true; _simulacronProcess.StartInfo.RedirectStandardOutput = true; _simulacronProcess.StartInfo.RedirectStandardError = true; _simulacronProcess.StartInfo.WindowStyle = ProcessWindowStyle.Hidden; var eventWaitHandler = new AutoResetEvent(false); _simulacronProcess.OutputDataReceived += (sender, e) => { if (e.Data == null || started) { return; } Trace.TraceInformation(e.Data); if (e.Data.Contains("Address already in use")) { errorMessage = $"Simulacron start error: {e.Data}"; eventWaitHandler.Set(); return; } if (e.Data.Contains("Created nodes will start with ip")) { started = true; eventWaitHandler.Set(); } }; _simulacronProcess.ErrorDataReceived += (sender, e) => { if (e.Data == null) { return; } Trace.TraceError(e.Data); errorMessage = $"Simulacron start error: {e.Data}"; }; _simulacronProcess.Start(); _simulacronProcess.BeginOutputReadLine(); _simulacronProcess.BeginErrorReadLine(); eventWaitHandler.WaitOne(30000); if (!started) { Trace.TraceError(errorMessage); Stop(); SimulacronManager._currentInstance = null; throw new Exception("Simulacron failed to start! " + Environment.NewLine + errorMessage); } _initialized = true; Trace.TraceInformation("Simulacron started"); } }