/// <summary>
        /// UDHI 长短信拆分
        /// </summary>
        /// <param name="message">短信</param>
        /// <param name="content">内容</param>
        /// <param name="no">第N条</param>
        /// <param name="count">共M条</param>
        /// <param name="udhiId">本条消息唯一标识</param>
        /// <param name="limit">字数限制(默认140)</param>
        /// <param name="headLength">udhi头长度(默认为6)</param>
        protected virtual void Udhi(ISubmitMessage message, byte[] content, int no, int count, byte udhiId, int limit = 140, int headLength = 6)
        {
            if (count == 1)
            {
                message.MsgContent = content;
            }
            else // 长短信
            {
                var index = no * limit - headLength;

                var length = Math.Min(limit - headLength, content.Length - index);

                message.TpUdhi        = 1;
                message.MsgContent    = new byte[length + headLength];
                message.MsgContent[0] = 0x05;
                message.MsgContent[2] = 0x03;
                message.MsgContent[3] = udhiId;
                message.MsgContent[4] = (byte)count;
                message.MsgContent[5] = (byte)(no + 1);

                if (no == 0)
                {
                    Array.Copy(content, 0, message.MsgContent, 6, length);
                }
                else
                {
                    Array.Copy(content, index, message.MsgContent, 6, length);
                }
            }

            message.MsgLength = (uint)message.MsgContent.Length;
        }
Beispiel #2
0
        /// <summary>
        /// UDHI 长短信拆分
        /// </summary>
        /// <param name="message">短信</param>
        /// <param name="content">内容</param>
        /// <param name="no">第N条</param>
        /// <param name="count">共M条</param>
        /// <param name="udhiId">本条消息唯一标识</param>
        /// <param name="limit">字数限制(默认140)</param>
        /// <param name="headLength">udhi头长度(默认为6)</param>
        protected virtual void Udhi(ISubmitMessage message, byte[] content, int no, int count, byte[] udhiId, int limit = 140, int headLength = 6)
        {
            if (count == 1)
            {
                message.MsgContent = content;
            }
            else // 长短信
            {
                var index = no * (limit - headLength);

                var length = Math.Min(limit - headLength, content.Length - index);
                message.TpUdhi     = 1;
                message.MsgContent = new byte[length + headLength];
                //  6位协议头格式:05 00 03 XX MM NN
                //message.MsgContent[0] = 0x05;
                //message.MsgContent[2] = 0x03;
                //message.MsgContent[3] = udhiId;
                //message.MsgContent[4] = (byte)count;
                //message.MsgContent[5] = (byte)(no + 1);
                //使用 7 位的协议头格式:06 08 04 XX XX MM NN
                message.MsgContent[0] = 0x06;
                message.MsgContent[1] = 0x08;
                message.MsgContent[2] = 0x04;
                message.MsgContent[3] = udhiId[0];          //C#  字节存储是小端顺序
                message.MsgContent[4] = udhiId[1];
                message.MsgContent[5] = (byte)count;
                message.MsgContent[6] = (byte)(no + 1);
                //if (no == 0)
                //{
                //    Array.Copy(content, 0, message.MsgContent, 6, length);
                //}
                //else
                //{
                //    Array.Copy(content, index, message.MsgContent, 6, length);
                //}
                Array.Copy(content, index, message.MsgContent, headLength, length);
                //var tmp = new byte[length];
                //Array.Copy(content, index, tmp, 0, length);
                //var str = SmsMessage.Ucs2Encoding.GetString(tmp);
                //_log.InfoFormat("发送信息:{0}", str);
            }
            message.MsgLength = (uint)message.MsgContent.Length;
        }