public HttpResponseMessage Events(string id) { var eventsTransport = new EventsTransport(id); RavenFileSystem.TransportState.Register(eventsTransport); return eventsTransport.GetResponse(); }
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(); } }
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; }); }
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) { } }
public ConnectionState(EventsTransport eventsTransport) { this.eventsTransport = eventsTransport; }