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); } }
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); }
public LoopbackConnection() { _stream = new LoopbackStream(); _writer = new BinaryWriter(_stream); _reader = new BinaryReader(_stream); }
private LoopbackStream(LoopbackStream another) { Another = another; }
public LoopbackStream() { Another = new LoopbackStream(this); }