Example #1
0
        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');
            }
        }
Example #2
0
 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);
        }
Example #5
0
        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();
                }
            }
        }
Example #6
0
 public CitylineJsonWriter(SemaphoreSlim semaphore, ICitylineProducer provider, Stream stream, TicketHolder ticket, CancellationToken cancellationToken = default) : base(semaphore, provider, stream, ticket, cancellationToken)
 {
 }
Example #7
0
 protected abstract Task Write(TextWriter writer, string dataValue, ICitylineProducer provider, TicketHolder ticket, CancellationToken cancellationToken);