コード例 #1
0
        public bool DropSubscriptionConnection(long subscriptionId, SubscriptionException ex)
        {
            if (_subscriptionConnectionStates.TryGetValue(subscriptionId, out SubscriptionConnectionState subscriptionConnectionState) == false)
            {
                return(false);
            }

            var subscriptionConnection = subscriptionConnectionState.Connection;

            if (subscriptionConnection != null)
            {
                subscriptionConnectionState.RegisterRejectedConnection(subscriptionConnection, ex);
                subscriptionConnection.ConnectionException = ex;
                try
                {
                    subscriptionConnection.CancellationTokenSource.Cancel();
                }
                catch
                {
                    // ignored
                }
            }

            if (_logger.IsInfoEnabled)
            {
                _logger.Info($"Subscription with id {subscriptionId} connection was dropped. Reason: {ex.Message}");
            }

            return(true);
        }
コード例 #2
0
        public void RegisterRejectedConnection(SubscriptionConnection connection, SubscriptionException exception = null)
        {
            if (exception != null && connection.ConnectionException == null)
            {
                connection.ConnectionException = exception;
            }

            while (_rejectedConnections.Count > 10)
            {
                _rejectedConnections.TryDequeue(out SubscriptionConnection _);
            }
            _rejectedConnections.Enqueue(connection);
        }
コード例 #3
0
        public static bool TryGetSubscriptionException(ErrorResponseException ere, out SubscriptionException subscriptionException)
        {
            var text = ere.ResponseString;

            if (ere.StatusCode == SubscriptionDoesNotExistException.RelevantHttpStatusCode)
            {
                var errorResult = JsonConvert.DeserializeAnonymousType(text, new
                {
                    url   = (string)null,
                    error = (string)null
                });

                subscriptionException = new SubscriptionDoesNotExistException(errorResult.error);
                return(true);
            }

            if (ere.StatusCode == SubscriptionInUseException.RelavantHttpStatusCode)
            {
                var errorResult = JsonConvert.DeserializeAnonymousType(text, new
                {
                    url   = (string)null,
                    error = (string)null
                });

                subscriptionException = new SubscriptionInUseException(errorResult.error);
                return(true);
            }

            if (ere.StatusCode == SubscriptionClosedException.RelevantHttpStatusCode)
            {
                var errorResult = JsonConvert.DeserializeAnonymousType(text, new
                {
                    url   = (string)null,
                    error = (string)null
                });

                subscriptionException = new SubscriptionClosedException(errorResult.error);
                return(true);
            }

            subscriptionException = null;
            return(false);
        }
コード例 #4
0
        public static bool TryGetSubscriptionException(ErrorResponseException ere, out SubscriptionException subscriptionException)
        {
            if (ere.StatusCode == SubscriptionDoesNotExistExeption.RelevantHttpStatusCode)
            {
                subscriptionException = new SubscriptionDoesNotExistExeption(ere.ResponseString);
                return(true);
            }

            if (ere.StatusCode == SubscriptionInUseException.RelavantHttpStatusCode)
            {
                subscriptionException = new SubscriptionInUseException(ere.Message);
                return(true);
            }

            if (ere.StatusCode == SubscriptionClosedException.RelevantHttpStatusCode)
            {
                subscriptionException = new SubscriptionClosedException(ere.Message);
                return(true);
            }

            subscriptionException = null;
            return(false);
        }
コード例 #5
0
        private static void HandleSubscriptionException(HttpActionExecutedContext ctx, SubscriptionException e)
        {
            ctx.Response = new HttpResponseMessage
            {
                StatusCode = e.ResponseStatusCode
            };

            SerializeError(ctx, new
            {
                Url   = ctx.Request.RequestUri.PathAndQuery,
                Error = e.Message
            });
        }