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.Sockets;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
namespace DearFTP.Connection
{
@@ -14,11 +16,32 @@ namespace DearFTP.Connection
public TcpClient Client { get; private set; }
public NetworkStream Stream { get; private set; }
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()
{
IsAvailable = false;
}
public void Create()
@@ -35,28 +58,15 @@ namespace DearFTP.Connection
public void AcceptClient()
{
var task = Listener.AcceptTcpClientAsync();
if (task.Wait(Timeout))
_acceptTask = Listener.AcceptTcpClientAsync().ContinueWith(t =>
{
Client = task.Result;
Client = t.Result;
Stream = Client.GetStream();
IsAvailable = true;
}
}
public async void AcceptClientAsync()
{
Client = await Listener.AcceptTcpClientAsync();
Stream = Client.GetStream();
IsAvailable = true;
});
}
public void Close()
{
IsAvailable = false;
Stream.Close();
Client.Close();
Listener.Stop();