Example #1
0
        public Task InitializeAsync(CancellationToken ct)
        {
            if (!string.IsNullOrEmpty(_settings.FunctionsDirectory) &&
                Directory.Exists(_settings.FunctionsDirectory))
            {
                var subDirectories = Directory.GetDirectories(
                    _settings.FunctionsDirectory, "*", SearchOption.TopDirectoryOnly);

                foreach (var subDirectory in subDirectories)
                {
                    if (!GlobalStartup.TryGetStartupSettings(subDirectory, out var startupSettings))
                    {
                        continue;
                    }

                    if (startupSettings.ServiceNames == null || startupSettings.ServiceNames.Count == 0)
                    {
                        continue;
                    }

                    if (!GlobalStartup.TryGetFunctionSettings(subDirectory, out var functionSettings))
                    {
                        continue;
                    }

                    var queueBinding = functionSettings.Bindings?.SingleOrDefault(b =>
                                                                                  (string.IsNullOrEmpty(b.Direction) || b.Direction == "in") &&
                                                                                  b.Type == "queueTrigger" && !string.IsNullOrEmpty(b.QueueName));

                    if (queueBinding == null)
                    {
                        continue;
                    }

                    var queue = _storageAccount.QueueClient.GetQueueReference(queueBinding.QueueName);

                    var functionName = Path.GetFileName(subDirectory);
                    _functionToQueueMap[functionName] = queue;

                    foreach (var serviceName in startupSettings.ServiceNames)
                    {
                        _serviceToQueueMap[serviceName] = queue;
                    }
                }
            }

            return(Task.FromResult(true));
        }