/// <summary> /// This event handles processing messages when a message is added to queue (_incomingMessageQueue). /// </summary> /// <param name="sender">Reference to message queue</param> /// <param name="e">Event arguments</param> private void IncomingMessageQueue_ProcessItem(object sender, ProcessQueueItemEventArgs <MDSMessage> e) { //Process only MDSDataTransferMessage objects. if (e.ProcessItem.MessageTypeId != MDSMessageFactory.MessageTypeIdMDSDataTransferMessage) { return; } //Create IncomingDataMessage from MDSDataTransferMessage var dataMessage = new IncomingDataMessage(this, e.ProcessItem as MDSDataTransferMessage); try { //Check if client application registered to MessageReceived event. if (MessageReceived == null) { dataMessage.Reject("Client application did not registered to MessageReceived event to receive messages."); return; } //Raise MessageReceived event MessageReceived(this, new MessageReceivedEventArgs { Message = dataMessage }); //Check if client application acknowledged or rejected message if (dataMessage.AckState != MessageAckStates.WaitingForAck) { return; } //Check if auto acknowledge is active if (!AutoAcknowledgeMessages) { dataMessage.Reject("Client application did not acknowledged or rejected message."); return; } //Auto acknowledge message dataMessage.Acknowledge(); } catch { try { dataMessage.Reject("An unhandled exception occured during processing message by client application."); } catch (Exception ex) { Logger.Warn(ex.Message, ex); } } }
/// <summary> /// Sends the message and waits for an incoming message for that message. /// MDS can be used for Request/Response type messaging with this method. /// </summary> /// <param name="timeoutMilliseconds">Timeout to get response message as milliseconds</param> /// <returns>Response message</returns> public IIncomingMessage SendAndGetResponse(int timeoutMilliseconds) { var response = _client.SendAndWaitForReply( this, MDSMessageFactory.MessageTypeIdMDSDataTransferMessage, timeoutMilliseconds ) as MDSDataTransferMessage; var message = new IncomingDataMessage(_client, response); if (_client.AutoAcknowledgeMessages) { message.Acknowledge(); } return(message); }
/// <summary> /// Sends the message and waits for an incoming message for that message. /// NGRID can be used for Request/Response type messaging with this method. /// </summary> /// <param name="timeoutMilliseconds">Timeout to get response message as milliseconds</param> /// <returns>Response message</returns> public IIncomingMessage SendAndGetResponse(int timeoutMilliseconds) { var response = _client.SendAndWaitForReply( this, NGRIDMessageFactory.MessageTypeIdNGRIDDataTransferMessage, timeoutMilliseconds ) as NGRIDDataTransferMessage; var message = new IncomingDataMessage(_client, response); if (_client.AutoAcknowledgeMessages) { message.Acknowledge(); } return message; }
/// <summary> /// This event handles processing messages when a message is added to queue (_incomingMessageQueue). /// </summary> /// <param name="sender">Reference to message queue</param> /// <param name="e">Event arguments</param> private void IncomingMessageQueue_ProcessItem(object sender, ProcessQueueItemEventArgs<NGRIDMessage> e) { //Process only NGRIDDataTransferMessage objects. if (e.ProcessItem.MessageTypeId != NGRIDMessageFactory.MessageTypeIdNGRIDDataTransferMessage) { return; } //Create IncomingDataMessage from NGRIDDataTransferMessage var dataMessage = new IncomingDataMessage(this, e.ProcessItem as NGRIDDataTransferMessage); try { //Check if client application registered to MessageReceived event. if (MessageReceived == null) { dataMessage.Reject("Client application did not registered to MessageReceived event to receive messages."); return; } //Raise MessageReceived event MessageReceived(this, new MessageReceivedEventArgs { Message = dataMessage }); //Check if client application acknowledged or rejected message if (dataMessage.AckState != MessageAckStates.WaitingForAck) { return; } //Check if auto acknowledge is active if (!AutoAcknowledgeMessages) { dataMessage.Reject("Client application did not acknowledged or rejected message."); return; } //Auto acknowledge message dataMessage.Acknowledge(); } catch { try { dataMessage.Reject("An unhandled exception occured during processing message by client application."); } catch (Exception ex) { Logger.Warn(ex.Message, ex); } } }