コード例 #1
0
ファイル: UvLoopThread.cs プロジェクト: zr8091/OwinDog
        private void PostListenHandleToLoop(object tcsObj)
        {
            TaskCompletionSource <int> taskCompletionSource = (TaskCompletionSource <int>)tcsObj;

            if (string.IsNullOrEmpty(_name))
            {
                taskCompletionSource.SetResult(0);
                return;
            }
            IntPtr intPtr = Marshal.AllocHGlobal(4);

            _bufferStruct = _libuv.CreateBufferStruct(intPtr, 4);
            _uvPipeHandle = new UvPipeHandle();

            _uvPipeHandle.Init(_loopHandle, true);
            UvPipeStream uvPipeStream = new UvPipeStream();

            uvPipeStream.Init(_loopHandle);
            //链接
            uvPipeStream.PipeConnect(_uvPipeHandle, _name, new Action <UvPipeStream, int, Exception, object>(ConnectionCallBack), taskCompletionSource);
        }
コード例 #2
0
ファイル: UvLoopThread.cs プロジェクト: zr8091/OwinDog
        private void ConnectionCallBack(UvPipeStream uvPipeStream, int num, Exception ex, object obj)
        {
            var taskCompletionSource = (TaskCompletionSource <int>)obj;

            uvPipeStream.Dispose();
            if (ex != null)
            {
                taskCompletionSource.SetException(ex);
                return;
            }
            try
            {
                //当tcp 的 http 请求被重定向到这里的时候会回调 ReadCallback 方法
                _uvPipeHandle.Read(AllocCallback, ReadCallback, null);
                taskCompletionSource.SetResult(0);
            }
            catch (Exception ex2)
            {
                Console.WriteLine(ex2);
                _uvPipeHandle.Dispose();
                taskCompletionSource.SetException(ex2);
            }
        }