/// <summary> /// Gets waiting messages for an application. /// </summary> /// <param name="nextServer">Next server name</param> /// <param name="destApplication">Destination application name</param> /// <param name="minId">Minimum Id (as start Id)</param> /// <param name="maxCount">Max record count to get</param> /// <returns>Records gotten from database.</returns> public List <MDSMessageRecord> GetWaitingMessagesOfApplication(string nextServer, string destApplication, int minId, int maxCount) { var recordsTable = GetTable( "SELECT TOP " + maxCount + " * FROM Messages WHERE NextServer = @NextServer AND DestApplication = @DestApplication AND Id >= @Id ORDER BY Id ASC", new SqlParameter("@NextServer", nextServer), new SqlParameter("@DestApplication", destApplication), new SqlParameter("@Id", minId) ); var recordsList = new List <MDSMessageRecord>(recordsTable.Rows.Count); foreach (DataRow recordRow in recordsTable.Rows) { recordsList.Add( new MDSMessageRecord { Id = Convert.ToInt32(recordRow["Id"]), DestApplication = recordRow["DestApplication"] as string, DestServer = recordRow["DestServer"] as string, NextServer = recordRow["NextServer"] as string, Message = MDSSerializationHelper.DeserializeFromByteArray(() => new MDSDataTransferMessage(), (byte[])recordRow["MessageData"]), MessageId = recordRow["MessageId"] as string, RecordDate = (DateTime)recordRow["RecordDate"] }); } return(recordsList); }
/// <summary> /// Gets waiting messages for an MDS server. /// </summary> /// <param name="nextServer">Next server name</param> /// <param name="minId">Minimum Id (as start Id)</param> /// <param name="maxCount">Max record count to get</param> /// <returns>Records gotten from database.</returns> public List <MDSMessageRecord> GetWaitingMessagesOfServer(string nextServer, int minId, int maxCount) { DataTable recordsTable; lock (_syncObj) { recordsTable = GetTable( "SELECT * FROM messages WHERE NextServer = @NextServer AND Id >= @Id ORDER BY Id ASC Limit @LimitValue", new SQLiteParameter("@NextServer", nextServer), new SQLiteParameter("@Id", minId), new SQLiteParameter("@LimitValue", maxCount) ); } var recordsList = new List <MDSMessageRecord>(recordsTable.Rows.Count); foreach (DataRow recordRow in recordsTable.Rows) { recordsList.Add( new MDSMessageRecord { Id = Convert.ToInt32(recordRow["Id"]), DestApplication = recordRow["DestApplication"] as string, DestServer = recordRow["DestServer"] as string, NextServer = recordRow["NextServer"] as string, Message = MDSSerializationHelper.DeserializeFromByteArray(() => new MDSDataTransferMessage(), (byte[])recordRow["MessageData"]), MessageId = recordRow["MessageId"] as string, RecordDate = (DateTime)recordRow["RecordDate"] }); } return(recordsList); }
/// <summary> /// Deserializes a ControlMessage from a MDSControllerMessage. /// </summary> /// <param name="controllerMessage">MDSControllerMessage that includes ControlMessage</param> /// <returns>Deserialized ControlMessage object.</returns> private static ControlMessage DeserializeControlMessage(MDSControllerMessage controllerMessage) { return(MDSSerializationHelper.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); } }
/// <summary> /// Makes web service call, receives result and raises MessageReceived event. /// </summary> /// <param name="message"></param> private void SendMessageToWebService(MDSDataTransferMessage message) { using (var appService = new MDSAppService()) { appService.Url = _url; var responseMessageBytes = appService.ReceiveMDSMessage(MDSSerializationHelper.SerializeToByteArray(message)); if (responseMessageBytes == null) { throw new MDSException("Response byte array from web service call is null."); } var responseMessage = MDSSerializationHelper.DeserializeFromByteArray(() => new MDSDataTransferResponseMessage(), responseMessageBytes); if (responseMessage.Result != null) { OnMessageReceived(responseMessage.Result); } if (responseMessage.Message != null) { OnMessageReceived(responseMessage.Message); } } }
/// <summary> /// Deserializes an incoming message for Web Service from MDS server. /// </summary> /// <param name="bytesOfMessage">Message as byte array</param> /// <returns>Deserialized message</returns> public static IWebServiceIncomingMessage DeserializeMessage(byte[] bytesOfMessage) { var dataMessage = MDSSerializationHelper.DeserializeFromByteArray(() => new MDSDataTransferMessage(), bytesOfMessage); return(new IncomingDataMessage(dataMessage)); }