private void DispatchEvent(SenderEventHandler handler, SenderEventArgs eventArgs) { if (handler != null) { handler.Invoke(this, eventArgs); } }
public void WaitForEvent(SenderEventArgs.SenderEventType eventType, ushort numberOfTimes) { switch (eventType) { case SenderEventArgs.SenderEventType.Attempted: _messageAttemptedSynchronizer.Wait(numberOfTimes); break; case SenderEventArgs.SenderEventType.Succeeded: _messageSucceededSynchronizer.Wait(numberOfTimes); break; case SenderEventArgs.SenderEventType.Failed: _messageFailedSynchronizer.Wait(numberOfTimes); break; } }
private void HasResponse(IAsyncResult result) { try { _client.EndSend(result); SenderEnvelope envelope = null; lock (_syncLock) { envelope = _sendQueue.Dequeue(); } _retryTimer.Reset(); var eventArgs = new SenderEventArgs(envelope, SenderEventArgs.SenderEventType.Succeeded); DispatchEvent(MessageSucceeded, eventArgs); } catch (Exception ex) { Status = SenderStatus.WaitForRetry; SenderEnvelope envelope = _sendQueue.Peek(); var eventArgs = new SenderEventArgs(envelope, SenderEventArgs.SenderEventType.Failed); eventArgs.ErrorMessage = ex.Message; DispatchEvent(MessageFailed, eventArgs); _retryTimer.Wait(); } TryToSendFirstMessageInQueue(); }
private void TryToSendFirstMessageInQueue() { if (_sendQueue.Count > 0) { SenderEnvelope envelope = _sendQueue.Peek(); envelope.Attempts.Add(DateTime.Now); Status = SenderStatus.Sending; _client.BeginSend(envelope.Message, new AsyncCallback(HasResponse)); var eventArgs = new SenderEventArgs(envelope, SenderEventArgs.SenderEventType.Attempted); DispatchEvent(MessageAttempted, eventArgs); } else { Status = SenderStatus.Idle; } }