IAsyncResult BeginCompleteSingletonPreamble( ServerSingletonPreambleConnectionReader serverSingletonPreambleReader, ISingletonChannelListener singletonChannelListener, AsyncCallback callback, object state) { return(new CompleteSingletonPreambleAndDispatchRequestAsyncResult(serverSingletonPreambleReader, singletonChannelListener, this, callback, state)); }
void OnSingletonPreambleKnown(ServerSingletonPreambleConnectionReader serverSingletonPreambleReader) { lock (ThisLock) { if (isDisposed) { return; } connectionReaders.Remove(serverSingletonPreambleReader); } if (onSingletonPreambleComplete == null) { onSingletonPreambleComplete = Fx.ThunkCallback(new AsyncCallback(OnSingletonPreambleComplete)); } ISingletonChannelListener singletonChannelListener = singletonPreambleCallback(serverSingletonPreambleReader); Fx.Assert(singletonChannelListener != null, "singletonPreambleCallback must return a listener or send a Fault/throw"); // transfer ownership of the connection from the preamble reader to the message handler IAsyncResult result = BeginCompleteSingletonPreamble(serverSingletonPreambleReader, singletonChannelListener, onSingletonPreambleComplete, this); if (result.CompletedSynchronously) { EndCompleteSingletonPreamble(result); } }
private void OnSingletonPreambleKnown(ServerSingletonPreambleConnectionReader serverSingletonPreambleReader) { lock (this.ThisLock) { if (this.isDisposed) { return; } this.connectionReaders.Remove(serverSingletonPreambleReader); } ISingletonChannelListener listener = this.singletonPreambleCallback(serverSingletonPreambleReader); TimeoutHelper helper = new TimeoutHelper(listener.ReceiveTimeout); IConnection upgradedConnection = serverSingletonPreambleReader.CompletePreamble(helper.RemainingTime()); RequestContext requestContext = new ServerSingletonConnectionReader(serverSingletonPreambleReader, upgradedConnection, this).ReceiveRequest(helper.RemainingTime()); listener.ReceiveRequest(requestContext, serverSingletonPreambleReader.ConnectionDequeuedCallback, true); }
public CompleteSingletonPreambleAndDispatchRequestAsyncResult( ServerSingletonPreambleConnectionReader serverSingletonPreambleReader, ISingletonChannelListener singletonChannelListener, ConnectionDemuxer demuxer, AsyncCallback callback, object state) : base(callback, state) { this.serverSingletonPreambleReader = serverSingletonPreambleReader; this.singletonChannelListener = singletonChannelListener; this.demuxer = demuxer; //if this throws, the calling code paths will abort the connection, so we only need to //call AbortConnection if BeginCompletePramble completes asynchronously. if (BeginCompletePreamble()) { Complete(true); } }
void OnSingletonPreambleKnown(ServerSingletonPreambleConnectionReader serverSingletonPreambleReader) { lock (ThisLock) { if (isDisposed) { return; } connectionReaders.Remove(serverSingletonPreambleReader); } ISingletonChannelListener singletonChannelListener = singletonPreambleCallback(serverSingletonPreambleReader); Fx.Assert(singletonChannelListener != null, "singletonPreambleCallback must return a listener or send a Fault/throw"); // transfer ownership of the connection from the preamble reader to the message handler #pragma warning disable CS4014 // Because this call is not awaited, execution of the current method continues before the call is completed CompleteSingletonPreambleAsync(serverSingletonPreambleReader, singletonChannelListener); #pragma warning restore CS4014 // Because this call is not awaited, execution of the current method continues before the call is completed }
IAsyncResult BeginCompleteSingletonPreamble( ServerSingletonPreambleConnectionReader serverSingletonPreambleReader, ISingletonChannelListener singletonChannelListener, AsyncCallback callback, object state) { return new CompleteSingletonPreambleAndDispatchRequestAsyncResult(serverSingletonPreambleReader, singletonChannelListener, this, callback, state); }
async Task CompleteSingletonPreambleAsync(ServerSingletonPreambleConnectionReader serverSingletonPreambleReader, ISingletonChannelListener singletonChannelListener) { var timeoutHelper = new TimeoutHelper(singletonChannelListener.ReceiveTimeout); IConnection upgradedConnection = await serverSingletonPreambleReader.CompletePreambleAsync(singletonChannelListener.ReceiveTimeout); ServerSingletonConnectionReader singletonReader = new ServerSingletonConnectionReader(serverSingletonPreambleReader, upgradedConnection, this); //singletonReader doesn't have async version of ReceiveRequest, so just call the sync method for now. RequestContext requestContext = await singletonReader.ReceiveRequestAsync(timeoutHelper.GetCancellationToken()); singletonChannelListener.ReceiveRequest(requestContext, serverSingletonPreambleReader.ConnectionDequeuedCallback, true); }