示例#1
0
        public Task SendAsync(TenantMessage tenantMessage, CancellationToken cancellationToken)
        {
            ITenant tenant;
            if (!_tenants.TryGetValue(tenantMessage.Address.TenantKey, out tenant))
            {
                throw new ArgumentException($"There's no tenant with key '{tenantMessage.Address.TenantKey}'");
            }

            return tenant.SendMessage(tenantMessage, cancellationToken);
        }
示例#2
0
 public Task ReplyAsync(TenantMessage tenantMessage, string text, CancellationToken cancellationToken)
 {
     return SendAsync(tenantMessage.CreateReply(text), cancellationToken);
 }
示例#3
0
 public Task SendMessage(TenantMessage tenantMessage, CancellationToken cancellationToken)
 {
     return _slackService.SendMessageAsync(
         tenantMessage,
         cancellationToken);
 }
示例#4
0
        public async Task<ProcessMessageResult> ProcessAsync(TenantMessage tenantMessage, CancellationToken cancellationToken)
        {
            foreach (var pluginCommandDescription in _pluginCommandDescriptions)
            {
                foreach (var commandDescription in pluginCommandDescription.Value)
                {
                    if (!commandDescription.IsMatch(tenantMessage.Text))
                    {
                        continue;
                    }

                    var plugin = _plugins[pluginCommandDescription.Key];

                    _logger.Verbose($"Plugin '{pluginCommandDescription.Key}' handles: {tenantMessage.Text}");

                    await _restClient.PostAsync<object, TenantMessage>(new Uri(plugin.Plugin.BaseUri, commandDescription.Endpoint),
                        tenantMessage,
                        JsonFormat.PascalCase,
                        cancellationToken)
                        .ConfigureAwait(false);

                    return ProcessMessageResult.Handled;
                }
            }

            _logger.Verbose($"Could not find a command match: {tenantMessage.Text}");

            return ProcessMessageResult.Skipped;
        }
示例#5
0
 public Task SendAsync(TenantMessage tenantMessage, CancellationToken cancellationToken)
 {
     return PostAsync("api/tenant-messages", tenantMessage, cancellationToken);
 }
示例#6
0
 public Task ReplyToAsync(TenantMessage tenantMessage, string text, CancellationToken cancellationToken)
 {
     return SendAsync(tenantMessage.Address, text, cancellationToken);
 }
示例#7
0
文件: Borg.cs 项目: rasmus/TheBorg
        private async void HandleMessage(TenantMessage tenantMessage)
        {
            // Yes, its async void

            foreach (var messageProcessor in MessageProcessors())
            {
                var processMessageResult = await messageProcessor.ProcessAsync(tenantMessage, CancellationToken.None).ConfigureAwait(false);
                if (processMessageResult == ProcessMessageResult.Handled)
                {
                    break;
                }
            }
        }