static void OnPollTimeout(object state) { MakeConnectionRequestContext thisPtr = (MakeConnectionRequestContext)state; thisPtr.pollTimer = null; thisPtr.SendAck(); }
public TryReplyAsyncResult(Message message, TimeSpan timeout, MakeConnectionRequestContext context, AsyncCallback callback, object state) : base(callback, state) { this.message = message; this.timeoutHelper = new TimeoutHelper(timeout); this.context = context; if (this.context.IsMakeConnectionPollingMessage || this.message.Headers.RelatesTo == this.context.RequestMesssageId) { this.retval = this.context.TrySetResponded(); if (this.retval) { IAsyncResult result = this.context.BeginReply(this.message, this.timeoutHelper.RemainingTime(), onReplyCompleted, this); if (!result.CompletedSynchronously) { return; } OnReplyCompletedCore(result); } } else { IAsyncResult result = this.context.BeginSendAck(onSendResponseCompleted, this); if (!result.CompletedSynchronously) { return; } OnSendResponseCompletedCore(result); } base.Complete(true); }
bool TryGetContextForMessageId(UniqueId messageId, out MakeConnectionRequestContext context) { lock (this.contextDictionary) { return(this.contextDictionary.TryGetValue(messageId, out context)); } }
static void OnFaultCompleted(IAsyncResult result) { if (result.CompletedSynchronously) { return; } MakeConnectionRequestContext thisPtr = (MakeConnectionRequestContext)result.AsyncState; thisPtr.OnFaultCompletedCore(result); }
public void RemoveContext(MakeConnectionRequestContext context) { if (context.RequestMesssageId != null) { lock (this.contextDictionary) { if (this.contextDictionary.ContainsKey(context.RequestMesssageId)) { this.contextDictionary.Remove(context.RequestMesssageId); } } } }
public void AddContext(MakeConnectionRequestContext context) { if (context.RequestMesssageId != null) { lock (this.contextDictionary) { if (!this.contextDictionary.ContainsKey(context.RequestMesssageId)) { this.contextDictionary.Add(context.RequestMesssageId, context); } } } }
public void AddContext(MakeConnectionRequestContext context) { if (context.RequestMesssageId != null) { lock (this.contextDictionary) { if (!this.contextDictionary.ContainsKey(context.RequestMesssageId)) { this.contextDictionary.Add(context.RequestMesssageId, context); } } } }
public void EnqueueAndDispatchContext(MakeConnectionRequestContext context) { MakeConnectionRequestContext oldContext; if (context.IsMakeConnectionPollingMessage && TryDequeue(out oldContext)) { ThreadPool.QueueUserWorkItem(onReplyAndEnqueueLater, new EnqueueData(this, oldContext, context)); } else { this.contexts.EnqueueAndDispatch(context, new Action(context.OnDequeue), false); } }
bool OnContextDequeueCompletedCore(IAsyncResult result) { this.context = this.dispatcher.contexts.EndDequeue(result); IAsyncResult replyResult = context.BeginTryReply(this.message, this.timeoutHelper.RemainingTime(), onReplyCompleted, this); if (replyResult.CompletedSynchronously) { return(OnReplyCompletedCore(replyResult)); } return(false); }
public SendAckAsyncResult(MakeConnectionRequestContext context, AsyncCallback callback, object state) : base(callback, state) { this.context = context; if (this.context.TrySetResponded()) { IAsyncResult result = this.context.BeginReply(null, onReplyCompleted, this); if (!result.CompletedSynchronously) { return; } OnReplyCompletedCore(result); } base.Complete(true); }
void OnReceiveCompletedCore(IAsyncResult result) { while (true) { MakeConnectionRequestContext context = this.EndReceiveRequest(result); if (context == null) { this.Shutdown(); } else { Message requestMessage = context.RequestMessage; bool enqueued = false; if (!context.IsMakeConnectionPollingMessage) { // this wasn't a poll, so we can dispatch the message EnsureAddress(requestMessage); enqueued = this.EnqueueWithoutDispatch(requestMessage, null); } // this.Dispatch jumps threads, so it is ok to dispatch the message // before dispatching or acknowledging the context if (enqueued) { this.Dispatch(); } context.DispatchOrAcknowledge(); result = this.BeginReceiveRequest(onReceiveCompleted, this); } if (context == null || !result.CompletedSynchronously) { return; } } }
bool TryDequeue(out MakeConnectionRequestContext context) { return(this.contexts.Dequeue(TimeSpan.Zero, out context)); }
bool OnContextDequeueCompletedCore(IAsyncResult result) { this.context = this.dispatcher.contexts.EndDequeue(result); IAsyncResult replyResult = context.BeginTryReply(this.message, this.timeoutHelper.RemainingTime(), onReplyCompleted, this); if (replyResult.CompletedSynchronously) { return OnReplyCompletedCore(replyResult); } return false; }
bool TryGetContextForMessageId(UniqueId messageId, out MakeConnectionRequestContext context) { lock (this.contextDictionary) { return this.contextDictionary.TryGetValue(messageId, out context); } }
public EnqueueData(MakeConnectionDispatcher dispatcher, MakeConnectionRequestContext oldContext, MakeConnectionRequestContext newContext) { this.Dispatcher = dispatcher; this.OldContext = oldContext; this.NewContext = newContext; }
public void EnqueueAndDispatchContext(MakeConnectionRequestContext context) { MakeConnectionRequestContext oldContext; if (context.IsMakeConnectionPollingMessage && TryDequeue(out oldContext)) { ThreadPool.QueueUserWorkItem(onReplyAndEnqueueLater, new EnqueueData(this, oldContext, context)); } else { this.contexts.EnqueueAndDispatch(context, new Action(context.OnDequeue), false); } }
public SendAckAsyncResult(MakeConnectionRequestContext context, AsyncCallback callback, object state) : base(callback, state) { this.context = context; if (this.context.TrySetResponded()) { IAsyncResult result = this.context.BeginReply(null, onReplyCompleted, this); if (!result.CompletedSynchronously) { return; } OnReplyCompletedCore(result); } base.Complete(true); }
public TryReplyAsyncResult(Message message, TimeSpan timeout, MakeConnectionRequestContext context, AsyncCallback callback, object state) : base(callback, state) { this.message = message; this.timeoutHelper = new TimeoutHelper(timeout); this.context = context; if (this.context.IsMakeConnectionPollingMessage || this.message.Headers.RelatesTo == this.context.RequestMesssageId) { this.retval = this.context.TrySetResponded(); if (this.retval) { IAsyncResult result = this.context.BeginReply(this.message, this.timeoutHelper.RemainingTime(), onReplyCompleted, this); if (!result.CompletedSynchronously) { return; } OnReplyCompletedCore(result); } } else { IAsyncResult result = this.context.BeginSendAck(onSendResponseCompleted, this); if (!result.CompletedSynchronously) { return; } OnSendResponseCompletedCore(result); } base.Complete(true); }
bool TryDequeue(out MakeConnectionRequestContext context) { return this.contexts.Dequeue(TimeSpan.Zero, out context); }
public EnqueueData(MakeConnectionDispatcher dispatcher, MakeConnectionRequestContext oldContext, MakeConnectionRequestContext newContext) { this.Dispatcher = dispatcher; this.OldContext = oldContext; this.NewContext = newContext; }
public void RemoveContext(MakeConnectionRequestContext context) { if (context.RequestMesssageId != null) { lock (this.contextDictionary) { if (this.contextDictionary.ContainsKey(context.RequestMesssageId)) { this.contextDictionary.Remove(context.RequestMesssageId); } } } }