コード例 #1
0
ファイル: InConnection.cs プロジェクト: hex11/Naive
        protected override Task OnConnectionResult(ConnectResultBase resultBase)
        {
            if (!resultBase.Ok)
            {
                SetConnectResponse(new ConnectResult(resultBase.Adapter, ConnectResultEnum.Failed)
                {
                    FailedReason = resultBase.FailedReason
                });
                return(NaiveUtils.CompletedTask);
            }
            var result = (ConnectResult)resultBase;

            if (result.Stream == null)
            {
                var lo = new LoopbackStream();
                DataStream    = lo;
                result.Stream = lo.Another;
                SetConnectResponse(result);
                return(NaiveUtils.CompletedTask);
            }
            else
            {
                SetConnectResponse(result);
                tcsConnectionFinish = new TaskCompletionSource <VoidType>();
                return(tcsConnectionFinish.Task);
            }
        }
コード例 #2
0
        public static Task <ConnectResult> ConnectWrapper(IConnectionHandler handler, ConnectArgument arg)
        {
            var tcs    = new TaskCompletionSource <ConnectResult>();
            var newinc = InConnectionTcp.Create(arg.InAdapter, arg.Dest, async(r) => {
                if (r.Ok)
                {
                    var stream = new LoopbackStream();
                    r.Stream   = stream;
                    tcs.SetResult(r);
                    return(stream.Another);
                }
                else
                {
                    tcs.SetResult(r);
                    return(null);
                }
            });

            newinc.Url = arg.Url;
            newinc.DestOriginalName = arg.DestOriginalName;
            NaiveUtils.RunAsyncTask(async() => {
                try {
                    await handler.HandleTcpConnection(newinc).CAF();
                } catch (Exception e) {
                    tcs.SetException(e);
                    return;
                }
                if (newinc.IsRedirected && tcs.Task.IsCompleted == false)
                {
                    tcs.SetResult(ConnectResult.RedirectTo(handler, newinc.Redirected));
                }
                else
                {
                    tcs.SetException(new Exception("handleConnection() did nothing."));
                }
            });
            return(tcs.Task);
        }
コード例 #3
0
 public LoopbackConnection()
 {
     _stream = new LoopbackStream();
     _writer = new BinaryWriter(_stream);
     _reader = new BinaryReader(_stream);
 }
コード例 #4
0
 private LoopbackStream(LoopbackStream another)
 {
     Another = another;
 }
コード例 #5
0
 public LoopbackStream()
 {
     Another = new LoopbackStream(this);
 }
コード例 #6
0
 public LoopbackConnection()
 {
     _stream = new LoopbackStream();
     _writer = new BinaryWriter(_stream);
     _reader = new BinaryReader(_stream);
 }