// Copyright (c) .NET Foundation. All rights reserved. // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. using System; using System.Diagnostics; using System.IO; using System.Threading.Tasks; using Newtonsoft.Json; namespace Microsoft.AspNetCore.SignalR.Crankier { public class AgentReceiver { private readonly StreamReader _reader; private readonly IAgent _agent; public AgentReceiver(StreamReader reader, IAgent agent) { _reader = reader; _agent = agent; } public void Start() { Task.Run(async () => { var messageString = await _reader.ReadLineAsync(); while (messageString != null) { try { var message = JsonConvert.DeserializeObject(messageString); switch (message.Command.ToLowerInvariant()) { case "pong": await _agent.PongAsync( message.Value["Id"].ToObject(), message.Value["Value"].ToObject()); break; case "log": await _agent.LogAsync( message.Value["Id"].ToObject(), message.Value["Text"].ToObject()); break; case "status": await _agent.StatusAsync( message.Value["Id"].ToObject(), message.Value["StatusInformation"].ToObject()); break; } } catch (Exception ex) { Trace.WriteLine($"Error parsing '{messageString}': {ex.Message}"); } messageString = await _reader.ReadLineAsync(); } }); } } }