Exemplo n.º 1
0
        public static Task publishToReadModel(ResolvedEvent eS_Event)
        {
            EventFromES normal = NormalizeESEvent(eS_Event);

            EventDistributor.Publish(normal);
            return(Task.FromResult(0));
        }
Exemplo n.º 2
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);
            }
        }
Exemplo n.º 3
0
        /// <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);
                }
            }
                                     );
        }
Exemplo n.º 4
0
        /// <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++;
        }
Exemplo n.º 5
0
        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);
        }
Exemplo n.º 6
0
        public MainWindow()
        {
            InitializeComponent();
            algorithmHandler = new AlgorithmMgr();

            EventType[] acceptedEventTypeList = { EventType.NoMoreTuple, EventType.Error, EventType.OldTupleDepart };
            EventDistributor.GetInstance().SubcribeListenerWithFullAcceptedTypeList(this, acceptedEventTypeList);
        }
Exemplo n.º 7
0
        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);
            });
        }
Exemplo n.º 9
0
 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);
     }
 }
Exemplo n.º 10
0
        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);
            }
        }
Exemplo n.º 11
0
 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);
 }
Exemplo n.º 12
0
 public static void Queue(EventModel theEvent)
 {
     publishingQueue.Add(theEvent);
     while (publishingQueue.Count > 0)
     {
         EventDistributor.Publish(publishingQueue[0]);
         if (publishingQueue.Count > 0)
         {
             publishingQueue.RemoveAt(0);
         }
     }
 }
Exemplo n.º 13
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));
            }
        }
Exemplo n.º 14
0
        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);
            }
        }
Exemplo n.º 15
0
        /// <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);
            }
        }
Exemplo n.º 16
0
        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);
                }
            }
        }
Exemplo n.º 17
0
        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();
        }
Exemplo n.º 18
0
        /// <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();
                }
            });
        }
Exemplo n.º 19
0
        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);
        }
Exemplo n.º 20
0
        /// <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);
        }
Exemplo n.º 21
0
        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);
        }
Exemplo n.º 22
0
        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);
            }
        }
Exemplo n.º 23
0
        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>>();
        }
Exemplo n.º 24
0
        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));
                    }
                }
            });
        }
Exemplo n.º 25
0
        /// <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();
                }
            });
        }
Exemplo n.º 26
0
 static EventExtensions()
 {
     eventDistributor = ServiceLocator.Current.GetInstance<EventDistributor>();
 }
Exemplo n.º 27
0
        /// <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);
            });
        }
Exemplo n.º 28
0
        /// <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);
                }
            });
        }
Exemplo n.º 30
0
        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);
        }
Exemplo n.º 31
0
 public AggregateContainer(EventStore eventStore, EventDistributor eventDistributor)
 {
     this.eventStore = eventStore;
     this.eventDistributor = eventDistributor;
 }
Exemplo n.º 32
0
        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));
        }
Exemplo n.º 33
0
        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);
        }
Exemplo n.º 34
0
        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);
        }
Exemplo n.º 35
0
        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);
        }
Exemplo n.º 36
0
        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);
        }
Exemplo n.º 37
0
 public static void Register()
 {
     EventDistributor.Publish(new EventFromES {
     });
 }