コード例 #1
0
ファイル: Loader.cs プロジェクト: vlingo-net/xoom-net-http
    private static IDictionary <string, IConfigurationResource> LoadSseResources(HttpProperties properties, ILogger logger)
    {
        var sseResourceActions = new Dictionary <string, IConfigurationResource>();

        foreach (var streamResourceName in FindResources(properties, SsePublisherNamePrefix))
        {
            var streamUri         = properties.GetProperty(streamResourceName);
            var resourceName      = streamResourceName.Substring(SsePublisherNamePrefix.Length);
            var feedClassnameKey  = $"sse.stream.{resourceName}.feed.class";
            var feedClassname     = properties.GetProperty(feedClassnameKey);
            var feedPayloadKey    = "sse.stream." + resourceName + ".feed.payload";
            var maybeFeedPayload  = int.Parse(properties.GetProperty(feedPayloadKey, "20") ?? "20");
            var feedPayload       = maybeFeedPayload <= 0 ? 20 : maybeFeedPayload;
            var feedIntervalKey   = $"sse.stream.{resourceName}.feed.interval";
            var maybeFeedInterval = int.Parse(properties.GetProperty(feedIntervalKey, "1000") ?? "1000");
            var feedInterval      = maybeFeedInterval <= 0 ? 1000 : maybeFeedInterval;
            var feedDefaultIdKey  = $"sse.stream.{resourceName}.feed.default.id";
            var feedDefaultId     = properties.GetProperty(feedDefaultIdKey, "");
            var poolKey           = $"sse.stream.{resourceName}.pool";
            var maybePoolSize     = int.Parse(properties.GetProperty(poolKey, "1") ?? "1");
            var handlerPoolSize   = maybePoolSize <= 0 ? 1 : maybePoolSize;
            var subscribeUri      = streamUri?.Replace(resourceName, SsePublisherNamePathParameter);
            var unsubscribeUri    = subscribeUri + "/" + SsePublisherIdPathParameter;

            try
            {
                var feedClass                = ActorClassWithProtocol(feedClassname, typeof(ISseFeed));
                var mappedParameterClass     = new Action.MappedParameter("Type", feedClass);
                var mappedParameterPayload   = new Action.MappedParameter("int", feedPayload);
                var mappedParameterInterval  = new Action.MappedParameter("int", feedInterval);
                var mappedParameterDefaultId = new Action.MappedParameter("string", feedDefaultId);

                var actions = new List <Action>(2);
                var additionalParameters = new List <Action.MappedParameter> {
                    mappedParameterClass, mappedParameterPayload, mappedParameterInterval, mappedParameterDefaultId
                };
                actions.Add(new Action(0, Method.Get.Name(), subscribeUri, SsePublisherSubscribeTo, null, additionalParameters));
                actions.Add(new Action(1, Method.Delete.Name(), unsubscribeUri, SsePublisherUnsubscribeTo, null));
                var resource = ResourceFor(resourceName, typeof(SseStreamResource), handlerPoolSize, actions, logger);
                sseResourceActions[resourceName] = resource;
            }
            catch (Exception e)
            {
                Console.WriteLine("vlingo-net/http: Failed to load SSE resource: " + streamResourceName + " because: " + e.Message);
                Console.WriteLine(e.StackTrace);
                throw;
            }
        }

        return(sseResourceActions);
    }
コード例 #2
0
ファイル: Loader.cs プロジェクト: vlingo-net/xoom-net-http
    private static IDictionary <string, IConfigurationResource> LoadFeedResources(HttpProperties properties, ILogger logger)
    {
        var feedResourceActions = new Dictionary <string, IConfigurationResource>();

        foreach (var feedResourceName in FindResources(properties, FeedProducerNamePrefix))
        {
            var feedUri                  = properties.GetProperty(feedResourceName);
            var resourceName             = feedResourceName.Substring(FeedProducerNamePrefix.Length);
            var feedProducerClassnameKey = $"feed.resource.{resourceName}.producer.class";
            var feedProducerClassname    = properties.GetProperty(feedProducerClassnameKey);
            var feedElementsKey          = $"feed.resource.{resourceName}.elements";
            var maybeFeedElements        = int.Parse(properties.GetProperty(feedElementsKey, "20") ?? "20");
            var feedElements             = maybeFeedElements <= 0 ? 20 : maybeFeedElements;
            var poolKey                  = $"feed.resource.{resourceName}.pool";
            var maybePoolSize            = int.Parse(properties.GetProperty(poolKey, "1") ?? "1");
            int handlerPoolSize          = maybePoolSize <= 0 ? 1 : maybePoolSize;
            var feedRequestUri           =
                $"{feedUri?.Replace(resourceName, FeedNamePathParameter)}/{FeedProductIdPathParameter}";

            try
            {
                var feedClass = ActorClassWithProtocol(feedProducerClassname, typeof(IFeedProducer));
                var mappedParameterProducerClass   = new Action.MappedParameter("Type", feedClass);
                var mappedParameterProductElements = new Action.MappedParameter("int", feedElements);

                var actions = new List <Action>(1);
                var additionalParameters = new List <Action.MappedParameter> {
                    mappedParameterProducerClass, mappedParameterProductElements
                };
                actions.Add(new Action(0, Method.Get.Name(), feedRequestUri, FeedProducerFeed, null, additionalParameters));
                var resource = ResourceFor(resourceName, typeof(FeedResource), handlerPoolSize, actions, logger);
                feedResourceActions.Add(resourceName, resource);
            }
            catch (Exception e)
            {
                Console.WriteLine($"vlingo/http: Failed to load feed resource: {resourceName} because: {e.Message}");
                Console.WriteLine(e.StackTrace);
                throw;
            }
        }

        return(feedResourceActions);
    }
コード例 #3
0
ファイル: Loader.cs プロジェクト: vlingo-net/xoom-net-http
    private static void LoadStaticFileResource(Dictionary <string, IConfigurationResource> staticFilesResources,
                                               string root,
                                               string poolSize,
                                               string?validSubPaths,
                                               IEnumerable <string> actionSubPaths, ILogger logger)
    {
        try
        {
            var resourceSequence = 0;

            foreach (var actionSubPath in ListOfSorted(actionSubPaths.ToArray()))
            {
                var mappedParameterRoot          = new Action.MappedParameter("string", root);
                var mappedParameterValidSubPaths = new Action.MappedParameter("string", validSubPaths);

                var slash        = actionSubPath.EndsWith("/") ? "" : "/";
                var resourceName = StaticFilesResource + resourceSequence++;

                var actions = new List <Action>(1);
                var additionalParameters = new List <Action.MappedParameter>
                {
                    mappedParameterRoot, mappedParameterValidSubPaths
                };
                actions.Add(new Action(0, Method.Get.Name(), PatternFrom(actionSubPath, slash), StaticFilesResourceServeFile, null, additionalParameters));
                var resource = ResourceFor(resourceName, typeof(StaticFilesResource), int.Parse(poolSize), actions, logger);
                staticFilesResources[resourceName] = resource;
            }
        }
        catch (Exception e)
        {
            Console.WriteLine(
                $"vlingo-net/http: Failed to load static files resource: {StaticFilesResource} because: {e.Message}");
            Console.WriteLine(e.StackTrace);
            throw;
        }
    }