?? sgip.cs
字號:
/// 狀態報告標記 0-該條消息只有最后出錯時要返回狀態報告 1-該條消息無論最后是否成功都要返回狀態報告 2-該條消息不需要返回狀態報告 3-該條消息僅攜帶包月計費信息,不下發給用戶,要返回狀態報告其它-保留缺省設置為0
/// </summary>
public byte ReportFlag
{
get
{
return _reportFlag;
}
set
{
_reportFlag = 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>
/// 信息類型: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);
//_messageLength =
}
}
/// <summary>
/// 短消息的內容
/// </summary>
public string MessageContent
{
get { return _messageContent; }
set
{
_messageContent = value;
}
}
/// <summary>
/// 保留,最多8個字節
/// </summary>
public byte[] Reserved
{
get { return _reserved; }
set
{
apiHelper.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].ToString()).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.Default.GetBytes(_messageContent).CopyTo(result, nIndex);
byte[] xxx=apiHelper.StringToXCoding(_messageContent,_messageCoding);
xxx.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 = apiHelper.GetASCIIString(buffer, nIndex, 21);
nIndex += 21;
_chargeNumber = apiHelper.GetASCIIString(buffer, nIndex, 21);
nIndex += 21;
_userCount = buffer[nIndex++];
_userNumber.Clear();
for (int i = 0; i < UserCount; i++)
{
_userNumber.Add(apiHelper.GetASCIIString(buffer, nIndex, 21));
nIndex += 21;
}
_corpID = apiHelper.GetASCIIString(buffer, nIndex, 5);
nIndex += 5;
_serviceType = apiHelper.GetASCIIString(buffer, nIndex, 10);
nIndex += 10;
_feeType = buffer[nIndex++];
_feeValue = apiHelper.GetASCIIString(buffer, nIndex, 6);
nIndex += 6;
_givenValue = apiHelper.GetASCIIString(buffer, nIndex, 6);
nIndex += 6;
_agentFlag = buffer[nIndex++];
_morelatetoMTFlag = buffer[nIndex++];
_priority = buffer[nIndex++];
_expireTime = apiHelper.GetASCIIString(buffer, nIndex, 16);
nIndex += 16;
_scheduleTime = apiHelper.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 = apiHelper.GetASCIIString(buffer, nIndex, (int)MessageLength); //注意, MessageLength屬性才是主機順序的
_messageContent= apiHelper.XCodingtoString(buffer,nIndex,(int)MessageLength,_messageCoding);
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
{
apiHelper.CheckMaxBytes(value, 21);
_userNumber = apiHelper.Prefix86ForMobilbeNumber(value);
}
}
/// <summary>
/// SP的接入號碼
/// </summary>
public string SPNumber
{
get { return _spNumber; }
set
{
apiHelper.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
{
apiHelper.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.Default.GetBytes(_messageContent).CopyTo(result, nIndex);
apiHelper.StringToXCoding(_messageContent,_messageCoding).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 = apiHelper.GetASCIIString(buffer, nIndex, 21);
nIndex += 21;
_spNumber = apiHelper.GetASCIIString(buffer, nIndex, 21);
nIndex += 21;
_TP_pid = buffer[nIndex++];
_TP_udhi = buffer[nIndex++];
_messageCoding = buffer[nIndex++];
_messageLength = BitConverter.ToUInt32(buffer, nIndex);
nIndex += 4;
// UnicodeEncoding usc2code = new UnicodeEncoding();
// if (_messageCoding==8)
// _messageContent=usc2code.GetString(buffer, nIndex, (int)MessageLength);
// else
// _messageContent = Encoding.Default.GetString(buffer, nIndex, (int)MessageLength); //注意是MessageLength而非_messageLength
_messageContent= apiHelper.XCodingtoString(buffer,nIndex,(int)MessageLength,_messageCoding);
nIndex += (int)MessageLength;
Buffer.BlockCopy(buffer, nIndex, _reserved, 0, 8);
}
}
public class Deliver_Resp: ResponseBody
{
public override uint GetCommandID()
{
return Command.SGIP_DELIVER_RESP;
}
}
public class Report: Body
{
#region private members
private SequenceNumber _sequenceNumber = new SequenceNumber(); //12, 該命令所涉及的Submit或deliver命令的序列號
private byte _reportType; //1, Report命令類型 0:對先前一條Submit命令的狀態報告 1:對先前一條前轉Deliver命令的狀態報告
private string _userNumber = ""; //21, 接收短消息的手機號,手機號碼前加“86”國別標志
private byte _state; //1, 該命令所涉及的短消息的當前執行狀態 0:發送成功 1:等待發送 2:發送失敗
private byte _errorCode; //1, 當State=2時為錯誤碼值,否則為0
private byte[] _reserved = new byte[8]; // 保留,最多8個字節
#endregion
#region public propertys
/// <summary>
/// 該命令所涉及的Submit或deliver命令的序列號
/// </summary>
public SequenceNumber SequenceNumber
{
get { return _sequenceNumber; }
set { _sequenceNumber = value; }
}
/// <summary>
/// Report命令類型 0:對先前一條Submit命令的狀態報告 1:對先前一條前轉Deliver命令的狀態報告
/// </summary>
public byte ReportType
{
get
{
return _reportType;
}
set
{
_reportType = value;
}
}
/// <summary>
/// 接收短消息的手機號,手機號碼前加“86”國別標志
/// </summary>
public string UserNumber
{
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -