77 lines
2.0 KiB
C#
77 lines
2.0 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 Newtonsoft.Json;
|
|
using Newtonsoft.Json.Linq;
|
|
using System.IO;
|
|
using System.Threading;
|
|
using System.Threading.Tasks;
|
|
|
|
namespace Microsoft.AspNetCore.SignalR.Crankier
|
|
{
|
|
public class AgentSender : IAgent
|
|
{
|
|
private readonly SemaphoreSlim _lock = new SemaphoreSlim(1, 1);
|
|
private readonly StreamWriter _outputStreamWriter;
|
|
|
|
public AgentSender(StreamWriter outputStreamWriter)
|
|
{
|
|
_outputStreamWriter = outputStreamWriter;
|
|
}
|
|
|
|
public async Task PongAsync(int id, int value)
|
|
{
|
|
var parameters = new
|
|
{
|
|
Id = id,
|
|
Value = value
|
|
};
|
|
|
|
await SendAsync("pong", JToken.FromObject(parameters));
|
|
}
|
|
|
|
public async Task LogAsync(int id, string text)
|
|
{
|
|
var parameters = new
|
|
{
|
|
Id = id,
|
|
Text = text
|
|
};
|
|
|
|
await SendAsync("log", JToken.FromObject(parameters));
|
|
}
|
|
|
|
public async Task StatusAsync(
|
|
int id,
|
|
StatusInformation statusInformation)
|
|
{
|
|
var parameters = new
|
|
{
|
|
Id = id,
|
|
StatusInformation = statusInformation
|
|
};
|
|
|
|
await SendAsync("status", JToken.FromObject(parameters)); ;
|
|
}
|
|
|
|
private async Task SendAsync(string method, JToken parameters)
|
|
{
|
|
await _lock.WaitAsync();
|
|
try
|
|
{
|
|
await _outputStreamWriter.WriteLineAsync(
|
|
JsonConvert.SerializeObject(new Message
|
|
{
|
|
Command = method,
|
|
Value = parameters
|
|
}));
|
|
await _outputStreamWriter.FlushAsync();
|
|
}
|
|
finally
|
|
{
|
|
_lock.Release();
|
|
}
|
|
}
|
|
}
|
|
}
|