private void OnServiceClientMessageReceived(object sender, PublishedEventArgs e) { if (e.Message == null) { return; } var messageType = e.Message.GetType(); if (!this.messageHandlers.ContainsKey(messageType)) { return; } var handlers = this.messageHandlers[messageType]; foreach (var handler in handlers) { handler.Invoke(e.Message); } }
/// <summary> /// Called when a new command message is published. /// </summary> /// <param name="sender">The sender.</param> /// <param name="e">The <see cref="PublishedEventArgs" /> instance containing the event data.</param> private void OnMessagePublished(object sender, PublishedEventArgs e) { var messageType = e.Message.GetType(); IEnumerable <IServerMessageHandler> handlers; try { handlers = this.messageHandlerResolver.GetHandlers(e.Message, this.response); } catch (ArgumentException ex) { if (ex.Message != null && ex.Message.Contains("Could not locate any server message handlers")) { return; } throw; } catch (OutOfMemoryException ome) { this.log.Error(ome); this.log.Error(Environment.StackTrace); //throw; testing return; } catch (Exception ex) { this.log.Error(ex); this.log.Error(Environment.StackTrace); //throw; testing return; } var isMessageHandled = false; foreach (var handler in handlers) { try { handler.Handle(e.Message, this.response); isMessageHandled = true; } catch (Exception exception) { this.log.Error($"{nameof(handler)} has an error in the handle function when receiving a WCF message. ", exception); } } if (!isMessageHandled) { return; } try { var messageTypeString = messageType.ToString(); if (!this.messageSubscribers.ContainsKey(messageTypeString)) { return; } lock (this.padlock) { var subscribers = this.messageSubscribers[messageTypeString]; var unsubscribers = new List <ICommandCallbackContract>(); foreach (var subscriber in subscribers) { try { subscriber.HandleSubscribe(e.Message); } catch (CommunicationObjectAbortedException ee) { this.log.Debug(ee.ToString()); unsubscribers.Add(subscriber); } } foreach (var unsubscriber in unsubscribers) { subscribers.Remove(unsubscriber); } } } catch (Exception ex) { this.log.Error(ex); } }