public void Start(Project project) { if (_system != null) { Console.WriteLine($"AGENT: Trying to start specification runner for {_system.GetType().Name} at {project.ProjectPath} and port {project.Port}"); } Project.CurrentProject = project; _project = project; Type systemType = null; try { if (_system == null) { systemType = _project.DetermineSystemType(); _system = Activator.CreateInstance(systemType).As <ISystem>(); _disposables.Add(_system); } _specExpiration = new SpecExpiration(); _engine = project.Mode == EngineMode.Interactive ? buildUserInterfaceEngine() : buildBatchedEngine(project.TracingStyle); _engine.Start(project.StopConditions); ConsoleWriter.Write("AGENT: Specification running engine ready at " + project.ProjectPath); } catch (Exception e) { ConsoleWriter.Write(ConsoleColor.Red, e.ToString()); var message = new SystemRecycled { error = e.ToString(), success = false, }; if (systemType != null) { message.system_name = systemType.AssemblyQualifiedName; } EventAggregator.SendMessage(message); } }
public void Start(EngineMode mode, Project project, MarshalByRefObject remoteListener) { Project.CurrentProject = project; EventAggregator.Start((IRemoteListener) remoteListener); _project = project; Type systemType = null; try { systemType = _project.DetermineSystemType(); _system = Activator.CreateInstance(systemType).As<ISystem>(); _services.Add(_system); var timeZone = new MachineTimeZoneContext(); var clock = new Clock(); var systemTime = new SystemTime(clock, timeZone); _specExpiration = new SpecExpiration(systemTime); if (mode == EngineMode.Interactive) { _engine = buildUserInterfaceEngine(); } else { _engine = buildBatchedEngine(project.TracingStyle); } _engine.Start(project.StopConditions); } catch (Exception e) { var message = new SystemRecycled { error = e.ToString(), success = false, }; if (systemType != null) { message.system_name = systemType.AssemblyQualifiedName; } EventAggregator.SendMessage(message); } AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException; AppDomain.CurrentDomain.DomainUnload += CurrentDomainOnDomainUnload; }