public ConnectHandle Connect(IMessageSink <GrpcTransportMessage> sink, string routingKey) { Connectable <IMessageSink <GrpcTransportMessage> > forKey = _sinks.GetOrAdd(routingKey ?? "", key => new Connectable <IMessageSink <GrpcTransportMessage> >()); return(forKey.Connect(sink)); }
public ConnectHandle Add(IMessageSink <GrpcTransportMessage> sink, string pattern) { if (string.IsNullOrWhiteSpace(pattern)) { return(_sinks.Connect(sink)); } var separator = pattern.IndexOf('.'); if (separator < 0) { return(GetChild(pattern).Bind(sink)); } var word = pattern.Substring(0, separator); return(GetChild(word).Add(sink, pattern, separator + 1)); }
public ConnectHandle ConnectConsumer(IInMemoryQueueConsumer consumer) { try { var handle = _consumers.Connect(consumer); _consumer.SetResult(consumer); return(handle); } catch (Exception exception) { throw new ConfigurationException($"Only a single consumer can be connected to a queue: {_name}", exception); } }
public ConnectHandle Connect(IMessageSink <GrpcTransportMessage> sink, string routingKey) { return(_sinks.Connect(sink)); }
public ConnectHandle ConnectConsumePipe(IPipe <ConsumeContext <T> > pipe) { return(_connections.Connect(pipe)); }
public ConnectHandle ConnectEndpointHandle(EndpointHandle handle) { return(_handles.Connect(handle)); }
public ConnectHandle ConnectPipe(IPipe <TContext> pipe) { return(_connections.Connect(pipe)); }
public IDisposable Subscribe(IObserver <ICodeFeatureStateCacheUpdated> observer) { return(_cacheUpdated.Connect(observer)); }
public static IDomain Parse(string inputFolderName, string homePageName, string colorThemeName, string unitTestName, IDictionary <ConditionalDefine, bool> conditionalDefineTable) { if (inputFolderName == null) { throw new ArgumentNullException(nameof(inputFolderName)); } if (homePageName == null) { throw new ArgumentNullException(nameof(homePageName)); } if (!Directory.Exists(inputFolderName)) { throw new ParsingException(1, inputFolderName, "Input folder not found."); } if (homePageName.Length == 0) { throw new ParsingException(2, inputFolderName, "Empty home page name."); } InitAttachedProperties(); IFormParser FormParserAreas = new ParserArea("area", "txt"); IFormParser FormParserDesigns = new ParserDesign("design", "xaml"); IFormParser FormParserLayouts = new ParserLayout("layout", "xaml"); IFormParser FormParserObjects = new ParserObject("object", "txt"); IFormParser FormParserPages = new ParserPage("page", "txt"); IFormParser FormParserResources = new ParserResource("resource", "png"); IFormParser FormParserBackgrounds = new ParserBackground("background", "xaml"); IFormParser FormParserColorThemes = new ParserColorTheme("color", "txt"); IFormParser FormParserFonts = new ParserFont("font", "ttf"); IFormParser FormParserDynamics = new ParserDynamic("dynamic", "txt"); IFormParser FormParserUnitTest = new ParserUnitTest("unit_test", "txt"); IFormParserCollection FormParsers = new FormParserCollection() { FormParserAreas, FormParserDesigns, FormParserLayouts, FormParserObjects, FormParserPages, FormParserResources, FormParserBackgrounds, FormParserColorThemes, FormParserFonts, FormParserDynamics, FormParserUnitTest, }; string[] FolderNames; try { FolderNames = Directory.GetDirectories(inputFolderName, "*.*"); } catch (Exception e) { throw new ParsingException(3, inputFolderName, e.Message); } foreach (string FullFolderName in FolderNames) { bool Parsed = false; string FolderName = Path.GetFileName(FullFolderName); foreach (IFormParser FormParser in FormParsers) { if (FolderName == FormParser.FolderName) { ParseForm(FormParser, Path.Combine(inputFolderName, FolderName), conditionalDefineTable); Parsed = true; break; } } if (!Parsed) { throw new ParsingException(4, FullFolderName, $"Unexpected folder '{FolderName}'."); } } foreach (IFormParser FormParser in FormParsers) { if (FormParser.ParsedResult == null) { throw new ParsingException(5, inputFolderName, $"Missing folder '{FormParser.FolderName}'."); } } IFormCollection <IArea> Areas = (IFormCollection <IArea>)FormParserAreas.ParsedResult; IFormCollection <IDesign> Designs = (IFormCollection <IDesign>)FormParserDesigns.ParsedResult; IFormCollection <ILayout> Layouts = (IFormCollection <ILayout>)FormParserLayouts.ParsedResult; IFormCollection <IObject> Objects = (IFormCollection <IObject>)FormParserObjects.ParsedResult; IFormCollection <IPage> Pages = (IFormCollection <IPage>)FormParserPages.ParsedResult; IFormCollection <IResource> Resources = (IFormCollection <IResource>)FormParserResources.ParsedResult; IFormCollection <IBackground> Backgrounds = (IFormCollection <IBackground>)FormParserBackgrounds.ParsedResult; IFormCollection <IColorTheme> ColorThemes = (IFormCollection <IColorTheme>)FormParserColorThemes.ParsedResult; IFormCollection <IFont> Fonts = (IFormCollection <IFont>)FormParserFonts.ParsedResult; IFormCollection <IDynamic> Dynamics = (IFormCollection <IDynamic>)FormParserDynamics.ParsedResult; IFormCollection <IUnitTest> UnitTests = (IFormCollection <IUnitTest>)FormParserUnitTest.ParsedResult; string TranslationFile = Path.Combine(inputFolderName, "translations.cvs"); ITranslation Translation; if (File.Exists(TranslationFile)) { Translation = new Translation(TranslationFile, '\t'); Translation.Process(conditionalDefineTable); } else { Translation = null; } string PreprocessorDefineFile = Path.Combine(inputFolderName, "defines.txt"); IPreprocessorDefine PreprocessorDefine; if (File.Exists(PreprocessorDefineFile)) { PreprocessorDefine = new PreprocessorDefine(PreprocessorDefineFile); PreprocessorDefine.Process(conditionalDefineTable); } else { PreprocessorDefine = null; } IPage HomePage = null; foreach (IPage Page in Pages) { if (Page.Name == homePageName) { HomePage = Page; break; } } if (HomePage == null) { throw new ParsingException(6, inputFolderName, $"Home page '{homePageName}' not found."); } IColorTheme SelectedColorTheme = null; foreach (IColorTheme ColorTheme in ColorThemes) { if (ColorTheme.Name == colorThemeName) { SelectedColorTheme = ColorTheme; break; } } if (SelectedColorTheme == null) { throw new ParsingException(7, inputFolderName, $"Color theme '{colorThemeName}' not found."); } IUnitTest SelectedUnitTest = null; if (unitTestName != null) { foreach (IUnitTest UnitTest in UnitTests) { if (UnitTest.Name == unitTestName) { SelectedUnitTest = UnitTest; break; } } if (SelectedUnitTest == null) { throw new ParsingException(239, inputFolderName, $"Unit test '{unitTestName}' not found."); } } IDomain NewDomain = new Domain(inputFolderName, Areas, Designs, Layouts, Objects, Pages, Resources, Backgrounds, ColorThemes, Fonts, Dynamics, UnitTests, Translation, PreprocessorDefine, HomePage, SelectedColorTheme, SelectedUnitTest); bool IsConnected = true; for (int i = 0; i < 100 && IsConnected; i++) { IsConnected = false; foreach (IFormParser FormParser in FormParsers) { foreach (IConnectable Connectable in FormParser.ParsedResult) { IsConnected |= Connectable.Connect(NewDomain); } } if (Translation != null) { IsConnected |= Translation.Connect(NewDomain); } } if (IsConnected) { throw new ParsingException(8, inputFolderName, $"Unexpected error during processing of the input folder."); } // Make sure areas used by other areas are first BubbleSort(Areas); // Remove all layouts and use their clone. //((List<ILayout>)Layouts).Clear(); foreach (IPage Page in Pages) { foreach (KeyValuePair <IArea, ILayout> Entry in Page.AreaLayouts) { Layouts.Add(Entry.Value); } } return(NewDomain); }