public async Task SendMessageAsync(Message message)
{
try
{
await semaphore.DoAsync(async () =>
{
using (var stream = new NetworkStream(socket))
{
var stopwatch = Stopwatch.StartNew();
using (var byteStream = new MemoryStream())
using (var writer = new BinaryWriter(byteStream))
{
NetworkEncoder.EncodeMessage(writer, message);
var messageBytes = byteStream.ToArray();
await stream.WriteAsync(messageBytes, 0, messageBytes.Length);
}
stopwatch.Stop();
if (logger.IsTraceEnabled)
logger.Trace($"Sent {message.Command} in {stopwatch.ElapsedMilliseconds} ms\nPayload: {message.Payload.ToArray().ToHexDataString()}");
}
});
}
catch (Exception e)
{
Fail(e);
}
}
}