64 lines
2.2 KiB
C#
64 lines
2.2 KiB
C#
// 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<Message>(messageString);
|
|
|
|
switch (message.Command.ToLowerInvariant())
|
|
{
|
|
case "pong":
|
|
await _agent.PongAsync(
|
|
message.Value["Id"].ToObject<int>(),
|
|
message.Value["Value"].ToObject<int>());
|
|
break;
|
|
case "log":
|
|
await _agent.LogAsync(
|
|
message.Value["Id"].ToObject<int>(),
|
|
message.Value["Text"].ToObject<string>());
|
|
break;
|
|
case "status":
|
|
await _agent.StatusAsync(
|
|
message.Value["Id"].ToObject<int>(),
|
|
message.Value["StatusInformation"].ToObject<StatusInformation>());
|
|
break;
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Trace.WriteLine($"Error parsing '{messageString}': {ex.Message}");
|
|
}
|
|
|
|
messageString = await _reader.ReadLineAsync();
|
|
}
|
|
});
|
|
}
|
|
}
|
|
}
|