public static Task publishToReadModel(ResolvedEvent eS_Event) { EventFromES normal = NormalizeESEvent(eS_Event); EventDistributor.Publish(normal); return(Task.FromResult(0)); }
/*public void TestInit() * { * DataFilePath = System.Environment.CurrentDirectory + "\\InputData\\covtype.data"; * Dimension = 55; * _delimiter = new char[] { ',' }; * }*/ public ITuple GetNextTuple() { if (fileReader != null) { try { string line = fileReader.ReadLine(); if (line == null) { //End of file, send the eof event Event EofEvent = new Event(GetType().ToString(), EventType.NoMoreTuple); EventDistributor.GetInstance().SendEvent(EofEvent); fileReader.Close(); return(null); } else { return(CovertTuple(line.Trim())); } } catch (Exception e) { ExceptionUtil.SendErrorEventAndLog(GetType().ToString(), e.Message); throw e; } } else { ExceptionUtil.SendErrorEventAndLog(GetType().ToString(), "fileReader is null"); return(null); } }
/// <summary> /// Event handler for the KSPMAStarted event. /// Starts the app and mod update checks. /// </summary> protected static void KSPMAStarted(object sender) { EventDistributor.InvokeAsyncTaskStarted(Instance); ModSelectionController.View.ShowBusy = true; AsyncTask <bool> .DoWork(() => { // Auto KSP MA update check. OptionsController.Check4AppUpdates(); // Auto mod update check. OptionsController.Check4ModUpdates(true); return(true); }, (result, ex) => { EventDistributor.InvokeAsyncTaskDone(Instance); ModSelectionController.View.ShowBusy = false; if (ex != null) { Messenger.AddError(string.Format("Error during startup update checks! {0}", ex.Message), ex); } } ); }
/// <summary> /// 该函数为对外接口,负责接收新到的tuple /// </summary> /// <param name="newTuple"></param> public void ReceiveNewTupe(ITuple newTuple) { newTuple.ArrivalStep = currentStep; newTuple.DepartStep = ComputeDepartStep(); newTuple.IsOutlier = false; if (SendingEventToOutside) { Event anEvent = new Event(GetType().ToString(), EventType.NewTupleArrive); anEvent.AddAttribute(EventAttributeType.Tuple, newTuple); EventDistributor.GetInstance().SendEvent(anEvent); } //目前一步一个tuple,故可以如此赋值 CODTuple newCODTuple = new CODTuple(newTuple); if (ShouldWindowSlide()) { SlideWindow(); } //Arrive函数是否要在窗口弹出之前执行呢?我觉得是在之后,因为窗口的定义为”总是维护最近的n个object“ //而arrive应当是以window之内作为执行范围的,若在窗口弹出前执行,岂不是Arrive的执行范围变成了n+1? 所以我将Arrive放在这里 Arrive(newCODTuple, currentStep); AddTupleIntoWindow(newCODTuple); currentStep++; }
private void cbLanguages_SelectedIndexChanged(object sender, EventArgs e) { var lang = (cbLanguages.SelectedItem != null && !string.IsNullOrEmpty(cbLanguages.SelectedItem.ToString())) ? cbLanguages.SelectedItem.ToString() : string.Empty; Localizer.GlobalInstance.CurrentLanguage = Localizer.GlobalInstance.GetLanguageNameByLongName(lang); EventDistributor.InvokeLanguageChanged(this); }
public MainWindow() { InitializeComponent(); algorithmHandler = new AlgorithmMgr(); EventType[] acceptedEventTypeList = { EventType.NoMoreTuple, EventType.Error, EventType.OldTupleDepart }; EventDistributor.GetInstance().SubcribeListenerWithFullAcceptedTypeList(this, acceptedEventTypeList); }
public static void SendErrorEventAndLog(string sendDestription, string errorMsg) { Event errorEvent = new Event(sendDestription, EventType.Error); errorEvent.AddAttribute(EventAttributeType.Message, errorMsg); EventDistributor.GetInstance().SendEvent(errorEvent); Logger.GetInstance().Error(sendDestription, errorMsg); }
/// <summary> /// Refreshes the Flags tab. /// Searches the KSP install dir for flags and adds them to the ListView. /// </summary> public static void RefreshFlagTab() { if (ignoreIndexChange) { return; } Messenger.AddInfo(Messages.MSG_FLAG_SCAN_STARTED); ignoreIndexChange = true; string lastFilter = View.SelectedFilter; View.ClearAll(); flags.Clear(); // add default Filter View.AddFilter(FILTER_ALL); View.AddFilter(FILTER_MYFLAG); View.ShowProcessingIcon = true; EventDistributor.InvokeAsyncTaskStarted(Instance); AsyncTask <bool> .DoWork(() => { SearchDir4FlagsDirs(KSPPathHelper.GetPath(KSPPaths.GameData)); return(true); }, (bool result, Exception ex) => { View.ShowProcessingIcon = false; EventDistributor.InvokeAsyncTaskDone(Instance); if (ex != null) { Messenger.AddError(Messages.MSG_ERROR_DURING_FLAG_SCAN, ex); } else { Messenger.AddInfo(Core.Messages.MSG_DONE); } if (lastFilter != null && (lastFilter == FILTER_ALL || lastFilter == FILTER_MYFLAG || View.GetGroup(lastFilter) != null)) { View.SelectedFilter = lastFilter; } else { View.SelectedFilter = FILTER_ALL; } ignoreIndexChange = false; View.FillListView(flags); }); }
public void RemoveFromOutlier(ITuple tuple) { tuple.IsOutlier = false; if (SendingEventToOutside) { Event e = new Event("an tuple become inlier", EventType.OutlierBecomeInlier); e.AddAttribute(EventAttributeType.TupleID, tuple.ID); EventDistributor.GetInstance().SendEvent(e); } }
private void cbWelcomeLanguages_SelectedIndexChanged(object sender, EventArgs e) { Language lang = cbWelcomeLanguages.SelectedItem as Language; if (lang != null) { OptionsController.SelectedLanguage = Localizer.GlobalInstance.GetLanguageNameByLongName(lang.LongName); ControlTranslator.TranslateControls(Localizer.GlobalInstance, this); EventDistributor.InvokeLanguageChanged(this); } }
public void AddToOutlier(ITuple tuple) { tuple.IsOutlier = true; if (SendingEventToOutside) { Event e = new Event("an tuple become outlier", EventType.InlierBecomeOutlier); e.AddAttribute(EventAttributeType.TupleID, tuple.ID); EventDistributor.GetInstance().SendEvent(e); } outliers.Add(tuple.ID); }
public static void Queue(EventModel theEvent) { publishingQueue.Add(theEvent); while (publishingQueue.Count > 0) { EventDistributor.Publish(publishingQueue[0]); if (publishingQueue.Count > 0) { publishingQueue.RemoveAt(0); } } }
/// <summary> /// Callback function after a backup. /// </summary> private static void BackupDirFinished(string name, Exception ex) { EventDistributor.InvokeAsyncTaskDone(Instance); View.ShowProcessing = false; if (ex != null) { Messenger.AddError(Messages.MSG_BACKUP_CREATION_ERROR, ex); } else { ScanBackupDirectory(); Messenger.AddInfo(string.Format(Messages.MSG_BACKUP_COMPLETE, name)); } }
private void btnLunchKSP_Click(object sender, EventArgs e) { string fullpath = KSPPathHelper.GetPath(KSPPaths.KSPExe); string fullpath64 = KSPPathHelper.GetPath(KSPPaths.KSPX64Exe); try { if (File.Exists(fullpath64) && cbUse64Bit.Checked) { fullpath = fullpath64; } if (File.Exists(fullpath)) { WriteKSPSettings(); EventDistributor.InvokeStartingKSP(this); Messenger.AddInfo(Messages.MSG_STARTING_KSP); System.Diagnostics.Process kspexe = new System.Diagnostics.Process(); #if __MonoCS__ kspexe.StartInfo.UseShellExecute = false; kspexe.StartInfo.EnvironmentVariables.Add("LC_ALL", "C"); #endif kspexe.StartInfo.FileName = fullpath; kspexe.StartInfo.WorkingDirectory = Path.GetDirectoryName(fullpath); if (rbWindowed.Checked && cbBorderlessWin.Checked) { kspexe.StartInfo.Arguments = PARAM_POPUPWINDOW; } if (cbForceOpenGL.Checked) { kspexe.StartInfo.Arguments += " " + PARAM_FORCE_OPENGL; } kspexe.Start(); } else { Messenger.AddError(Messages.MSG_CANT_FIND_KSP_EXE); } } catch (Exception ex) { Messenger.AddError(Messages.MSG_KSP_LAUNCH_FAILED, ex); } }
/// <summary> /// Starts the backup of a directory. /// </summary> /// <param name="dir">The directory to backup.</param> /// <param name="name">Name of the backup file.</param> /// <param name="backupPath">The path to write the backup file to.</param> /// <param name="zipPath">Base path within the zip archive.</param> private static void BackupDirectoryAsync(string dir, string name = "", string backupPath = "", string zipPath = "") { try { string nameAuto; string backupPathAuto; string zipPathAuto; nameAuto = CreateBackupFilename(dir, out backupPathAuto, out zipPathAuto); if (string.IsNullOrEmpty(name)) { name = nameAuto; } if (string.IsNullOrEmpty(backupPath)) { backupPath = backupPathAuto; } if (string.IsNullOrEmpty(zipPath)) { zipPath = zipPathAuto; } if (!Directory.Exists(BackupPath)) { Directory.CreateDirectory(BackupPath); } if (Directory.Exists(dir)) { EventDistributor.InvokeAsyncTaskStarted(Instance); View.ShowProcessing = true; Messenger.AddInfo(Messages.MSG_BACKUP_STARTED); AsyncTask <string> .DoWork(() => BackupDir(dir, name, backupPath), BackupDirFinished); } else { Messenger.AddInfo(string.Format(Messages.MSG_BACKUP_SRC_FOLDER_NOT_FOUND, dir)); } } catch (Exception ex) { Messenger.AddError(string.Format(Messages.MSG_BACKUP_ERROR, ex.Message), ex); } }
private static void distrbuteSavedEvents(List <ResolvedEvent> nonStatEvents) { List <object> aslk = new List <object>(); foreach (var savedEvent in nonStatEvents) { string StringyfiedBytes = System.Text.Encoding.UTF8.GetString(savedEvent.Event.Data); try { var eventFromES = NormalizeESEvent(savedEvent); EventDistributor.Publish(eventFromES); } catch (Exception e) { Console.Write(e); } } }
public _2D_DisplayField() { InitializeComponent(); SetStyle(ControlStyles.UserPaint, true); SetStyle(ControlStyles.AllPaintingInWmPaint, true); // 禁止擦除背景. SetStyle(ControlStyles.DoubleBuffer, true); // 双缓冲\ dataPoints = new Dictionary <int, ITuple>(); panelGraphics = pl_Canvas.CreateGraphics(); EventType[] acceptedEventTypeList = { EventType.NewTupleArrive, EventType.InlierBecomeOutlier, EventType.OutlierBecomeInlier, EventType.OldTupleDepart, EventType.NoMoreTuple }; EventDistributor.GetInstance().SubcribeListenerWithFullAcceptedTypeList(this, acceptedEventTypeList); RefreshDataPointsTimer.Start(); }
/// <summary> /// Downloads the CKAN Repositories from CkanRepoManager.MasterRepoListURL. /// And updates the View. /// </summary> /// <param name="finishedCallback">Optional callback function. Will be called after finishing the async get.</param> public static void RefreshCkanRepositories(Action finishedCallback = null) { var parent = ModBrowserViewController.View; if (parent != null) { parent.ShowProcessing = true; } Messenger.AddInfo(Messages.MSG_REFRESHING_REPOSITORIES); EventDistributor.InvokeAsyncTaskStarted(Instance); AsyncTask <CkanRepositories> .DoWork(() => { return(CkanRepoManager.GetRepositoryList()); // CkanRepoManager.MasterRepoListURL); }, (result, ex) => { EventDistributor.InvokeAsyncTaskDone(Instance); if (parent != null) { parent.ShowProcessing = false; } if (ex != null) { Messenger.AddError(string.Format(Messages.MSG_ERROR_DURING_REFRESH_REPOSITORIES_0, ex.Message), ex); } else { // CkanRepository last = View.SelectedRepository; View.Repositories = result; View.SelectedRepository = result.repositories.FirstOrDefault(); // last; } Messenger.AddInfo(Messages.MSG_REFRESHING_REPOSITORIES_DONE); if (finishedCallback != null) { finishedCallback(); } }); }
public void WhenConsumingAnEventAndTheDecoratorCancelsThenItWillNotCallTheConsumer() { var serviceLocator = Substitute.For<IServiceLocator>(); var eventStore = Substitute.For<EventStore>(); var eventConsumerDecorator = Substitute.For<EventConsumptionDecorator<ConsumesEvent<DummyEvent>, DummyEvent>>(); var subject = new EventDistributor(serviceLocator, eventStore, new EventTransport[0], null); var identity = Guid.NewGuid(); var @event = new UniqueEvent<DummyEvent>(identity, new DummyEvent(), DateTime.MinValue); var consumer = Substitute.For<ConsumesEvent<DummyEvent>>(); serviceLocator.GetAllInstances<ConsumesEvent<DummyEvent>>().Returns(new[] {consumer}); serviceLocator.GetInstance<EventConsumptionDecorator<ConsumesEvent<DummyEvent>, DummyEvent>>().Returns(eventConsumerDecorator); eventConsumerDecorator.BeforeConsumption(@event, consumer, Arg.Do<CancelEventArgs>(args => { args.Cancel = true; })); subject.Receive(@event); consumer.DidNotReceiveWithAnyArgs().Consume(null); }
/// <summary> /// This method gets called when your Controller should be initialized. /// Perform additional initialization of your UserControl here. /// </summary> protected static void Initialize() { Messenger.AddListener(Instance); EventDistributor.AsyncTaskStarted += AsyncTaskStarted; EventDistributor.AsyncTaskDone += AsyncTaskDone; EventDistributor.LanguageChanged += LanguageChanged; EventDistributor.KSPRootChanging += KSPRootChanging; EventDistributor.KSPRootChanged += KSPRootChanged; EventDistributor.KSPMAStarted += KSPMAStarted; CreateConfigDir(); LoadConfigs(); LoadPlugins(); View.TapOrder = LastTabOrder; OptionsController.AvailableLanguages = Localizer.GlobalInstance.AvailableLanguages; OptionsController.SelectedLanguage = Localizer.GlobalInstance.CurrentLanguage; LoadSiteHandler(); if (!KSPPathHelper.IsKSPInstallFolder(OptionsController.SelectedKSPPath)) { frmWelcome dlg = new frmWelcome(); if (dlg.ShowDialog(View) != DialogResult.OK) { View.Close(); return; } OptionsController.AddKSPPath(dlg.KSPPath); OptionsController.SelectedKSPPath = dlg.KSPPath; } // Initializing is done. EventDistributor.InvokeKSPMAStarted(Instance); }
public void WhenConsumingAndAnExceptionIsThrownThenItWillCallTheAfterFailureDecoratorImplementationButNotTheAfterDecoratorImplementation() { var serviceLocator = Substitute.For<IServiceLocator>(); var eventStore = Substitute.For<EventStore>(); var eventConsumerDecorator = Substitute.For<EventConsumptionDecorator<ConsumesEvent<DummyEvent>, DummyEvent>>(); var subject = new EventDistributor(serviceLocator, eventStore, new EventTransport[0], null); var identity = Guid.NewGuid(); var @event = new UniqueEvent<DummyEvent>(identity, new DummyEvent(), DateTime.MinValue); var consumer = Substitute.For<ConsumesEvent<DummyEvent>>(); serviceLocator.GetAllInstances<ConsumesEvent<DummyEvent>>().Returns(new[] { consumer }); serviceLocator.GetInstance<EventConsumptionDecorator<ConsumesEvent<DummyEvent>, DummyEvent>>().Returns(eventConsumerDecorator); var expectedException = new Exception(); consumer.When(_ => _.Consume(@event.Event)).Do((_ => { throw expectedException; })); subject.Receive(@event); eventConsumerDecorator .Received() .AfterFailedConsumption(@event, consumer, Arg.Is<UnhandledExceptionEventArgs>(args => args.ExceptionObject == expectedException)); eventConsumerDecorator.DidNotReceiveWithAnyArgs().AfterConsumption(null, null); }
public void SlideWindow() { for (int i = 0; i < _slideSpan; i++) { CODTuple oldTuple = window.Dequeue(); if (SendingEventToOutside) { Event anEvent = new Event("Object Depart", EventType.OldTupleDepart); anEvent.AddAttribute(EventAttributeType.TupleID, oldTuple.tuple.ID); anEvent.AddAttribute(EventAttributeType.Tuple, oldTuple.tuple); EventDistributor.GetInstance().SendEvent(anEvent); } //Departure(oldTuple, currentStep); DepartureNotIncludingSafeInlier(oldTuple, currentStep); //DepartureWithNotConsiderSlideSpan(oldTuple, currentStep); } if (SendingEventToOutside) { Event e = new Event("window has just Slided", EventType.WindowSlide); EventDistributor.GetInstance().SendEvent(e); } }
public void WhenReceivingAnEventThenItWillGetAllConsumersOfTheEvent() { var serviceLocator = Substitute.For<IServiceLocator>(); var eventStore = Substitute.For<EventStore>(); var subject = new EventDistributor(serviceLocator, eventStore, new EventTransport[0], null); var identity = Guid.NewGuid(); var @event = new UniqueEvent<DummyEvent>(identity, new DummyEvent(), DateTime.MinValue); eventStore.IsEventAlreadyConsumed(@event).Returns(false); serviceLocator.GetAllInstances<ConsumesEvent<DummyEvent>>().Returns(new ConsumesEvent<DummyEvent>[0]); subject.Receive(@event); serviceLocator.Received().GetAllInstances<ConsumesEvent<DummyEvent>>(); }
public static void Refresh(RefreshType refreshType = RefreshType.Last) { model.Nodes.Clear(); if (refreshType == RefreshType.Last) { refreshType = LastRefresh; } View.ShowProcessing = true; EventDistributor.InvokeAsyncTaskStarted(Instance); AsyncTask <List <KsMod> > .DoWork( () => { List <KsMod> mods = null; switch (refreshType) { default: case RefreshType.New: mods = KerbalStuff.BrowseNew(View.Page); break; case RefreshType.Top: mods = KerbalStuff.BrowseTop(View.Page); break; case RefreshType.Featured: mods = KerbalStuff.BrowseFeatured(View.Page); break; case RefreshType.Browse: mods = KerbalStuff.Browse(View.Page); break; } return(mods); }, (result, ex) => { View.ShowProcessing = false; EventDistributor.InvokeAsyncTaskDone(Instance); if (ex != null) { Messenger.AddError(string.Format("Error during browsing KerbalStuff! {0}", ex), ex); } else { if (KerbalStuff.LastResponse == null || result == null) { Messenger.AddError("Error during browsing KerbalStuff! Empty result"); return; } View.MaxPages = KerbalStuff.LastResponse.pages; View.CountLabelText = string.Format("Mods per page: {0}", KerbalStuff.LastResponse.count); foreach (var mod in result) { model.Nodes.Add(new KerbalStuffNode(mod)); } } }); }
/// <summary> /// Downloads the Ckan Repository archive if necessary, creates a CkanArchive from it and populates the view. /// </summary> /// <param name="repo">The Ckan Repository to get the Archive for.</param> /// <param name="forceDownload">If false the download will be skipped if a Ckan Repository archive file already exists.</param> /// <param name="finishedCallback">Optional callback function. Will be called after finishing the async get.</param> public static void RefreshCkanArchive(CkanRepository repo, bool forceDownload = false, Action finishedCallback = null) { model.Nodes.Clear(); if (repo == null) { return; } if (!OptionsController.HasValidDownloadPath) { Messenger.AddInfo(Messages.MSG_DOWNLOADPATH_MISSING); OptionsController.SelectNewDownloadPath(); if (!OptionsController.HasValidDownloadPath) { return; } } var parent = View.Parent as ucModBrowserView; if (parent != null) { parent.ShowProcessing = true; } EventDistributor.InvokeAsyncTaskStarted(Instance); Messenger.AddInfo(string.Format(Messages.MSG_REFRESHING_REPOSITORY_ARCHIVE_0, repo.name)); AsyncTask <CkanArchive> .DoWork(() => { CkanArchive archive = null; if (!forceDownload && archives.ContainsKey(repo.name)) { Messenger.AddInfo(Messages.MSG_USING_CACHED_ARCHIVE); archive = archives[repo.name]; } else { var path = Path.Combine(OptionsController.DownloadPath, CkanArchiveFolder); if (!Directory.Exists(path)) { Messenger.AddInfo(Messages.MSG_CREATE_CKAN_ARCHIVE); Directory.CreateDirectory(path); } var filename = string.Format("{0}_{1}", repo.name, Path.GetFileName(repo.uri.AbsolutePath)); var fullpath = Path.Combine(path, filename); if (!forceDownload && File.Exists(fullpath)) { archive = CkanRepoManager.CreateRepositoryArchive(fullpath); } else { // TODO: Separate download and create archive in different AsyncTasks. if (CkanRepoManager.DownloadRepositoryArchive(repo, fullpath, null, OnDownloadProgressChanged)) { archive = CkanRepoManager.CreateRepositoryArchive(fullpath); } } } return(archive); }, (newArchive, ex) => { if (parent != null) { parent.ShowProcessing = false; } ModBrowserViewController.View.ShowProgressBar(false, 0); EventDistributor.InvokeAsyncTaskDone(Instance); if (ex != null) { Messenger.AddError(string.Format(Messages.MSG_ERROR_DURING_REFRESH_REPOSITORY_ARCHIVE_0, ex.Message), ex); } else { if (newArchive != null) { newArchive.Repository = repo; if (archives.ContainsKey(repo.name)) { archives[repo.name] = newArchive; } else { archives.Add(repo.name, newArchive); } model.AddArchive(newArchive); View.CountLabelText = string.Format(Messages.MSG_MODBROWSER_CKAN_COUNT_TEXT, newArchive.Mods.Count, model.Nodes.Count); FindInstalledMods(); } else { View.CountLabelText = string.Format(Messages.MSG_MODBROWSER_CKAN_COUNT_TEXT, 0, 0); } } Messenger.AddInfo(Messages.MSG_REFRESH_REPOSITORY_DONE); if (finishedCallback != null) { finishedCallback(); } }); }
static EventExtensions() { eventDistributor = ServiceLocator.Current.GetInstance<EventDistributor>(); }
/// <summary> /// Checks if all parts of the craft are installed. /// </summary> /// <param name="partList">The list of installed parts.</param> private static void Parts_ScanComplete(List <PartNode> partList) { View.ShowProcessingIcon = true; EventDistributor.InvokeAsyncTaskStarted(Instance); AsyncTask <bool> .DoWork(() => { Messenger.AddInfo(Messages.MSG_CRAFT_VALIDATION_STARTED); View.InvokeIfRequired(() => model.Nodes.Clear()); foreach (CraftNode craft in allCrafts) { Messenger.AddInfo(string.Format(Messages.MSG_VALIDATING_CRAFT_0, craft.Name)); Dictionary <string, CraftNode> alreadyCheckedParts = new Dictionary <string, CraftNode>(); foreach (CraftNode part in craft.Nodes) { string partName = part.Name.Substring(0, part.Name.IndexOf(" (")); string count = part.Name.Substring(partName.Length); if (alreadyCheckedParts.ContainsKey(part.Name)) { if (alreadyCheckedParts[part.Name] != null) { part.RelatedPart = alreadyCheckedParts[part.Name].RelatedPart; part.Name = part.RelatedPart.Title + count; craft.AddMod(part.RelatedPart.Mod); } continue; } else { bool found = false; foreach (PartNode instPart in partList) { if (instPart.Name.Replace("_", ".") == partName) { if (!alreadyCheckedParts.ContainsKey(instPart.Name)) { alreadyCheckedParts.Add(instPart.Name, part); } part.Name = instPart.Title + count; part.RelatedPart = instPart; part.AddMod(instPart.Mod); View.InvokeIfRequired(() => part.RelatedPart.AddRelatedCraft(craft)); craft.AddMod(instPart.Mod); found = true; break; } } if (!found) { alreadyCheckedParts.Add(part.Name, null); } } } if (craft.IsInvalidOrHasInvalidChilds) { Messenger.AddInfo(string.Format(Messages.MSG_VALIDATING_CRAFT_0_FAILED, craft.Name)); } else { Messenger.AddInfo(string.Format(Messages.MSG_VALIDATING_CRAFT_0_SUCCESSFUL, craft.Name)); } ////craft.SortPartsByDisplayText(); } return(true); }, (result, ex) => { View.ShowProcessingIcon = false; EventDistributor.InvokeAsyncTaskDone(Instance); PartsTabViewController.ScanComplete -= Parts_ScanComplete; if (ex != null) { MessageBox.Show(View.ParentForm, string.Format(Messages.MSG_ERROR_DURING_CRAFT_VALIDATION_0, ex.Message)); } else { RefreshTreeView(); } Messenger.AddInfo(Messages.MSG_CRAFT_VALIDATION_DONE); }); }
/// <summary> /// Scans the KSP install directory and sub directories for *.craft files. /// </summary> private static void ScanDir() { View.ShowProcessingIcon = true; EventDistributor.InvokeAsyncTaskStarted(Instance); ResetView(); AsyncTask <bool> .DoWork(() => { Messenger.AddInfo(Messages.MSG_CRAFT_SCAN_STARTED); // Get *.craft files from GameData folder. string gameDatePath = KSPPathHelper.GetPath(KSPPaths.GameData); string[] files = Directory.GetFiles(gameDatePath, EXTENSION_CRAFT, SearchOption.AllDirectories); // Get *.craft files from additional folders. string path1 = KSPPathHelper.GetPath(KSPPaths.VAB); string path2 = KSPPathHelper.GetPath(KSPPaths.SPH); string[] addPaths = new[] { path1, path2 }; foreach (var path in addPaths) { string[] files2 = Directory.GetFiles(path, EXTENSION_CRAFT, SearchOption.AllDirectories); int oldLength = files.Length; Array.Resize <string>(ref files, oldLength + files2.Length); Array.Copy(files2, 0, files, oldLength, files2.Length); } // Create CraftNodes from each file. var nodes = new List <CraftNode>(); if (files.Length > 0) { foreach (string file in files) { Messenger.AddInfo(string.Format(Messages.MSG_SCAN_FILE_0_FOR_CRAFTS, file)); var newNodes = CreateCraftEntry(file); foreach (var newNode in newNodes) { if (newNode != null && !string.IsNullOrEmpty(newNode.Name) && !nodes.Contains(newNode)) { nodes.Add(newNode); } } } } else { Messenger.AddInfo(string.Format(Messages.MSG_NO_CRAFTCFG_FOUND_0, gameDatePath)); } allCrafts.Clear(); foreach (CraftNode node in nodes) { allCrafts.Add(node); } Messenger.AddInfo(Messages.MSG_CRAFT_SCAN_DONE); return(true); }, (bool result, Exception ex) => { View.ShowProcessingIcon = false; EventDistributor.InvokeAsyncTaskDone(Instance); if (ex != null) { Messenger.AddError(string.Format(Messages.MSG_ERROR_DURING_CRAFT_READING_0, ex.Message), ex); } else { RefreshTreeView(); ValidateCrafts(); } }); }
/// <summary> /// Scans the KSP install directory and sub directories for *.craft files. /// </summary> private static void ScanDir() { allModFilter.Clear(); allModFilter.Add(All); allModFilter.Add(Squad); View.SelectedModFilter = All; model.Nodes.Clear(); View.ShowProcessingIcon = true; EventDistributor.InvokeAsyncTaskStarted(Instance); AsyncTask <bool> .DoWork(() => { Messenger.AddInfo(Messages.MSG_PART_SCAN_STARTED); // Get part.cfg files from GameData folder. string gameDatePath = KSPPathHelper.GetPath(KSPPaths.GameData); string[] files = Directory.GetFiles(gameDatePath, EXTENSION_CFG, SearchOption.AllDirectories); // Get part.cfg files from additional folders. string partsPath = KSPPathHelper.GetPath(KSPPaths.Parts); string[] addPaths = new[] { partsPath }; foreach (var path in addPaths) { string[] files2 = Directory.GetFiles(path, EXTENSION_CFG, SearchOption.AllDirectories); int oldLength = files.Length; Array.Resize <string>(ref files, oldLength + files2.Length); Array.Copy(files2, 0, files, oldLength, files2.Length); } // Create PartNodes from each file. var nodes = new List <PartNode>(); if (files.Length > 0) { foreach (string file in files) { Messenger.AddInfo(string.Format(Messages.MSG_SCAN_FILE_0_FOR_PARTS, file)); var newNodes = CreatePartNodes(file); foreach (var newNode in newNodes) { if (newNode != null && !string.IsNullOrEmpty(newNode.Name) && !nodes.Contains(newNode)) { nodes.Add(newNode); } } } } else { Messenger.AddInfo(string.Format(Messages.MSG_NO_PARTCFG_FOUND_0, gameDatePath)); } allNodes.Clear(); foreach (PartNode node in nodes) { allNodes.Add(node); } Messenger.AddInfo(Messages.MSG_PART_SCAN_DONE); return(true); }, (result, ex) => { View.ShowProcessingIcon = false; EventDistributor.InvokeAsyncTaskDone(Instance); if (ex != null) { Messenger.AddError(string.Format(Messages.MSG_ERROR_DURING_PART_READING_0, ex.Message), ex); } else { RefreshTreeView(); } if (ScanComplete != null) { ScanComplete(Parts); } }); }
public void WhenCreatingTheDistributorThenItShouldRegisterItselfWithEveryTransport() { var transport1 = Substitute.For<EventTransport>(); var transport2 = Substitute.For<EventTransport>(); var subject = new EventDistributor(null, null, new[] {transport1, transport2}, null); transport1.Received().RegisterDistributor(subject); transport2.Received().RegisterDistributor(subject); }
public AggregateContainer(EventStore eventStore, EventDistributor eventDistributor) { this.eventStore = eventStore; this.eventDistributor = eventDistributor; }
public void WhenRaisingAnEventItShouldBeUniquelyIdentifiedWhenSending() { var transport1 = Substitute.For<EventTransport>(); var transport2 = Substitute.For<EventTransport>(); var subject = new EventDistributor(null, null, new[] { transport1, transport2 }, () => new DateTime(2012, 11, 10, 09, 08, 07)); var actual = new DummyEvent(); subject.Raise(actual); transport1.Received().Send(Arg.Is<UniqueEvent<DummyEvent>>(_ => _.Identity != Guid.Empty)); transport1.Received().Send(Arg.Is<UniqueEvent<DummyEvent>>(_ => _.Event == actual)); }
public void WhenConsumingAnEventThenItWillCallTheAfterDecoratorImplementation() { var serviceLocator = Substitute.For<IServiceLocator>(); var eventStore = Substitute.For<EventStore>(); var eventConsumerDecorator = Substitute.For<EventConsumptionDecorator<ConsumesEvent<DummyEvent>, DummyEvent>>(); var subject = new EventDistributor(serviceLocator, eventStore, new EventTransport[0], null); var identity = Guid.NewGuid(); var @event = new UniqueEvent<DummyEvent>(identity, new DummyEvent(), DateTime.MinValue); var consumer = Substitute.For<ConsumesEvent<DummyEvent>>(); serviceLocator.GetAllInstances<ConsumesEvent<DummyEvent>>().Returns(new[] { consumer }); serviceLocator.GetInstance<EventConsumptionDecorator<ConsumesEvent<DummyEvent>, DummyEvent>>().Returns(eventConsumerDecorator); subject.Receive(@event); eventConsumerDecorator.Received().AfterConsumption(@event, consumer); }
public void WhenReceivingAnEventThatIsAlreadyConsumedThenItShouldBeDropped() { var serviceLocator = Substitute.For<IServiceLocator>(); var eventStore = Substitute.For<EventStore>(); var subject = new EventDistributor(serviceLocator, eventStore, new EventTransport[0], null); var identity = Guid.NewGuid(); var @event = new UniqueEvent<DummyEvent>(identity, new DummyEvent(), DateTime.MinValue); eventStore.IsEventAlreadyConsumed(@event).Returns(true); subject.Receive(@event); serviceLocator.DidNotReceiveWithAnyArgs().GetAllInstances(null); }
public void WhenReceivingAnEventThenItWillCheckTheEventStoreToEnsureItsNotAlreadyBeenConsumed() { var eventStore = Substitute.For<EventStore>(); var subject = new EventDistributor(null, eventStore, new EventTransport[0], null); var identity = Guid.NewGuid(); var @event = new UniqueEvent<DummyEvent>(identity, new DummyEvent(), DateTime.MinValue); eventStore.IsEventAlreadyConsumed(@event).Returns(true); subject.Receive(@event); eventStore.Received().IsEventAlreadyConsumed(@event); }
public void WhenReceivingAnEventThenItWillCallEachConsumerOfTheEvent() { var serviceLocator = Substitute.For<IServiceLocator>(); var eventStore = Substitute.For<EventStore>(); var subject = new EventDistributor(serviceLocator, eventStore, new EventTransport[0], null); var identity = Guid.NewGuid(); var @event = new UniqueEvent<DummyEvent>(identity, new DummyEvent(), DateTime.MinValue); var consumer1 = Substitute.For<ConsumesEvent<DummyEvent>>(); var consumer2 = Substitute.For<ConsumesEvent<DummyEvent>>(); serviceLocator.GetAllInstances<ConsumesEvent<DummyEvent>>().Returns(new[] {consumer1, consumer2}); subject.Receive(@event); consumer1.Received().Consume(@event.Event); consumer2.Received().Consume(@event.Event); }
public static void Register() { EventDistributor.Publish(new EventFromES { }); }