Пример #1
0
        private async Task <Unit> HandleRequest(SocketEnvelope envelope)
        {
            try
            {
                var requestContext = SlackRequestContext.Current = new SlackRequestContext
                {
                    [Envelope] = envelope,
                    [nameof(SlackRequestContext.RequestId)] = envelope.RequestId
                };

                await using (requestContext.BeginRequest(_requestListeners).ConfigureAwait(false))
                {
                    var responded = false;

                    try
                    {
                        await HandleSpecificRequest(requestContext, envelope, Respond).ConfigureAwait(false);
                    }
                    finally
                    {
                        if (!responded)
                        {
                            Respond(null);
                        }
                    }

                    void Respond(object payload)
                    {
                        responded = true;
                        Acknowledgement ack;

                        if (payload == null)
                        {
                            ack = new Acknowledgement();
                            _log.Request("Acknowledging request");
                        }
                        else
                        {
                            ack = new Acknowledgement <object> {
                                Payload = payload
                            };
                            _log.WithContext("Payload", payload)
                            .Request("Responding with {PayloadType}", payload.GetType());
                        }
                        ack.EnvelopeId = envelope.EnvelopeId;
                        Send(envelope.SocketId, ack);
                    }
                }
            }
            catch (Exception e)
            {
                _log.Error(e, "Error handling request");
            }

            return(Unit.Default);
        }
Пример #2
0
        private async Task <Unit> HandleRequest(SocketEnvelope envelope)
        {
            try
            {
                var requestContext = new SlackRequestContext();
                await _requestListener.OnRequestBegin(requestContext).ConfigureAwait(false);

                var responded = false;

                try
                {
                    await HandleSpecificRequest(requestContext, envelope, Respond).ConfigureAwait(false);
                }
                finally
                {
                    if (!responded)
                    {
                        Respond(new Acknowledgement {
                            EnvelopeId = envelope.EnvelopeId
                        });
                    }
                    await _requestListener.OnRequestEnd(requestContext).ConfigureAwait(false);
                }

                void Respond(object payload)
                {
                    responded = true;
                    var ack = payload == null ? new Acknowledgement() : new Acknowledgement <object> {
                        Payload = payload
                    };

                    ack.EnvelopeId = envelope.EnvelopeId;
                    Send(ack);
                }
            }
            catch
            {
                // ignored
            }

            return(Unit.Default);
        }
Пример #3
0
 private Task HandleSpecificRequest(SlackRequestContext requestContext, SocketEnvelope envelope, Action <object> respond) =>
 envelope switch
 {