public HttpResponseMessage Events(string id)
        {
            var eventsTransport = new EventsTransport(id);
            RavenFileSystem.TransportState.Register(eventsTransport);

            return eventsTransport.GetResponse();
        }
Пример #2
0
        public Task HandleChangesRequest(IHttpContext context, Action onDisconnect)
        {
            var sw = Stopwatch.StartNew();

            try
            {
                if (SetupRequestToProperDatabase(context) == false)
                {
                    FinalizeRequestSafe(context);
                    onDisconnect();
                    return(new CompletedTask());
                }

                if (!SetThreadLocalState(context))
                {
                    FinalizeRequestSafe(context);
                    onDisconnect();
                    return(new CompletedTask());
                }
                var eventsTransport = new EventsTransport(context);
                eventsTransport.Disconnected += onDisconnect;
                var handleChangesRequest = eventsTransport.ProcessAsync();
                CurrentDatabase.TransportState.Register(eventsTransport);
                return(handleChangesRequest);
            }
            catch (Exception e)
            {
                try
                {
                    HandleException(context, e);
                    if (ShouldLogException(e))
                    {
                        logger.WarnException("Error on request", e);
                    }
                }
                finally
                {
                    FinalizeRequestSafe(context);
                }
                onDisconnect();
                return(new CompletedTask());
            }
            finally
            {
                try
                {
                    LogHttpRequestStats(new LogHttpRequestStatsParams(
                                            sw,
                                            context.Request.Headers,
                                            context.Request.HttpMethod,
                                            context.Response.StatusCode,
                                            context.Request.Url.PathAndQuery));
                }
                catch (Exception e)
                {
                    logger.WarnException("Could not gather information to log request stats", e);
                }
                ResetThreadLocalState();
            }
        }
Пример #3
0
		public ConnectionState Register(EventsTransport transport)
		{
			timeSensitiveStore.Seen(transport.Id);
			transport.Disconnected += () => TimeSensitiveStore.Missing(transport.Id);
			return connections.AddOrUpdate(transport.Id, new ConnectionState(transport), (s, state) =>
			                                                                             	{
			                                                                             		state.Reconnect(transport);
			                                                                             		return state;
			                                                                             	});
		}
Пример #4
0
		public async Task Reconnect(EventsTransport transport)
		{
			eventsTransport = transport;
			var items = new List<Notification>();
			Notification result;
			while (pendingMessages.TryDequeue(out result))
			{
				items.Add(result);
			}

			try
			{
				await eventsTransport.SendManyAsync(items);
				foreach (var item in items)
				{
					pendingMessages.Enqueue(item);
				}
			}
			catch (Exception)
			{
			}
		}
Пример #5
0
		public ConnectionState(EventsTransport eventsTransport)
		{
			this.eventsTransport = eventsTransport;
		}