/
githubmirror
/
aspnetcore
Обзор
Документация
Войти
/
githubmirror
/
aspnetcore
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
src/SignalR/samples/SocialWeather/SocialWeatherConnectionHandler.cs
61 строка
2 KB
Pranav K
Enforce warnings for unused usings (#39280)
04 янв 2022, 00:26
Не верифицирован
04 янв 2022, 00:26
667f068
Код
Авторство
О чём код?
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. using System.Buffers; using Microsoft.AspNetCore.Connections; namespace SocialWeather; public class SocialWeatherConnectionHandler : ConnectionHandler { private readonly PersistentConnectionLifeTimeManager _lifetimeManager; private readonly FormatterResolver _formatterResolver; private readonly ILogger<SocialWeatherConnectionHandler> _logger; public SocialWeatherConnectionHandler(PersistentConnectionLifeTimeManager lifetimeManager, FormatterResolver formatterResolver, ILogger<SocialWeatherConnectionHandler> logger) { _lifetimeManager = lifetimeManager; _formatterResolver = formatterResolver; _logger = logger; } public override async Task OnConnectedAsync(ConnectionContext connection) { _lifetimeManager.OnConnectedAsync(connection); await ProcessRequests(connection); _lifetimeManager.OnDisconnectedAsync(connection); } public async Task ProcessRequests(ConnectionContext connection) { var formatter = _formatterResolver.GetFormatter<WeatherReport>( (string)connection.Items["format"]); while (true) { var result = await connection.Transport.Input.ReadAsync(); var buffer = result.Buffer; try { if (!buffer.IsEmpty) { var stream = new MemoryStream(); var data = buffer.ToArray(); await stream.WriteAsync(data, 0, data.Length); stream.Position = 0; var weatherReport = await formatter.ReadAsync(stream); await _lifetimeManager.SendToAllAsync(weatherReport); } else if (result.IsCompleted) { break; } } finally { connection.Transport.Input.AdvanceTo(buffer.End); } } } }