public static IEnumerable <MemberDeclarationSyntax> Generate(IReadOnlyList <HassState> entities)
    {
        var entitySets = entities.GroupBy(e => (EntityIdHelper.GetDomain(e.EntityId), IsNumeric(e)))
                         .Select(g => new EntitySet(g.Key.Item1, g.Key.Item2, g))
                         .OrderBy(s => s.Domain)
                         .ToList();

        var entityIds = entities.Select(x => x.EntityId).ToList();

        var entityDomains = GetDomainsFromEntities(entityIds).OrderBy(s => s).ToList();

        yield return(GenerateRootEntitiesInterface(entityDomains));

        yield return(GenerateRootEntitiesClass(entitySets));

        foreach (var entityClass in entitySets.GroupBy(s => s.EntitiesForDomainClassName).Select(g => GenerateEntiesForDomainClass(g.Key, g)))
        {
            yield return(entityClass);
        }

        foreach (var entitytype in entitySets.Select(GenerateEntityType))
        {
            yield return(entitytype);
        }

        foreach (var attributeRecord in entitySets.Select(GenerateAttributeRecord))
        {
            yield return(attributeRecord);
        }
    }
Exemple #2
0
    public static IEnumerable <MemberDeclarationSyntax> Generate(IEnumerable <HassServiceDomain> serviceDomains, IReadOnlyCollection <HassState> entities)
    {
        var entityDomains = entities.GroupBy(e => EntityIdHelper.GetDomain(e.EntityId)).Select(x => x.Key);

        return(serviceDomains
               .Where(sd =>
                      sd.Services?.Any() == true &&
                      sd.Services.Any(s => entityDomains.Contains(s.Target?.Entity?.Domain)))
               .GroupBy(x => x.Domain, x => x.Services)
               .Select(GenerateClass));
    }
Exemple #3
0
        public MatchAggregator(string tickerSymbol, ITradeEventSubscriptionManager tradeSubscriptionManager, IMarketEventSubscriptionManager marketEventSubscriptionManager, IMarketEventPublisher marketEventPublisher, ITimestamper timestamper = null)
        {
            TickerSymbol = tickerSymbol;

            _timestamper = timestamper ?? CurrentUtcTimestamper.Instance;
            _tradeSubscriptionManager       = tradeSubscriptionManager;
            _marketEventSubscriptionManager = marketEventSubscriptionManager;
            _marketEventPublisher           = marketEventPublisher;
            PersistenceId = EntityIdHelper.IdForPricing(tickerSymbol);

            Recovers();
            Commands();
        }
Exemple #4
0
        public MatchAggregator(string tickerSymbol, IEventsByTagQuery eventsByTag, IActorRef mediator, ITimestamper timestamper)
        {
            TickerSymbol  = tickerSymbol;
            _priceTopic   = PriceTopicHelpers.PriceUpdateTopic(TickerSymbol);
            _volumeTopic  = PriceTopicHelpers.VolumeUpdateTopic(TickerSymbol);
            _eventsByTag  = eventsByTag;
            _mediator     = mediator;
            _timestamper  = timestamper;
            PersistenceId = EntityIdHelper.IdForPricing(tickerSymbol);

            Receives();
            Commands();
        }
Exemple #5
0
        protected override void PreStart()
        {
            var mat  = Context.Materializer();
            var self = Self;

            _tradeIdsQuery.PersistenceIds()
            .Where(x => x.EndsWith(EntityIdHelper
                                   .OrderBookSuffix)) // skip persistence ids belonging to price entities
            .Select(x => new Ping(EntityIdHelper.ExtractTickerFromPersistenceId(x)))
            .RunWith(Sink.ActorRef <Ping>(self, UnexpectedEndOfStream.Instance), mat);

            _heartbeatInterval = Context.System.Scheduler.ScheduleTellRepeatedlyCancelable(TimeSpan.FromSeconds(30),
                                                                                           TimeSpan.FromSeconds(30), Self, Heartbeat.Instance, ActorRefs.NoSender);
        }
        private static IEnumerable <ClassDeclarationSyntax> GenerateExtensionMethodClasses(IEnumerable <HassServiceDomain> serviceDomains, IReadOnlyCollection <HassState> entities)
        {
            var entityDomains = entities.GroupBy(e => EntityIdHelper.GetDomain(e.EntityId)).Select(x => x.Key);

            foreach (var domainServicesGroup in serviceDomains
                     .Where(sd =>
                            sd.Services?.Any() == true &&
                            sd.Services.Any(s => entityDomains.Contains(s.Target?.Entity?.Domain)))
                     .GroupBy(x => x.Domain, x => x.Services))
            {
                var domain         = domainServicesGroup.Key !;
                var domainServices = domainServicesGroup
                                     .SelectMany(services => services !)
                                     .Where(s => s.Target?.Entity?.Domain != null)
                                     .Select(group => group)
                                     .OrderBy(x => x.Service)
                                     .ToList();

                yield return(GenerateDomainExtensionClass(domain, domainServices));
            }
        }