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); }
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); }
private Task HandleSpecificRequest(SlackRequestContext requestContext, SocketEnvelope envelope, Action <object> respond) => envelope switch {