예제 #1
0
        public static Action <Uri, TunnelPack> Create(TunnelProxyInfo info)
        {
            var func = Create_Core(info);


            return((uri, stream) => func(uri, stream));
        }
예제 #2
0
        static Func <Uri, TunnelPack, Task> Create_Core(TunnelProxyInfo info)
        {
            return(async(uri, tunnelPack) =>
            {
                Stream left_stream = await info.CreateLocalStream(tunnelPack.ConnectStream, uri).ConfigureAwait(false);

                Stream right_stream = await info.CreateRemoteStream(uri).ConfigureAwait(false);



                var t1 = left_stream.CopyToAsync(right_stream, info.BufferSize);

                var t2 = right_stream.CopyToAsync(left_stream);



                Task t3 = Task.WhenAny(t1, t2).ContinueWith((t) =>
                {
                    left_stream.Close();

                    right_stream.Close();
                });
            });
        }