12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879 |
- 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;
- }
- }
- }
- }
- }
|