Exemple #1
0
 protected abstract Task <int> OnSendAsync(SubArray <byte> message, RawRequestReceivedEventArgs e);
Exemple #2
0
 protected Task OnRequestReceivedAsync(RawRequestReceivedEventArgs requestReceived)
 => RequestReceived?.InvokeAsync(this, requestReceived) ?? Task.CompletedTask;
Exemple #3
0
        private async Task QueueListener_RequestReceived(object sender, RawRequestReceivedEventArgs e)
        {
            var iMessages = Counters.IncrementMessages();

            try
            {
                if (_serverQueues?.AdditionalSendQueues?.Any() == true)
                {
                    e.ResponseQueues.AddRange(_serverQueues.AdditionalSendQueues);
                }
                Counters.IncrementTotalReceivingBytes(e.MessageLength);
                Core.Log.InfoDetail("Request message received with CorrelationId = {0} . Current messages processing = {1}", e.CorrelationId, iMessages);
                if (RequestReceived != null)
                {
                    await RequestReceived.InvokeAsync(sender, e).ConfigureAwait(false);
                }
                if (MQueueRawServerEvents.RequestReceived != null)
                {
                    await MQueueRawServerEvents.RequestReceived.InvokeAsync(sender, e).ConfigureAwait(false);
                }

                if (e.SendResponse && e.Response != null)
                {
                    var response = e.Response;

                    RawResponseSentEventArgs rsea = null;
                    if (BeforeSendResponse != null || MQueueRawServerEvents.BeforeSendResponse != null ||
                        ResponseSent != null || MQueueRawServerEvents.ResponseSent != null)
                    {
                        rsea = new RawResponseSentEventArgs(Name, response, e.CorrelationId);
                        if (BeforeSendResponse != null)
                        {
                            await BeforeSendResponse.InvokeAsync(this, rsea).ConfigureAwait(false);
                        }
                        if (MQueueRawServerEvents.BeforeSendResponse != null)
                        {
                            await MQueueRawServerEvents.BeforeSendResponse.InvokeAsync(this, rsea).ConfigureAwait(false);
                        }
                    }


                    response = rsea?.Message ?? e.Response;
                    var sentBytes = await OnSendAsync(response, e).ConfigureAwait(false);

                    if (sentBytes > -1)
                    {
                        if (rsea != null)
                        {
                            rsea.MessageLength = sentBytes;
                            if (ResponseSent != null)
                            {
                                await ResponseSent.InvokeAsync(this, rsea).ConfigureAwait(false);
                            }
                            if (MQueueRawServerEvents.ResponseSent != null)
                            {
                                await MQueueRawServerEvents.ResponseSent.InvokeAsync(this, rsea).ConfigureAwait(false);
                            }
                        }
                    }
                    else
                    {
                        Core.Log.Warning("The message couldn't be sent.");
                    }
                }
                Counters.DecrementMessages();
                Counters.IncrementTotalMessagesProccesed();
            }
            catch (Exception)
            {
                Counters.IncrementTotalExceptions();
                Counters.DecrementMessages();
                throw;
            }
        }
Exemple #4
0
        private async Task QueueListener_RequestReceived(object sender, RawRequestReceivedEventArgs e)
        {
            var iMessages = Counters.IncrementMessages();

            try
            {
                if (_serverQueues?.AdditionalSendQueues?.Any() == true)
                {
                    e.ResponseQueues.AddRange(_serverQueues.AdditionalSendQueues);
                }

                #region Client Queues Routes Rebindings
                if (_serverQueues.ClientQueuesRoutesRebindings != null)
                {
                    Core.Log.LibDebug("Processing ClientQueues Route Rebinding");
                    foreach (var queue in e.ResponseQueues)
                    {
                        if (queue.IsSkippingRoute())
                        {
                            continue;
                        }
                        if (_serverQueues.ClientQueuesRoutesRebindings.TryGet(queue.Route, out var qRebinding))
                        {
                            Core.Log.LibVerbose("Rebinding Route: '{0}' to '{1}'", queue.Route, qRebinding.Value);
                            queue.Route = qRebinding.Value;
                        }
                        else
                        {
                            Core.Log.LibVerbose("Route '{0}' doesn't have a Rebinding.", queue.Route);
                        }
                    }
                }
                #endregion

                Counters.IncrementTotalReceivingBytes(e.MessageLength);
                Core.Log.LibDebug("Request message received with CorrelationId = {0} . Current messages processing = {1}", e.CorrelationId, iMessages);
                if (RequestReceived != null)
                {
                    await RequestReceived.InvokeAsync(sender, e).ConfigureAwait(false);
                }
                if (MQueueRawServerEvents.RequestReceived != null)
                {
                    await MQueueRawServerEvents.RequestReceived.InvokeAsync(sender, e).ConfigureAwait(false);
                }

                if (e.SendResponse && e.Response != MultiArray <byte> .Empty)
                {
                    var response = e.Response;

                    RawResponseSentEventArgs rsea = null;
                    if (BeforeSendResponse != null || MQueueRawServerEvents.BeforeSendResponse != null ||
                        ResponseSent != null || MQueueRawServerEvents.ResponseSent != null)
                    {
                        rsea = new RawResponseSentEventArgs(Name, response, e.CorrelationId);
                        if (BeforeSendResponse != null)
                        {
                            await BeforeSendResponse.InvokeAsync(this, rsea).ConfigureAwait(false);
                        }
                        if (MQueueRawServerEvents.BeforeSendResponse != null)
                        {
                            await MQueueRawServerEvents.BeforeSendResponse.InvokeAsync(this, rsea).ConfigureAwait(false);
                        }
                    }


                    response = rsea?.Message ?? e.Response;
                    var sentBytes = await OnSendAsync(response, e).ConfigureAwait(false);

                    if (sentBytes > -1)
                    {
                        if (rsea != null)
                        {
                            rsea.MessageLength = sentBytes;
                            if (ResponseSent != null)
                            {
                                await ResponseSent.InvokeAsync(this, rsea).ConfigureAwait(false);
                            }
                            if (MQueueRawServerEvents.ResponseSent != null)
                            {
                                await MQueueRawServerEvents.ResponseSent.InvokeAsync(this, rsea).ConfigureAwait(false);
                            }
                        }
                    }
                    else
                    {
                        Core.Log.Warning("The message couldn't be sent.");
                    }
                }
                Counters.DecrementMessages();
                Counters.IncrementTotalMessagesProccesed();
            }
            catch (Exception)
            {
                Counters.IncrementTotalExceptions();
                Counters.DecrementMessages();
                throw;
            }
        }