📄 cmpp with c#.txt
字号:
t[3]=b;
b=t[1];
t[1]=t[2];
t[2]=b;
return(t);
}
public static uint Bytes2UInt(byte[] bs,int startIndex) //返回字节数组代表的整数数字,4个数组
{
byte[] t=new byte[4];
for(int i=0;i<4 && i< bs.Length-startIndex ;i++)
{
t[i]=bs[startIndex+i];
}
byte b=t[0];
t[0]=t[3];
t[3]=b;
b=t[1];
t[1]=t[2];
t[2]=b;
return(BitConverter.ToUInt32(t,0));
}
public static uint Bytes2UInt(byte[] bs) //没有指定起始索引
{
return( Bytes2UInt(bs,0));
}
public static void DumpBytes(byte[] bs,string txt)
{
System.IO.StreamWriter sw=new System.IO.StreamWriter(txt);
for(int i=0;i<bs.Length ;i++)
{
byte b=bs[i];
sw.WriteLine(b.ToString("X")+" ");
}
sw.WriteLine("-----"+DateTime.Now.ToLocalTime() );
sw.Close();
}
public static void DebugString(string bs,string txt)
{
System.IO.StreamWriter sw=new System.IO.StreamWriter(txt);
sw.WriteLine(bs);
sw.WriteLine("-----"+DateTime.Now.ToLocalTime() );
sw.Close();
}
}
public class ReportEventArgs : EventArgs //报告事件携带的数据
{
string _smsState; //发送短信的应答结果,含义与SMPP协议要求中stat字段定义相同 。SP根据该字段确定CMPP_SUBMIT消息的处理状态。
string _submitTime; //提交短信的时间,也可根据此时间决定是否重发
string _doneTime; //送达目的地的时间
string _destNum; //送达的号码
string _msgID; //关于那一条消息的报告
uint _sequence; //CMPP网关产生的流水号
UInt64 _msg_id; //被报告的提交短信的msgID,ISMG在submit_resp返回给SP的
public string State
{
get
{
return(this._smsState);
}
set
{
this._smsState =value;
}
}
public uint Sequence
{
get
{
return(this._sequence );
}
set
{
this._sequence =value;
}
}
public string toUserNum
{
get
{
return(this._destNum);
}
set
{
this._destNum =value;
}
}
public string MsgID
{
get
{
return( this._msgID );
}
set
{
this._msgID =value;
}
}
public string SubmitTime
{
get
{
return(this._submitTime);
}
set
{
this._submitTime =value;
}
}
public string DoneTime
{
get
{
return(this._doneTime );
}
set
{
this._doneTime =value;
}
}
public ReportEventArgs(byte[] bs) //从一个字节数组中获得报告
{
byte[] temp=new byte[8+7+10+10+21+4];
for(int i=0;i<temp.Length;i++)
{
temp[i]=bs[i];
}
init(temp);
}
public ReportEventArgs(byte[] bs,int startIndex) //起始
{
byte[] temp=new byte[8+7+10+10+21+4];//定义长度
for(int i=0;i<temp.Length;i++)
{
temp[i]=bs[startIndex+i];
}
init(temp);
}
public ReportEventArgs(string msgid,string destnum,string smsstate,string submittime,string donetime,uint seq)
{
this._msgID =msgid;
this._destNum =destnum;
this._smsState =smsstate;
this._submitTime =submittime;
this._doneTime =donetime;
this._sequence =seq;
}
public DateTime getSubmitTime()
{
return(getTime(this._submitTime));
}
public DateTime getDoneTime()
{
return(getTime(this._doneTime));
}
private DateTime getTime(string time_string)
{
int index=0;
int yy=Convert.ToInt32("20"+ time_string.Substring(index,2));
index+=2;
int mm=Convert.ToInt32(time_string.Substring(index,2));
index+=2;
int dd=Convert.ToInt32(time_string.Substring(index,2));
index+=2;
int hh=Convert.ToInt32(time_string.Substring(index,2));
index+=2;
int mms=Convert.ToInt32(time_string.Substring(index,2));
DateTime t=new DateTime(yy,mm,dd,hh,mms,0);
return(t);
}
private void init(byte[] bs)
{
BIConvert.DumpBytes(bs,"c:\\ReportEventArgs.txt");//保留映像
int index=0;
this._msg_id =BitConverter.ToUInt64(bs,index); //BitConverter.ToUInt64(bs,index);
this._msgID =(this._msg_id.ToString());
// BIConvert.DebugString(this._msgID ,"c:\\MSGID.txt");
index +=8;
this._smsState = Encoding.ASCII.GetString(bs,index,7);
index+=7;
this._submitTime = Encoding.ASCII.GetString(bs,index,10);
index+=10;
this._doneTime = Encoding.ASCII.GetString(bs,index,10);
index+=10;
this._destNum = Encoding.ASCII.GetString(bs,index,21);
index+=21;
this._sequence = BIConvert.Bytes2UInt(bs,index);
}
}
public class SMSEventArgs : EventArgs
{
UInt64 _msgid; //8字节的消息标示
string _destID; //接受信息的目标ID
string _svcCode; //业务代码
int _tpPID; //参考GSM协议
int _tpUDHI; //
int _msgFrm; //消息的编码格式
string _srcTerminateID; //源终端ID,如果使报告
int _msgLength; //消息的字节数,并非实际字符串长度
string _Content; //消息正文内容
public SMSEventArgs(byte[] bs)
{
int msglen=BitConverter.ToInt32(bs,8+21+10+1+1+1+21+1); //取得消息长度字节长度
int tempLen=msglen+8+21+10+1+1+1+21+1+1+msglen+8;
byte[] temp=new byte[tempLen];
for(int i=0;i<temp.Length ;i++)
{
temp[i]=bs[i];
}
init(temp);
}
public SMSEventArgs(byte[] bs,int baseIndex)
{
int msglen= (int)bs[MSG.CMPP_MSG_Header.HeaderLength +8+21+10+1+1+1+21+1]; //取得消息长度字节长度
int tempLen=8+21+10+1+1+1+21+1+1+msglen+8;
byte[] temp=new byte[tempLen];
for(int i=0;i<temp.Length ;i++)
{
temp[i]=bs[i+baseIndex];
}
init(temp);
}
private void init(byte[] bs)
{
BIConvert.DumpBytes(bs,"c:\\SMSEventArgs.txt");//保留映像
int index=0;
this._msgid = BitConverter.ToUInt64(bs,0);
index+=8;
this._destID = Encoding.ASCII.GetString(bs,index,_getRealBytesLength(bs,index));
index+=21;
this._svcCode = Encoding.ASCII.GetString(bs,index,_getRealBytesLength(bs,index));
index+=10;
this._tpPID =(int)bs[index++];
this._tpUDHI =(int)bs[index++];
this._msgFrm = (int)bs[index++];
this._srcTerminateID =Encoding.ASCII.GetString(bs,index,_getRealBytesLength(bs,index));
index+=21;
index++; //是否是状态报告字节
this._msgLength = (int)bs[index++]; //取得字节长度
switch ( this._msgFrm )
{
case (int)MSG.Msg_Format.ASCII :
this._Content =Encoding.ASCII.GetString(bs,index,this._msgLength );
break;
case (int)MSG.Msg_Format.GB2312 :
this._Content = Encoding.Default.GetString(bs,index,this._msgLength );
break;
case (int)MSG.Msg_Format.UCS2 :
this._Content = Encoding.BigEndianUnicode.GetString(bs,index,this._msgLength );
break;
case (int)MSG.Msg_Format.BINARY :
break;
case (int)MSG.Msg_Format.WRITECARD :
break;
default:
break;
}
}
public string toSPNum
{
get
{
return(this._destID );
}
}
public string SrcNum
{
get
{
return(this._srcTerminateID);
}
}
public string Content
{
get
{
return(this._Content );
}
}
public string SvcCode
{
get
{
return(this._svcCode);
}
}
public UInt64 MsgID
{
get
{
return(this._msgid) ;
}
//set
//{
// this._msgid =value;
//}
}
public string MsgIDString
{
get
{
return(this._msgid).ToString();
}
}
private int _getRealBytesLength(byte[] bts,int index)
{
int i=index;
for( ;i<bts.Length ;i++)
{
if(bts[i]==0)
{
break;
}
}
return i-index;
}
}
public class TerminateEventArgs:EventArgs
{
private uint _seq;
private MSG.CMPP_MSG_TERMINATE _msg;
public TerminateEventArgs( uint seq)
{
this._seq =seq;
}
public TerminateEventArgs(object msg)
{
this._msg =(MSG.CMPP_MSG_TERMINATE)msg;
this._seq =this._msg.Sequence ;
}
public object getMSG()
{
return(this._msg);
}
}
public class TerminateRespEventArgs:EventArgs
{
private uint _seq;
private MSG.CMPP_MSG_TERMINATE_RESP _msg;
public TerminateRespEventArgs(uint seq)
{
this._seq =seq;
}
public TerminateRespEventArgs(object msg)
{
this._msg =(MSG.CMPP_MSG_TERMINATE_RESP)msg;
this._seq =this._msg.Sequence ;
}
public object getMSG()
{
return(this._msg );
}
public uint Sequence
{
set
{
this._seq =value;
}
get
{
return(this._seq);
}
}
}
public class TestEventArgs: EventArgs
{
private uint _seq;
private MSG.CMPP_MSG_TEST _msg;
public TestEventArgs(uint seq)
{
this._seq =seq;
}
public TestEventArgs(object msg)
{
this._msg =(MSG.CMPP_MSG_TEST)msg;
this._seq =this._msg.Sequence ;
}
public object getMSG()
{
return(this._msg );
}
public uint Sequence
{
set
{
this._seq =value;
}
get
{
return(this._seq );
}
}
}
public class TestRespEventArgs: EventArgs
{
private uint _seq;
private MSG.CMPP_MSG_TEST_RESP _msg;
public TestRespEventArgs(uint seq)
{
this._seq =seq;
}
public TestRespEventArgs(object msg)
{
this._msg =(MSG.CMPP_MSG_TEST_RESP)msg;
this._seq =this._msg.Sequence ;
}
public object getMSG()
{
return(this._msg );
}
public uint Sequence
{
set
{
this._seq =value;
}
get
{
return(this._seq);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -