⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sgip.cs

📁 联通的SGIP发送代码
💻 CS
📖 第 1 页 / 共 5 页
字号:
                return _TP_pid;
            }
            set
            {
                _TP_pid = value;
            }
        }

        /// <summary>
        /// GSM协议类型。详细解释请参考GSM03.40中的9.2.3.23,仅使用1位,右对齐
        /// </summary>
        public byte TP_udhi
        {
            get
            {
                return _TP_udhi;
            }
            set
            {
                _TP_udhi = value;
            }
        }

        /// <summary>
        /// 短消息的编码格式。0:纯ASCII字符串 3:写卡操作 4:二进制编码 8:UCS2编码 15: GBK编码 其它参见GSM3.38第4节:SMS Data Coding Scheme
        /// </summary>
        public byte MessageCoding
        {
            get
            {
                return _messageCoding;
            }
            set
            {
                _messageCoding = value;
            }
        }

        /// <summary>
        /// 信息类型:0-短消息信息,其它:待定
        /// </summary>
        public byte MessageType
        {
            get
            {
                return _messageType;
            }
            set
            {
                _messageType = value;
            }
        }

        /// <summary>
        /// 默认为140,短消息的长度
        /// </summary>
        public uint MessageLength
        {
            get
            {
                return (uint)IPAddress.NetworkToHostOrder((int)_messageLength);
            }
            set
            {
                _messageLength = (uint)IPAddress.HostToNetworkOrder((int)value);
            }
        }

        /// <summary>
        /// 短消息的内容
        /// </summary>
        public string MessageContent
        {
            get { return _messageContent; }
            set
            {
                _messageContent = value;
            }
        }

        /// <summary>
        /// 保留,最多8个字节
        /// </summary>
        public byte[] Reserved
        {
            get { return _reserved; }
            set
            {
                SgipHelper.CheckMaxBytes(value, 8);
                _reserved = value;
            }
        }

     #endregion

        public override byte[] GetBytes()
        {
            byte[] result = new byte[this.GetLength()];
            int nIndex = 0;
            Encoding.ASCII.GetBytes(_spNumber).CopyTo(result, nIndex);
            nIndex += 21;
            Encoding.ASCII.GetBytes(_chargeNumber).CopyTo(result, nIndex);
            nIndex += 21;
            result[nIndex++] = _userCount;
            for (int i = 0; i < UserCount; i++) //注意:UserCount是主机顺序的,而_userCount是网络序列的!
            {
                Encoding.ASCII.GetBytes(_userNumber[i]).CopyTo(result, nIndex);
                nIndex += 21;
            }
            Encoding.ASCII.GetBytes(_corpID).CopyTo(result, nIndex);
            nIndex += 5;
            Encoding.ASCII.GetBytes(_serviceType).CopyTo(result, nIndex);
            nIndex += 10;
            result[nIndex++] = _feeType;
            Encoding.ASCII.GetBytes(_feeValue).CopyTo(result, nIndex);
            nIndex += 6;
            Encoding.ASCII.GetBytes(_givenValue).CopyTo(result, nIndex); //_givenValue
            nIndex += 6;
            result[nIndex++] = _agentFlag;
            result[nIndex++] = _morelatetoMTFlag;
            result[nIndex++] = _priority;
            Encoding.ASCII.GetBytes(_expireTime).CopyTo(result, nIndex); 
            nIndex += 16;
            Encoding.ASCII.GetBytes(_scheduleTime).CopyTo(result, nIndex); 
            nIndex += 16;
            result[nIndex++] = _reportFlag;
            result[nIndex++] = _TP_pid;
            result[nIndex++] = _TP_udhi;
            result[nIndex++] = _messageCoding;
            result[nIndex++] = _messageType;
            BitConverter.GetBytes(_messageLength).CopyTo(result, nIndex);
            nIndex += 4;
            Encoding.ASCII.GetBytes(_messageContent).CopyTo(result, nIndex); 
            nIndex += (int)MessageLength; //注意, MessageLength属性才是主机顺序
            _reserved.CopyTo(result, nIndex);
            return result;
        }

        public override int GetLength()
        {
            return (int)(21 * UserCount + MessageLength + 123);
        }

        internal override void ReadFromBytes(byte[] buffer, int startIndex)
        {
            int nIndex = startIndex;
            _spNumber = SgipHelper.GetASCIIString(buffer, nIndex, 21);
            nIndex += 21;
            _chargeNumber = SgipHelper.GetASCIIString(buffer, nIndex, 21);
            nIndex += 21;

            _userCount = buffer[nIndex++];
            _userNumber.Clear();
            for (int i = 0; i < UserCount; i++)
            {
                _userNumber.Add(SgipHelper.GetASCIIString(buffer, nIndex, 21));
                nIndex += 21;
            }

            _corpID = SgipHelper.GetASCIIString(buffer, nIndex, 5);
            nIndex += 5;
            _serviceType = SgipHelper.GetASCIIString(buffer, nIndex, 10);
            nIndex += 10;
            _feeType = buffer[nIndex++];
            _feeValue = SgipHelper.GetASCIIString(buffer, nIndex, 6);
            nIndex += 6;
            _givenValue = SgipHelper.GetASCIIString(buffer, nIndex, 6);
            nIndex += 6;
            _agentFlag = buffer[nIndex++];
            _morelatetoMTFlag = buffer[nIndex++];
            _priority = buffer[nIndex++];
            _expireTime = SgipHelper.GetASCIIString(buffer, nIndex, 16);
            nIndex += 16;
            _scheduleTime = SgipHelper.GetASCIIString(buffer, nIndex, 16);
            nIndex += 16;

            _reportFlag = buffer[nIndex++];    
            _TP_pid = buffer[nIndex++];
            _TP_udhi = buffer[nIndex++];
            _messageCoding = buffer[nIndex++];
            _messageType = buffer[nIndex++];
            _messageLength = BitConverter.ToUInt32(buffer, nIndex);
            nIndex += 4;
            _messageContent = SgipHelper.GetASCIIString(buffer, nIndex, (int)MessageLength); //注意, MessageLength属性才是主机顺序的
            nIndex += (int)MessageLength;
            Buffer.BlockCopy(buffer, nIndex, _reserved, 0, 8);
        }
    }

    public class Submit_Resp : ResponseBody
    {
        public override uint GetCommandID()
        {
            return Command.SGIP_SUBMIT_RESP;
        }
    }

    public class Deliver: Body
    {
    #region private member's
        private string _userNumber = ""; //21, 发送短消息的用户手机号,手机号码前加“86”国别标志
        private string _spNumber = ""; //21, SP的接入号码
        private byte _TP_pid; //1, GSM协议类型。详细解释请参考GSM03.40中的9.2.3.9
        private byte _TP_udhi; //1, GSM协议类型。详细解释请参考GSM03.40中的9.2.3.23,仅使用1位,右对齐
        private byte _messageCoding; //1,  短消息的编码格式。0:纯ASCII字符串 3:写卡操作 4:二进制编码 8:UCS2编码 15: GBK编码 其它参见GSM3.38第4节:SMS Data Coding Scheme
        private uint _messageLength; //4, 短消息的长度
        private string _messageContent = ""; //_messageLength, 短消息的内容
        private byte[] _reserved = new byte[8]; //保留,扩展用
    #endregion

    #region  public property's

        /// <summary>
        /// 发送短消息的用户手机号,手机号码前加“86”国别标志
        /// </summary>
        public string UserNumber
        {
            get { return _userNumber; }
            set
            {
                SgipHelper.CheckMaxBytes(value, 21);
                _userNumber = SgipHelper.Prefix86ForMobilbeNumber(value);
            }
        }

        /// <summary>
        /// SP的接入号码
        /// </summary>
        public string SPNumber
        {
            get { return _spNumber; }
            set
            {
                SgipHelper.CheckMaxBytes(value, 21);
                _spNumber = value;
            }
        }

        /// <summary>
        /// GSM协议类型。详细解释请参考GSM03.40中的9.2.3.9
        /// </summary>
        public byte TP_pid
        {
            get
            {
                return _TP_pid;
            }
            set
            {
                _TP_pid = value;
            }
        }

        /// <summary>
        /// GSM协议类型。详细解释请参考GSM03.40中的9.2.3.23,仅使用1位,右对齐
        /// </summary>
        public byte TP_udhi
        {
            get
            {
                return _TP_udhi;
            }
            set
            {
                _TP_udhi = value;
            }
        }

        /// <summary>
        /// 短消息的编码格式。0:纯ASCII字符串 3:写卡操作 4:二进制编码 8:UCS2编码 15: GBK编码 其它参见GSM3.38第4节:SMS Data Coding Scheme
        /// </summary>
        public byte MessageCoding
        {
            get
            {
                return _messageCoding;
            }
            set
            {
                _messageCoding = value;
            }
        }

        /// <summary>
        /// 短消息的长度
        /// </summary>
        public uint MessageLength
        {
            get
            {
                return (uint)IPAddress.NetworkToHostOrder((int)_messageLength);
            }
            set
            {
                _messageLength = (uint)IPAddress.HostToNetworkOrder((int)value);
            }
        }

        /// <summary>
        /// 短消息的内容
        /// </summary>
        public string MessageContent
        {
            get { return _messageContent; }
            set
            {
                _messageContent = value;
            }
        }

        /// <summary>
        /// 保留,最多8个字节
        /// </summary>
        public byte[] Reserved
        {
            get { return _reserved; }
            set
            {
                SgipHelper.CheckMaxBytes(value, 8);
                _reserved = value;
            }
        }

        #endregion

        public override uint GetCommandID()
        {
            return Command.SGIP_DELIVER;
        }

        public override int GetLength()
        {
            return (int)(MessageLength + 57);
        }

        public override byte[] GetBytes()
        {
            byte[] result = new byte[this.GetLength()];
            int nIndex = 0;
            Encoding.ASCII.GetBytes(_userNumber).CopyTo(result, nIndex);
            nIndex += 21;
            Encoding.ASCII.GetBytes(_spNumber).CopyTo(result, nIndex);
            nIndex += 21;

            result[nIndex++] = _TP_pid;
            result[nIndex++] = _TP_udhi;
            result[nIndex++] = _messageCoding;
            BitConverter.GetBytes(_messageLength).CopyTo(result, nIndex);
            nIndex += 4;
            Encoding.ASCII.GetBytes(_messageContent).CopyTo(result, nIndex);
            nIndex += (int)MessageLength; //注意,是MessageLength而不是_messageLength
            _reserved.CopyTo(result, nIndex);

            return result;
        }

        internal override void ReadFromBytes(byte[] buffer, int startIndex)
        {
            int nIndex = startIndex;
            _userNumber = SgipHelper.GetASCIIString(buffer, nIndex, 21);
            nIndex += 21;
            _spNumber = SgipHelper.GetASCIIString(buffer, nIndex, 21);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -