|
@@ -111,11 +111,11 @@ namespace Emby.Server.Implementations.LiveTv.TunerHosts.HdHomerun
|
|
|
|
|
|
public async Task<bool> CheckTunerAvailability(IPAddress remoteIp, int tuner, CancellationToken cancellationToken)
|
|
|
{
|
|
|
- using (var client = new TcpClient(new IPEndPoint(remoteIp, HdHomeRunPort)))
|
|
|
- using (var stream = client.GetStream())
|
|
|
- {
|
|
|
- return await CheckTunerAvailability(stream, tuner, cancellationToken).ConfigureAwait(false);
|
|
|
- }
|
|
|
+ using var client = new TcpClient();
|
|
|
+ client.Connect(remoteIp, HdHomeRunPort);
|
|
|
+
|
|
|
+ using var stream = client.GetStream();
|
|
|
+ return await CheckTunerAvailability(stream, tuner, cancellationToken).ConfigureAwait(false);
|
|
|
}
|
|
|
|
|
|
private static async Task<bool> CheckTunerAvailability(NetworkStream stream, int tuner, CancellationToken cancellationToken)
|
|
@@ -142,7 +142,8 @@ namespace Emby.Server.Implementations.LiveTv.TunerHosts.HdHomerun
|
|
|
{
|
|
|
_remoteEndPoint = new IPEndPoint(remoteIp, HdHomeRunPort);
|
|
|
|
|
|
- _tcpClient = new TcpClient(_remoteEndPoint);
|
|
|
+ _tcpClient = new TcpClient();
|
|
|
+ _tcpClient.Connect(_remoteEndPoint);
|
|
|
|
|
|
if (!_lockkey.HasValue)
|
|
|
{
|
|
@@ -221,30 +222,30 @@ namespace Emby.Server.Implementations.LiveTv.TunerHosts.HdHomerun
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
- using (var tcpClient = new TcpClient(_remoteEndPoint))
|
|
|
- using (var stream = tcpClient.GetStream())
|
|
|
+ using var tcpClient = new TcpClient();
|
|
|
+ tcpClient.Connect(_remoteEndPoint);
|
|
|
+
|
|
|
+ using var stream = tcpClient.GetStream();
|
|
|
+ var commandList = commands.GetCommands();
|
|
|
+ byte[] buffer = ArrayPool<byte>.Shared.Rent(8192);
|
|
|
+ try
|
|
|
{
|
|
|
- var commandList = commands.GetCommands();
|
|
|
- byte[] buffer = ArrayPool<byte>.Shared.Rent(8192);
|
|
|
- try
|
|
|
+ foreach (var command in commandList)
|
|
|
{
|
|
|
- foreach (var command in commandList)
|
|
|
- {
|
|
|
- var channelMsg = CreateSetMessage(_activeTuner, command.Item1, command.Item2, _lockkey);
|
|
|
- await stream.WriteAsync(channelMsg, 0, channelMsg.Length, cancellationToken).ConfigureAwait(false);
|
|
|
- int receivedBytes = await stream.ReadAsync(buffer, 0, buffer.Length, cancellationToken).ConfigureAwait(false);
|
|
|
+ var channelMsg = CreateSetMessage(_activeTuner, command.Item1, command.Item2, _lockkey);
|
|
|
+ await stream.WriteAsync(channelMsg, 0, channelMsg.Length, cancellationToken).ConfigureAwait(false);
|
|
|
+ int receivedBytes = await stream.ReadAsync(buffer, 0, buffer.Length, cancellationToken).ConfigureAwait(false);
|
|
|
|
|
|
- // parse response to make sure it worked
|
|
|
- if (!ParseReturnMessage(buffer, receivedBytes, out _))
|
|
|
- {
|
|
|
- return;
|
|
|
- }
|
|
|
+ // parse response to make sure it worked
|
|
|
+ if (!ParseReturnMessage(buffer, receivedBytes, out _))
|
|
|
+ {
|
|
|
+ return;
|
|
|
}
|
|
|
}
|
|
|
- finally
|
|
|
- {
|
|
|
- ArrayPool<byte>.Shared.Return(buffer);
|
|
|
- }
|
|
|
+ }
|
|
|
+ finally
|
|
|
+ {
|
|
|
+ ArrayPool<byte>.Shared.Return(buffer);
|
|
|
}
|
|
|
}
|
|
|
|