Fix async client wait

Needed for REST
This commit is contained in:
2019-07-18 14:22:43 +02:00
parent f39dd7b764
commit c78181a1de

View File

@@ -3,6 +3,8 @@ using System.Collections.Generic;
using System.Net; using System.Net;
using System.Net.Sockets; using System.Net.Sockets;
using System.Text; using System.Text;
using System.Threading;
using System.Threading.Tasks;
namespace DearFTP.Connection namespace DearFTP.Connection
{ {
@@ -14,11 +16,32 @@ namespace DearFTP.Connection
public TcpClient Client { get; private set; } public TcpClient Client { get; private set; }
public NetworkStream Stream { get; private set; } public NetworkStream Stream { get; private set; }
public int Port => ((IPEndPoint)Listener.LocalEndpoint).Port; public int Port => ((IPEndPoint)Listener.LocalEndpoint).Port;
public bool IsAvailable { get; private set; } public bool IsAvailable
{
get
{
if (_acceptTask == null)
{
return false;
}
else if (_acceptTask.Wait(Timeout))
{
return true;
}
else
{
_acceptTask.Dispose();
_acceptTask = null;
return false;
}
}
}
private Task _acceptTask;
public DataConnection() public DataConnection()
{ {
IsAvailable = false;
} }
public void Create() public void Create()
@@ -35,28 +58,15 @@ namespace DearFTP.Connection
public void AcceptClient() public void AcceptClient()
{ {
var task = Listener.AcceptTcpClientAsync(); _acceptTask = Listener.AcceptTcpClientAsync().ContinueWith(t =>
if (task.Wait(Timeout))
{ {
Client = task.Result; Client = t.Result;
Stream = Client.GetStream(); Stream = Client.GetStream();
});
IsAvailable = true;
}
}
public async void AcceptClientAsync()
{
Client = await Listener.AcceptTcpClientAsync();
Stream = Client.GetStream();
IsAvailable = true;
} }
public void Close() public void Close()
{ {
IsAvailable = false;
Stream.Close(); Stream.Close();
Client.Close(); Client.Close();
Listener.Stop(); Listener.Stop();