📄 sgip.cs
字号:
AgentFlag agentFlag,
MorelatetoMTFlag morelatetoMTFlag,
byte tp_pid,
byte tp_udhi
)
{
_commandID = CommandID.SGIP_SUBMIT;
_spNumber = new byte[21] {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
_chargeNumber = new byte[21]{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
_corpId = new byte[5] {0,0,0,0,0};
Encoding.ASCII.GetBytes( corpId, 0, corpId.Length, _corpId, 0 );
_serviceType = new byte[10] {0,0,0,0,0,0,0,0,0,0};
Encoding.ASCII.GetBytes( serviceType, 0, serviceType.Length, _serviceType, 0 );
_feeType = feeType;
_feeValue = new byte[6] { 0,0,0,0,0,0 };
Encoding.ASCII.GetBytes( feeValue, 0, feeValue.Length, _feeValue, 0 );
_givenValue = new byte[6] { 0,0,0,0,0,0 };
Encoding.ASCII.GetBytes( givenValue, 0, givenValue.Length, _givenValue, 0 );
_agentFlag = agentFlag;
_morelatetoMTFlag = morelatetoMTFlag;
_expireTime = new byte[16];
_scheduleTime = new byte[16];
_tp_pid = tp_pid;
_tp_udhi = tp_udhi;
_reserve = new byte[8] { 0,0,0,0,0,0,0,0 };
}
public override void Get
(
BinaryReader br
)
{
GetHead( br );
br.Read( _spNumber, 0, 21 );
br.Read( _chargeNumber, 0, 21 );
_userCount = br.ReadByte();
_userNumber = new byte[ _userCount ][];
for( int i = 0; i < _userCount; i ++ )
{
_userNumber[i] = new byte[21];
br.Read( _userNumber[i], 0, 21 );
}
br.Read( _corpId, 0, 5 );
br.Read( _serviceType, 0, 10 );
_feeType = ( FeeType )br.ReadByte();
br.Read( _feeValue, 0, 6 );
br.Read( _givenValue, 0, 6 );
_agentFlag = ( AgentFlag )br.ReadByte();
_morelatetoMTFlag = (MorelatetoMTFlag) br.ReadByte();
_priority = br.ReadByte();
br.Read( _expireTime, 0, 16 );
br.Read( _scheduleTime, 0, 16 );
_reportFlag = ( ReportFlag )br.ReadByte();
_tp_pid = br.ReadByte();
_tp_udhi = br.ReadByte();
_messageCoding = ( MessageCoding )br.ReadByte();
_messageType = ( MessageType )br.ReadByte();
int netValue;
netValue = br.ReadInt32();
_messageLength = IPAddress.NetworkToHostOrder( netValue );
br.Read( _messageContent, 0, _messageLength );
br.Read( _reserve, 0, 8 );
}
public void UpdateSms
(
string spNumber,
string chargeNumber,
string userNumbers,
string messageContent,
byte priority,
DateTime expireTime,
DateTime scheduleTime,
ReportFlag reportFlag,
MessageCoding messageCoding,
MessageType messageType
)
{
_priority = priority;
_reportFlag = reportFlag;
string[] numbers = userNumbers.Split( new char[] { ':',',',';','、',':',',',';',' ' } );
for( int i =0; i < 21; i ++ )
{
_spNumber[i] = 0;
_chargeNumber[i] = 0;
}
Encoding.ASCII.GetBytes( spNumber, 0, spNumber.Length, _spNumber, 0 );
Encoding.ASCII.GetBytes( chargeNumber, 0, chargeNumber.Length, _chargeNumber, 0 );
_userCount = 0;
_userNumber = new byte[numbers.Length][];
foreach( string s in numbers )
{
if( s.Length > 6 )
{
string number = "86" + s;
_userNumber[ _userCount ] = new byte[21] {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
Encoding.ASCII.GetBytes( number, 0, number.Length, _userNumber[ _userCount ], 0 );
_userCount ++;
}
}
string dateString;
if( expireTime > DateTime.MinValue )
{
dateString = string.Format
(
"{0:00}{1:00}{2:00}{3:00}{4:00}{5:00}032+",
expireTime.Year - 2000,
expireTime.Month,
expireTime.Day,
expireTime.Hour,
expireTime.Minute,
expireTime.Second
);
Encoding.ASCII.GetBytes( dateString, 0, dateString.Length, _expireTime, 0 );
}
else
{
for( int i = 0; i < 16; i ++ )
_expireTime[i] = 0;
}
if( scheduleTime > DateTime.MinValue )
{
dateString = string.Format
(
"{0:00}{1:00}{2:00}{3:00}{4:00}{5:00}032+",
scheduleTime.Year - 2000,
scheduleTime.Month,
scheduleTime.Day,
scheduleTime.Hour,
scheduleTime.Minute,
scheduleTime.Second
);
Encoding.ASCII.GetBytes( dateString, 0, dateString.Length, _scheduleTime, 0 );
}
else
{
for( int i = 0; i < 16; i ++ )
_scheduleTime[i] = 0;
}
_reportFlag = reportFlag;
_messageCoding = messageCoding;
_messageType = messageType;
Encoding msgCoding = Encoding.Default;
switch( _messageCoding )
{
case MessageCoding.Ascii:
msgCoding = Encoding.ASCII;
_messageLength = messageContent.Length;
break;
case MessageCoding.Bin:
case MessageCoding.Stk:
msgCoding = Encoding.Default;
_messageLength = messageContent.Length;
break;
case MessageCoding.Ucs2:
msgCoding = Encoding.Unicode;
_messageLength = 2 * messageContent.Length;
break;
case MessageCoding.Gbk:
msgCoding = Encoding.GetEncoding( 936 );
_messageLength = 2 * messageContent.Length;
break;
}
_messageContent = new byte[ _messageLength ];
msgCoding.GetBytes( messageContent, 0, messageContent.Length, _messageContent, 0 );
_totalLength = 143 + _userCount*21 + _messageLength;
}
public void WakeSmg
(
BinaryWriter bw
)
{
SendSameHead( bw );
bw.Write( _spNumber, 0, 21 );
bw.Write( _chargeNumber, 0, 21 );
bw.Write( _userCount );
for( int i = 0; i < _userCount; i ++ )
bw.Write( _userNumber[i], 0, 21 );
bw.Write( _corpId, 0, 5 );
bw.Write( _serviceType, 0, 10 );
bw.Write( (byte)_feeType );
bw.Write( _feeValue, 0, 6 );
bw.Write( _givenValue, 0, 6 );
bw.Write( (byte)_agentFlag );
bw.Write( (byte)_morelatetoMTFlag );
bw.Write( _priority );
bw.Write( _expireTime, 0, 16 );
bw.Write( _scheduleTime, 0, 16 );
bw.Write( (byte)_reportFlag );
bw.Write( _tp_pid );
bw.Write( _tp_udhi );
bw.Write( (byte)_messageCoding );
bw.Write( (byte)_messageType );
int netValue;
netValue = IPAddress.HostToNetworkOrder( unchecked( (int)_messageLength ) );
bw.Write( netValue );
bw.Write( _messageContent, 0, _messageLength );
bw.Write( _reserve, 0, 8 );
}
public override void Send
(
BinaryWriter bw
)
{
SendHead( bw );
bw.Write( _spNumber, 0, 21 );
bw.Write( _chargeNumber, 0, 21 );
bw.Write( _userCount );
for( int i = 0; i < _userCount; i ++ )
bw.Write( _userNumber[i], 0, 21 );
bw.Write( _corpId, 0, 5 );
bw.Write( _serviceType, 0, 10 );
bw.Write( (byte)_feeType );
bw.Write( _feeValue, 0, 6 );
bw.Write( _givenValue, 0, 6 );
bw.Write( (byte)_agentFlag );
bw.Write( (byte)_morelatetoMTFlag );
bw.Write( _priority );
bw.Write( _expireTime, 0, 16 );
bw.Write( _scheduleTime, 0, 16 );
bw.Write( (byte)_reportFlag );
bw.Write( _tp_pid );
bw.Write( _tp_udhi );
bw.Write( (byte)_messageCoding );
bw.Write( (byte)_messageType );
int netValue;
netValue = IPAddress.HostToNetworkOrder( unchecked( (int)_messageLength ) );
bw.Write( netValue );
bw.Write( _messageContent, 0, _messageLength );
bw.Write( _reserve, 0, 8 );
}
public override void SendResponse( BinaryWriter bw, ErrorCode err )
{
SgipSubmitResp submitResp = new SgipSubmitResp( (byte)err );
submitResp.Send( bw );
}
}
class SgipSubmitResp : SgipBlock
{
byte _result;
byte[] _reserve = new byte[8];
public SgipSubmitResp()
{
_totalLength = 29;
_commandID = CommandID.SGIP_SUBMIT_RESP;
}
public SgipSubmitResp( byte result )
{
_totalLength = 29;
_commandID = CommandID.SGIP_SUBMIT_RESP;
_result = result;
}
public override void Send
(
BinaryWriter bw
)
{
SendHead( bw );
bw.Write( _result );
bw.Write( _reserve, 0, 8 );
}
public override void Get
(
BinaryReader br
)
{
GetHead( br );
_result = br.ReadByte();
br.Read( _reserve, 0, 8 );
}
public ErrorCode Result
{
get
{
return (ErrorCode)_result;
}
set
{
_result = (byte)value;
}
}
}
class SgipDeliver : SgipBlock
{
byte[] _userNumber;
byte[] _spNumber;
byte _tp_pid;
byte _tp_udhi;
MessageCoding _messageCoding;
int _messageLength;
byte[] _messageContent;
byte[] _reserve;
public SgipDeliver()
{
_reserve = new byte[8] {0,0,0,0,0,0,0,0};
_commandID = CommandID.SGIP_DELIVER;
}
public string UserNumber
{
get
{
return gbk.GetString( _userNumber, 0, BufferLength( _userNumber ) );
}
}
public string SpNumber
{
get
{
return gbk.GetString( _spNumber, 0, BufferLength( _spNumber ) );
}
}
public string MessageContent
{
get
{
Encoding msgCoding = Encoding.Default;
switch( _messageCoding )
{
case MessageCoding.Ascii:
msgCoding = Encoding.ASCII;
break;
case MessageCoding.Bin:
case MessageCoding.Stk:
msgCoding = Encoding.Default;
break;
case MessageCoding.Ucs2:
msgCoding = Encoding.BigEndianUnicode;
break;
case MessageCoding.Gbk:
msgCoding = gbk;
break;
}
return msgCoding.GetString( _messageContent, 0, _messageLength );
}
}
public void UpdateSms
(
string userNumber,
string spNumber,
byte tp_pid,
byte tp_udhi,
MessageCoding messageCoding,
string messageContent
)
{
_userNumber = new byte[21] {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
Encoding.ASCII.GetBytes( userNumber, 0, userNumber.Length, _userNumber, 0 );
_spNumber = new byte[21] {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
Encoding.ASCII.GetBytes( spNumber, 0, userNumber.Length, _spNumber, 0 );
_tp_pid = tp_pid;
_tp_udhi = tp_udhi;
_messageCoding = messageCoding;
Encoding msgCoding = Encoding.Default;
switch( _messageCoding )
{
case MessageCoding.Ascii:
msgCoding = Encoding.ASCII;
_messageLength = messageContent.Length;
break;
case MessageCoding.Bin:
case MessageCoding.Stk:
msgCoding = Encoding.Default;
_messageLength = messageContent.Length;
break;
case MessageCoding.Ucs2:
msgCoding = Encoding.Unicode;
_messageLength = 2 * messageContent.Length;
break;
case MessageCoding.Gbk:
msgCoding = Encoding.GetEncoding( 936 );
_messageLength = 2 * messageContent.Length;
break;
}
_messageContent = new byte[ _messageLength ];
msgCoding.GetBytes( messageContent, 0, messageContent.Length, _messageContent, 0 );
_totalLength = 77 + _messageLength;
}
public override void Send
(
BinaryWriter bw
)
{
SendHead( bw );
bw.Write( _userNumber, 0, 21 );
bw.Write( _spNumber, 0, 21 );
bw.Write( _tp_pid );
bw.Write( _tp_udhi );
bw.Write( (byte)_messageCoding );
int netValue;
netValue = IPAddress.HostToNetworkOrder( _messageLength );
bw.Write( netValue );
bw.Write( _messageContent, 0, _messageLength );
bw.Write( _reserve, 0, 8 );
}
public override void Get
(
BinaryReader br
)
{
GetHead( br );
_userNumber = new byte[21] {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
br.Read( _userNumber, 0, 21 );
_spNumber = new byte[21] {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
br.Read( _spNumber, 0, 21 );
_tp_pid = br.ReadByte();
_tp_udhi = br.ReadByte();
_messageCoding = (MessageCoding)br.ReadByte();
_messageLength = IPAddress.NetworkToHostOrder( br.ReadInt32() );
_messageContent = new byte[ _messageLength ];
br.BaseStream.Read( _messageContent, 0, _messageLength );
br.Read( _reserve, 0, 8 );
}
public override void SendResponse( BinaryWriter bw, ErrorCode err )
{
SgipDeliverResp deliverResp = new SgipDeliverResp
(
_sequenceNumberGot1,
_sequenceNumberGot2,
_sequenceNumberGot3,
(byte)err
);
deliverResp.Send( bw );
}
}
class SgipDeliverResp : SgipBlock
{
byte _result;
byte[] _reserve = new byte[8];
public SgipDeliverResp()
{
_totalLength = 29;
_commandID = CommandID.SGIP_DELIVER_RESP;
}
public SgipDeliverResp( uint s1, uint s2, uint s3, byte result )
{
_totalLength = 29;
_sequenceNumberGot1 = s1;
_sequenceNumberGot2 = s2;
_sequenceNumberGot3 = s3;
_commandID = CommandID.SGIP_DELIVER_RESP;
_result = result;
}
public override void Send
(
BinaryWriter bw
)
{
byte[] data = new byte[ _totalLength ];
MemoryStream ms = new MemoryStream( data );
BinaryWriter bbw = new BinaryWriter( ms );
SendHeadGot( bbw );
bbw.Write( _result );
bbw.Write( _reserve, 0, 8 );
bw.Write( data, 0, data.Length );
}
public override void Get
(
BinaryReader br
)
{
GetHead( br );
_result = br.ReadByte();
br.Read( _reserve, 0, 8 );
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -