void Events_MessageDeliveryReportEvent(string responseMessageId, Common.MessageStatus status) { if (status == Common.MessageStatus.delivered_ACK_received) { deliveredMessagesIdList.Add(responseMessageId); } }
/// <summary> /// Event which indicates that a delivery report was received for a message which was sent before /// </summary> /// <param name="responseMessageId">Remote system message id</param> /// <param name="status">New status</param> public void LogMessageDeliverReportEvent(string responseMessageId, Common.MessageStatus status) { LogMessageDeliverReportEventHandler handler = MessageDeliveryReportEvent; if (handler != null) { handler(responseMessageId, status); } }
/// <summary> /// Event which indicated that message status was changed /// </summary> /// <param name="messageId">Internal message id</param> /// <param name="status">New status</param> /// <param name="responseMessageId">If not empty contains MessageId returned by remote server</param> public void LogMessageChangeStatusEvent(int messageId, Common.MessageStatus status, string responseMessageId = "") { LogMessageChangeStatusEventHandler handler = MessageStatusEvent; if (handler != null) { handler(messageId, status, responseMessageId); } }
/// <summary> /// Sends delivery report of the message /// </summary> /// <param name="messageId"></param> /// <param name="status"></param> public void SubmitDeliveryReport(string messageId, Common.MessageStatus status) { string pdu; string messageStatus; switch (status) { case Common.MessageStatus.ACK_expired: case Common.MessageStatus.delivered_ACK_received: case Common.MessageStatus.duplicate_ACK_detected: case Common.MessageStatus.received_routed: case Common.MessageStatus.sent: case Common.MessageStatus.submitted_waiting_for_ACK: messageStatus = "DELIVRD"; break; case Common.MessageStatus.queued: case Common.MessageStatus.received_waiting_to_be_processed: case Common.MessageStatus.scheduled: messageStatus = "ACCEPTD"; break; case Common.MessageStatus.generic_error: case Common.MessageStatus.locked_by_system: case Common.MessageStatus.NACK_received: case Common.MessageStatus.rejected: case Common.MessageStatus.out_of_balance: messageStatus = "REJECTD"; break; case Common.MessageStatus.message_undeliverable: case Common.MessageStatus.received_route_failure: case Common.MessageStatus.received_no_route_specified: case Common.MessageStatus.no_channel_can_handle_message: messageStatus = "UNDELIV"; break; case Common.MessageStatus.unknown_recipient: messageStatus = "UNKNOWN"; break; default: messageStatus = "DELIVRD"; break; } var deliver_sm = new DeliverSm(Events); deliver_sm.sequence_number = sequence_number; deliver_sm.Recipient = ""; deliver_sm.Sender = ""; deliver_sm.BodyFormat = "ascii"; deliver_sm.ESMClass = 4; deliver_sm.IsDeliveryReport = true; var short_message = new StringBuilder(); short_message.Append("id:" + messageId); short_message.Append(" sub:001"); if (messageStatus == "DELIVRD") { short_message.Append(" dlvrd:001"); } else { short_message.Append(" dlvrd:000"); } short_message.Append(" submit date:" + DateTime.Now.ToString("yyMMddHHmm")); short_message.Append(" done date:" + DateTime.Now.ToString("yyMMddHHmm")); short_message.Append(" stat:" + messageStatus); short_message.Append(" err:0"); short_message.Append(" text:"); deliver_sm.Body = short_message.ToString(); pdu = deliver_sm.EncodeM()[0]; Events.LogChannelEvent(channel_name, "Sending [deliver_sm] report", debug ? pdu : ""); SendPDU(pdu); }