📄 sgip.cs
字号:
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 + -