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

📄 cmpp with c#.txt

📁 cmpp with c#
💻 TXT
📖 第 1 页 / 共 5 页
字号:
   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 + -