private void MessageArrived(IAsyncResult result) { Envelope envelope = null; try { envelope = _client.EndReceive(result); if (envelope != null) { var receivedEventArgs = new SubscriberEventArgs(envelope, SubscriberEventArgs.SubscriberEventType.Received); DispatchEvent(EnvelopeReceived, receivedEventArgs); _consumer.ConsumeEnvelope(envelope); _client.Complete(envelope); var completedEventArgs = new SubscriberEventArgs(envelope, SubscriberEventArgs.SubscriberEventType.Consumed); DispatchEvent(EnvelopeConsumed, completedEventArgs); } } catch(TimeoutException) { // just reconnect } catch(Exception ex) { var eventArgs = new SubscriberEventArgs(envelope, SubscriberEventArgs.SubscriberEventType.Failed); eventArgs.ErrorMessage = ex.Message; DispatchEvent(EnvelopeFailed, eventArgs); } Subscribe(); }
private void DispatchEvent(SubscriberEventHandler handler, SubscriberEventArgs eventArgs) { if (handler != null) { handler.Invoke(this, eventArgs); } }