Example #1
0
        public async Task Get_All_Types_At_Or_Bellow_The_Requested()
        {
            // arrange
            var eventHub = new EventHub();

            eventHub.Broadcast(new A());
            eventHub.Broadcast(new B());
            eventHub.Broadcast(new C());
            eventHub.Shutdown();

            // act
            var isGood = await eventHub.Get <B>().All(b => b is B);

            // assert
            isGood.Should().BeTrue();
        }
Example #2
0
        /// <inheritdoc />
        /// <summary>
        ///     Gets the context menu items.
        /// </summary>
        /// <param name="items">The items.</param>
        /// <returns></returns>
        public IEnumerable <FrameworkElement> GetContextMenuItems(IEnumerable <FileInfo> items)
        {
            var menuItem = new MenuItem();
            var arr      = items.ToArray();

            menuItem.Header = $"Delete {arr.Length} Items";

            menuItem.Click += (sender, args) =>
            {
                foreach (var fileInfo in arr)
                {
                    try
                    {
                        File.Delete(fileInfo.FullName);
                        EventHub.Broadcast(new FileDeletedEvent(fileInfo.FullName));
                    }
                    catch (Exception e)
                    {
                        Log.Error($"Could not delete {fileInfo.FullName} - {e.Message}");
                    }
                }
            };

            return(new[] { menuItem });
        }
Example #3
0
        protected override void UpdateInternal(float unscaledDeltaTime)
        {
            while (m_DownloadResults.TryDequeue(out var result))
            {
                if (result.exception != null)
                {
                    m_Hub.Broadcast(new StreamingErrorEvent(result.streamAsset.key, result.streamAsset.boundingBox, result.exception));
                    continue;
                }

                var streamInstance = new StreamInstance(result.streamAsset.key,
                                                        result.streamInstance, result.streamAsset.boundingBox);

                var key = result.streamAsset.key;

                if (m_Cache.TryGetValue(key, out var previousStreamInstance))
                {
                    if (previousStreamInstance.instance.ObjectId != result.streamInstance.ObjectId)
                    {
                        m_InstanceDataOutput.SendStreamRemoved(new SyncedData <StreamInstance>(key, previousStreamInstance));
                        m_InstanceDataOutput.SendStreamAdded(new SyncedData <StreamInstance>(key, streamInstance));
                    }
                    else
                    {
                        if (m_DirtySyncObject.Contains(key))
                        {
                            m_DirtySyncObject.Remove(key);
                            m_InstanceDataOutput.SendStreamRemoved(new SyncedData <StreamInstance>(key, previousStreamInstance));
                            m_InstanceDataOutput.SendStreamAdded(new SyncedData <StreamInstance>(key, streamInstance));
                        }
                        else
                        {
                            m_InstanceDataOutput.SendStreamChanged(new SyncedData <StreamInstance>(key, streamInstance));
                        }
                    }
                }
                else
                {
                    m_InstanceDataOutput.SendStreamAdded(new SyncedData <StreamInstance>(key, streamInstance));
                }

                m_Cache[key] = streamInstance;

                var syncObjectKey = new StreamKey(streamInstance.key.source, PersistentKey.GetKey <SyncObject>(streamInstance.instance.ObjectId));
                if (!m_Instances.TryGetValue(syncObjectKey, out var instances))
                {
                    m_Instances[syncObjectKey] = instances = new HashSet <StreamAsset>();
                }

                instances.Add(result.streamAsset);
            }

            if (m_State == State.WaitingToFinish && m_DownloadRequests.IsEmpty)
            {
                m_InstanceDataOutput.SendEnd();
                m_State = State.Idle;
            }
        }
Example #4
0
            /// <inheritdoc />
            public async Task Process(CancellationToken cancellationToken)
            {
                EventHub.Broadcast(new DummyMessage
                {
                    Amount = 5
                });
                Thread.Sleep(333);
                await Task.Delay(333);

                Thread.Sleep(333);
                EventHub.Broadcast(new DummyMessage
                {
                    Amount = 5
                });
            }
Example #5
0
        /// <summary>
        ///     Performs the analysis
        /// </summary>
        /// <param name="cancellationToken">The cancellation token.</param>
        /// <returns>A Task that when complete will signal the completion of the setup procedure</returns>
        /// <inheritdoc />
        public Task Process(CancellationToken cancellationToken)
        {
            if (StackFrameResultsInternal.Any())
            {
                EventHub.Broadcast(new StackFrameBreakdownMessage
                {
                    Records = StackFrameResultsInternal
                });
            }

            if (UniqueStackFrameResultsInternal.Any())
            {
                EventHub.Broadcast(new UniqueStacksMessage
                {
                    UniqueStackFrameRollupRecords = UniqueStackFrameResultsInternal
                });
            }

            return(Task.CompletedTask);
        }
        /// <summary>
        ///     Performs the analysis
        /// </summary>
        /// <param name="cancellationToken">The cancellation token.</param>
        /// <returns>A Task that when complete will signal the completion of the setup procedure</returns>
        /// <inheritdoc />
        // todo: breakup method
        public async Task Process(CancellationToken cancellationToken)
        {
            if (ExcelAnalyzers == null || ExcelAnalyzers.Length == 0)
            {
                Log.Fatal("No analyzers were found!");
                return;
            }

            Log.Information("Engine starting");
            var analyzerSetupTasks = new Dictionary <Task, IExcelAnalyzer>();

            foreach (var analyzer in ExcelAnalyzers)
            {
                var task = Task.Run(() => analyzer.Setup(cancellationToken), cancellationToken);
                analyzerSetupTasks.Add(task, analyzer);
            }

            using (var stream = File.OpenRead("template.xlsx"))
            {
                var doc = new SLDocument(stream);
                while (analyzerSetupTasks.Keys.Any())
                {
                    var task = await Task.WhenAny(analyzerSetupTasks.Keys);

                    var analyzer = analyzerSetupTasks[task];
                    if (task.IsFaulted)
                    {
                        task.Exception?.Handle(exception =>
                        {
                            Log.Error(exception,
                                      "ExcelAnalyzer {FullName} failed during setup: {FullName1} - {Message}",
                                      analyzer.GetType().FullName, exception.GetType().FullName, exception.Message);
                            return(true);
                        });
                    }
                    else if (task.IsCanceled)
                    {
                        Log.Warning("ExcelAnalyzer {FullName} was cancelled during setup", analyzer.GetType().FullName);
                    }
                    else
                    {
                        Log.Information("ExcelAnalyzer {FullName} was successfully setup, starting contribution..",
                                        analyzer.GetType().FullName);
                        analyzer.Contribute(doc);
                    }

                    analyzerSetupTasks.Remove(task);
                }

                var fileName = DateTime.Now.ToString("yyyy_MM_dd-hh_mm_ss") + ".xlsx";
                try
                {
                    doc.SelectWorksheet("Summary");
                    doc.SaveAs(fileName);
                    Log.Information("Successfully saved report: {FileName}", fileName);
                }
                catch (Exception e)
                {
                    Log.Error(e, "Unable to save excel report: {FullName} - {Message}", e.GetType().FullName,
                              e.Message);
                    throw;
                }

                if (ExcelPostProcessors == null || ExcelPostProcessors.Length == 0)
                {
                    Log.Information("There were no Excel Post Processors registered");
                }
                else
                {
                    Log.Information("Starting excel post processing");
                    foreach (var postProcessor in ExcelPostProcessors)
                    {
                        try
                        {
                            var fileInfo = Path.GetFullPath(fileName);
                            postProcessor.PostProcess(new FileInfo(fileInfo));
                        }
                        catch (Exception e)
                        {
                            Log.Error(e, "Excel Post Processor failed: {FullName} - {Message}",
                                      postProcessor.GetType().FullName, e.Message);
                        }
                    }
                }

                EventHub.Broadcast(new ExcelReportComplete
                {
                    ReportFile = fileName
                });
            }
        }
Example #7
0
 public void OnPipelineInitialized()
 {
     m_ObjectHandle = m_MemTracker.CreateCache <StreamKey, TObject>(GetDestructor());
     m_Hub.Broadcast(new MemoryTrackerCacheCreatedEvent <TObject>(m_ObjectHandle));
 }
        protected override void UpdateInternal(float unscaledDeltaTime)
        {
            // Postponing instances if there are available models (in order to update model caches first)
            while (m_DownloadedModels.Count == 0 && m_DownloadedInstances.TryDequeue(out var result))
            {
                if (result.exception != null)
                {
                    m_Hub.Broadcast(new StreamingErrorEvent(result.instanceData.instance.key, result.instanceData.instance.boundingBox, result.exception));
                    continue;
                }

                Trace(">>>>>> SENDING " + result.instanceData.instance.instance.Name);

                // TODO Have type dependencies inside the result
                var meshes    = result.downloadedMeshes;
                var textures  = result.downloadedTextures;
                var materials = result.downloadedMaterials;

                foreach (var asset in meshes)
                {
                    m_AddedModels.Add(asset.key);
                    if (!m_MemTracker.ContainsKey(m_MeshesHandle, asset.key))
                    {
                        Trace("        >> Sending " + asset.GetType().Name + " " + asset.asset.Name);
                        m_SyncMeshOutput.SendStreamAdded(new SyncedData <SyncMesh>(asset.key, asset.asset));
                    }
                }

                foreach (var asset in textures)
                {
                    if (m_AddedModels.Add(asset.key))
                    {
                        Trace("        >> Sending " + asset.GetType().Name + " " + asset.asset.Name);
                        m_SyncTextureOutput.SendStreamAdded(new SyncedData <SyncTexture>(asset.key, asset.asset));
                    }
                }

                foreach (var asset in materials)
                {
                    if (m_AddedModels.Add(asset.key))
                    {
                        Trace("        >> Sending " + asset.GetType().Name + " " + asset.asset.Name);
                        m_SyncMaterialOutput.SendStreamAdded(new SyncedData <SyncMaterial>(asset.key, asset.asset));
                    }
                }

                var key = result.instanceData.instance.key;

                if (m_InstanceCache.ContainsKey(key))
                {
                    m_InstanceDataOutput.SendStreamChanged(new SyncedData <StreamInstanceData>(key, result.instanceData));
                }
                else
                {
                    m_InstanceDataOutput.SendStreamAdded(new SyncedData <StreamInstanceData>(key, result.instanceData));
                }

                m_InstanceCache[key] = result.instanceData;

                Trace(">> DONE " + result.instanceData.instance.instance.Name);
            }

            while (m_DownloadedModels.TryDequeue(out var result))
            {
                // Skip without broadcasting error. Errors are broadcasted for each SyncInstance, not for SyncObject or each sub-resource
                if (result.exception != null)
                {
                    continue;
                }

                TrySendAddedOrChanged(result.assetEntry, m_SyncTextureOutput);
                TrySendAddedOrChanged(result.assetEntry, m_SyncMeshOutput);
                TrySendAddedOrChanged(result.assetEntry, m_SyncMaterialOutput);
            }

            if (m_State == State.WaitingToFinish && m_DownloadRequests.IsEmpty && m_DownloadedModels.IsEmpty)
            {
                m_InstanceDataOutput.SendEnd();
                m_State = State.Idle;
            }
        }