示例#1
0
 void Events_MessageDeliveryReportEvent(string responseMessageId, Common.MessageStatus status)
 {
     if (status == Common.MessageStatus.delivered_ACK_received)
     {
         deliveredMessagesIdList.Add(responseMessageId);
     }
 }
示例#2
0
        /// <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);
            }
        }
示例#3
0
        /// <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);
            }
        }
示例#4
0
        /// <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);
        }