/// <summary> /// Deserializes a ControlMessage from a NGRIDControllerMessage. /// </summary> /// <param name="controllerMessage">NGRIDControllerMessage that includes ControlMessage</param> /// <returns>Deserialized ControlMessage object.</returns> private static ControlMessage DeserializeControlMessage(NGRIDControllerMessage controllerMessage) { return(NGRIDSerializationHelper.DeserializeFromByteArray( () => ControlMessageFactory.CreateMessageByTypeId(controllerMessage.ControllerMessageTypeId), controllerMessage.MessageData)); }
/// <summary> /// Handles MessageReceived event. /// All messages received from all controllers comes to this method. /// </summary> /// <param name="sender">Sender object</param> /// <param name="e">Event arguments</param> private void MDSController_MessageReceived(object sender, MessageReceivedFromRemoteApplicationEventArgs e) { try { //Response to Ping messages if ((e.Message.MessageTypeId == MDSMessageFactory.MessageTypeIdMDSPingMessage) && string.IsNullOrEmpty(e.Message.RepliedMessageId)) { //Reply ping message SendMessage(new MDSPingMessage { RepliedMessageId = e.Message.MessageId }, e.Communicator); return; } //Do not process messages other than MDSControllerMessage if (e.Message.MessageTypeId != MDSMessageFactory.MessageTypeIdMDSControllerMessage) { return; } //Cast message to MDSControllerMessage var controllerMessage = e.Message as MDSControllerMessage; if (controllerMessage == null) { return; } //Create (deserialize) ControlMessage from MessageData of controllerMessage object var controlMessage = MDSSerializationHelper.DeserializeFromByteArray( () => ControlMessageFactory.CreateMessageByTypeId(controllerMessage.ControllerMessageTypeId), controllerMessage.MessageData); //Process message ProcessControllerMessage(e.Communicator, controllerMessage, controlMessage); } catch (Exception ex) { Logger.Warn(ex.Message, ex); } }