protected override async Task Write(TextWriter writer, string dataValue, ICitylineProducer provider, TicketHolder ticket, CancellationToken cancellationToken = default(CancellationToken)) { using (var jsonWriter = new JsonTextWriter(writer) { Formatting = Formatting.None }) { await jsonWriter.WriteStartObjectAsync(cancellationToken); await jsonWriter.WritePropertyNameAsync("id", cancellationToken); await jsonWriter.WriteValueAsync(ticket.AsString(), cancellationToken); await jsonWriter.WritePropertyNameAsync("event", cancellationToken); await jsonWriter.WriteValueAsync(provider.Name, cancellationToken); await jsonWriter.WritePropertyNameAsync("data", cancellationToken); await jsonWriter.WriteValueAsync(dataValue, cancellationToken); await jsonWriter.WriteEndObjectAsync(cancellationToken); await writer.WriteAsync('\n'); } }
protected BaseCitylineWriter(SemaphoreSlim semaphore, ICitylineProducer provider, Stream stream, TicketHolder ticket, CancellationToken cancellationToken = default) { this.semaphore = semaphore; this.provider = provider; this.stream = stream; this.stream = stream; this.ticket = ticket; this.cancellationToken = cancellationToken; }
protected override async Task Write(TextWriter writer, string dataValue, ICitylineProducer provider, TicketHolder ticket, CancellationToken cancellationToken = default(CancellationToken)) { await writer.WriteLineAsync($"id: {ticket.AsString()}"); await writer.WriteLineAsync($"event: {provider.Name}"); await writer.WriteLineAsync($"data: {dataValue}"); await writer.WriteLineAsync(""); }
private async Task RunProducer(ICitylineProducer provider, Stream stream, TicketHolder ticket, IContext context, CancellationToken cancellationToken = default) { ICitylineWriter writer; if (this.UseJson) { writer = new CitylineJsonWriter(semaphore, provider, stream, ticket, cancellationToken); } else { writer = new CitylineLineWriter(semaphore, provider, stream, ticket, cancellationToken); } // Func<object, Task> emitter = new Func<object, Task>(async obj => // { // var value = JsonConvert.SerializeObject(obj, settings); // try // { // await semaphore.WaitAsync(cancellationToken); // using (var writer = new StreamWriter(stream, new UTF8Encoding(false), value.Length + 1024, true)) // { // if (UseJson) // await WriteJson(writer, value, provider, ticket, CancellationToken.None); // CancellationToken.None, we don't want partial messages // else // await WriteText(writer, value, provider, ticket, CancellationToken.None); // } // } // finally // { // semaphore.Release(); // } // }); // context is shared, so this wont work var response = await provider.GetFrame(ticket, context, writer, cancellationToken); if (response == null) { return; } await writer.Write(response); }
private async Task RunProducer(ICitylineProducer provider, Stream stream, TicketHolder ticket, IContext context, CancellationToken cancellationToken = default) { var response = await provider.GetFrame(ticket, context, cancellationToken); if (response == null) { return; } lock (padLock) { using (var writer = new StreamWriter(stream, new UTF8Encoding(false), 1024, true)) { writer.WriteLine($"id: {ticket.AsString()}"); writer.WriteLine($"event: {provider.Name}"); writer.WriteLine($"data: {JsonConvert.SerializeObject(response, settings)}"); writer.WriteLine(); } } }
public CitylineJsonWriter(SemaphoreSlim semaphore, ICitylineProducer provider, Stream stream, TicketHolder ticket, CancellationToken cancellationToken = default) : base(semaphore, provider, stream, ticket, cancellationToken) { }
protected abstract Task Write(TextWriter writer, string dataValue, ICitylineProducer provider, TicketHolder ticket, CancellationToken cancellationToken);