You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
|
using System;
|
|
|
|
using System.Threading;
|
|
|
|
using System.Threading.Tasks;
|
|
|
|
|
|
|
|
namespace SocketHttpListener.Net
|
|
|
|
{
|
|
|
|
internal class HttpStreamAsyncResult : IAsyncResult
|
|
|
|
{
|
|
|
|
private object _locker = new object();
|
|
|
|
private ManualResetEvent _handle;
|
|
|
|
private bool _completed;
|
|
|
|
|
|
|
|
internal readonly object _parent;
|
|
|
|
internal byte[] _buffer;
|
|
|
|
internal int _offset;
|
|
|
|
internal int _count;
|
|
|
|
internal AsyncCallback _callback;
|
|
|
|
internal object _state;
|
|
|
|
internal int _synchRead;
|
|
|
|
internal Exception _error;
|
|
|
|
internal bool _endCalled;
|
|
|
|
|
|
|
|
internal HttpStreamAsyncResult(object parent)
|
|
|
|
{
|
|
|
|
_parent = parent;
|
|
|
|
}
|
|
|
|
|
|
|
|
public void Complete(Exception e)
|
|
|
|
{
|
|
|
|
_error = e;
|
|
|
|
Complete();
|
|
|
|
}
|
|
|
|
|
|
|
|
public void Complete()
|
|
|
|
{
|
|
|
|
lock (_locker)
|
|
|
|
{
|
|
|
|
if (_completed)
|
|
|
|
return;
|
|
|
|
|
|
|
|
_completed = true;
|
|
|
|
if (_handle != null)
|
|
|
|
_handle.Set();
|
|
|
|
|
|
|
|
if (_callback != null)
|
|
|
|
Task.Run(() => _callback(this));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
public object AsyncState => _state;
|
|
|
|
|
|
|
|
public WaitHandle AsyncWaitHandle
|
|
|
|
{
|
|
|
|
get
|
|
|
|
{
|
|
|
|
lock (_locker)
|
|
|
|
{
|
|
|
|
if (_handle == null)
|
|
|
|
_handle = new ManualResetEvent(_completed);
|
|
|
|
}
|
|
|
|
|
|
|
|
return _handle;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
public bool CompletedSynchronously => false;
|
|
|
|
|
|
|
|
public bool IsCompleted
|
|
|
|
{
|
|
|
|
get
|
|
|
|
{
|
|
|
|
lock (_locker)
|
|
|
|
{
|
|
|
|
return _completed;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|