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

📄 smgppacket.cs

📁 smgp协议的小灵通短信数据包 适合SP端程序的开发
💻 CS
📖 第 1 页 / 共 4 页
字号:
			s += dt.Minute.ToString().PadLeft(2, '0'); 
			s += dt.Second.ToString().PadLeft(2, '0'); 
			return UInt32.Parse(s);
		}

		public int SMGP_login(string str_S_IP,int i_S_port,string str_SPID,string str_SPpwd,int i_loginmode)
		{
			//			网关注册函数
			//			参数:
			//			str_S_IP:网关服务器IP
			//			str_S_port:网关服务器端口
			//			str_SPID:spid
			//			str_SPpwd:认证码
			//			loginMod:注册模式,0发送1接收,2收发
			//			返回值: 0注册成功,注册失败返回错误码
			if(netcon.net_Conn(str_S_IP,i_S_port)!=0)
			{
				//socket连接失败
				return -1;
			}
			else
			{
				n_smgppackage.SMGP_Login login=new n_smgppackage.SMGP_Login();
				login.header.setSequenceID(mtseqid++);
				login.setClientID(str_SPID);
				login.setLoginMode(i_loginmode);
				login.setTimestamp(DateTime.Now);
				login.setVersion(0x13);
				login.setAuthenticatorClient(str_SPpwd);
				n_smgppackage.SMGP_Login_resp login_resp=new n_smgppackage.SMGP_Login_resp();
				try
				{
					//数据打包并发送	
					netcon.smgp_send(login.SMGP_Login_pack(),0,login.header.getPacketLength());
					Console.WriteLine("Login request......");
					//接收回应
					byte[] recvBuffer=new byte[12+4+16+1];
					netcon.smgp_recv(recvBuffer,0,recvBuffer.Length);

					login_resp.SMGP_Login_resp_unpack(recvBuffer);
					if (login_resp.header.getCommandID()!=n_smgppackage.SMGP_COMMAND_ID.SMGP_LOGIN_RESP)
					{
						Console.WriteLine("Get no Login response");
						return -1;
					}
				
					Console.WriteLine("Login response status:{0}",login_resp.getStatus());
					Console.WriteLine("Login response version:{0}",login_resp.getVsersion());
				
					return login_resp.getStatus();
				}
				catch(Exception ex)
				{
					Console.WriteLine("Login error:{0}",ex.Message.ToString());
					return -1;
				}


			}
			
			

			/*
						SMGP_Login_resp login_resp=new SMGP_Login_resp();
			
						*/
		
		}

		public int  SMGP_mt_Send(int SubType,int NeedReport,int Priority,string ServiceID,string FeeType,string FeeCode,string FixCode,
			int MsgFormat,string ValidTime,string AtTime,string SrcTermID,string ChargeTermID,int DestTermIDCount,string DestTermID,
			string MsgContent,string Reserve)
		{	
			//			向网关发送SUBMIT包
			//			参数:submit包的各种参数
			//			返回:发送成功0,发送失败-1
			try
			{
				n_smgppackage.SMGP_Submit submit=new n_smgppackage.SMGP_Submit();
				submit.header.setSequenceID(mtseqid);
				submit.header.setRequestID(n_smgppackage.SMGP_COMMAND_ID.SMGP_SUMBIT);
				submit.setSubType((byte)SubType);
				submit.setNeedReport((byte)NeedReport);
				submit.setPriority((byte)Priority);
				submit.setServiceID(ServiceID);
				submit.setFeeType(FeeType);
				submit.setFeeCode(FeeCode);
				submit.setFixCode(FixCode);
				submit.setMsgFormat((byte)MsgFormat);
				submit.setValidTime(ValidTime);
				submit.setAtTime(AtTime);
				submit.setSrcTermID(SrcTermID);
				submit.setChargeTermID(ChargeTermID);
				submit.setDestTermIDCount((byte)DestTermIDCount);
				submit.setDestTermID(DestTermID);
				submit.setMsgContent(MsgContent);
				submit.setReserve("");
				this.netcon.smgp_send(submit.SMGP_Submit_pack(),0,submit.header.getPacketLength());
				Console.WriteLine("{0} Submit data sending...",DateTime.Now);
				Console.WriteLine("Spnumber:{0}",SrcTermID);
				Console.WriteLine("Usernumber:{0}",DestTermID);
				Console.WriteLine("Msg:{0}",MsgContent);
				return 0;
			}
			catch(Exception ex)
			{
				Console.WriteLine("Submit error:{0}",ex.Message.ToString());
				return -1;
			}
			
		}

		public int SMGP_mt_Recv()
		{
			//	包接收函数
			//	描述:接收数据包包,同时发送回应
			//	参数:
			//	返回:
			//	创建:李文达 2005-10-10 
			//Console.WriteLine("进入接收MSGID的函数");
			
			//先收包头
			try
			{
				byte[] b_header=new byte[12];
				int packlength=0;
				n_smgppackage.SMGP_COMMAND_ID reCmdID=new n_smgppackage.SMGP_COMMAND_ID();
				n_smgppackage.SMGP_Header header=new n_smgppackage.SMGP_Header();
				this.netcon.smgp_recv(b_header,0,b_header.Length);
				header.SMGP_Header_unpack(b_header);
				packlength=header.getPacketLength();	
				reCmdID=header.getCommandID();
				//Console.WriteLine("得到包长:{0}",packlength);
				Console.WriteLine("{0} MT thread get gateway data:{1}",DateTime.Now.ToString(),header.getCommandID().ToString());
				//Console.WriteLine("得到流水号:{0}",header.getSequenceID().ToString());
				switch(reCmdID)
				{
					case n_smgppackage.SMGP_COMMAND_ID.SMGP_ACTIVE_TEST:			//活动测试,需要回应
						//Console.WriteLine("mt收到活动测试");
						n_smgppackage.SMGP_Activetest_resp actresp=new n_smgppackage.SMGP_Activetest_resp();
						actresp.header.setPacketLength(12);
						actresp.header.setRequestID(n_smgppackage.SMGP_COMMAND_ID.SMGP_ACTIVE_TEST_RESP);
						actresp.header.setSequenceID(header.getSequenceID());
						//数据打包并发送	
						this.netcon.smgp_send(actresp.SMGP_Activetest_resp_pack(),0,actresp.header.getPacketLength());
						//Console.WriteLine("mt发送活动测试包回应");
						break;
					case n_smgppackage.SMGP_COMMAND_ID.SMGP_ACTIVE_TEST_RESP:		//活动测试回应,不需要回应
						//Console.WriteLine("mt收到活动测试的回应");
						break;
					case n_smgppackage.SMGP_COMMAND_ID.SMGP_EXIT:					//断开连接,需要回应
						Console.WriteLine("SUBMIT的时候收到退出请求!!");
						this._mtalive=false;
						break;
					case n_smgppackage.SMGP_COMMAND_ID.SMGP_SUBMIT_RESP:
						//Console.WriteLine("mt收到SUBMIT_RESP");
						byte[] recvBuffer=new byte[1024];
						Buffer.BlockCopy(b_header,0,recvBuffer,0,b_header.Length);	//把包头连上
						this.netcon.smgp_recv(recvBuffer,12,packlength-12);		//把数据包收完
						n_smgppackage.SMGP_Submit_resp submit_resp=new n_smgppackage.SMGP_Submit_resp();
						submit_resp.SMGP_Submit_resp_unpack(recvBuffer);
						//Console.WriteLine("seqid{0}",submit_resp.header.getSequenceID().ToString());
						Console.WriteLine("{0} Submit status:{1}",submit_resp.getMsgID(),submit_resp.getStatus());
						this.recordmt(submit_resp.header.getSequenceID().ToString(),submit_resp.getMsgID(),submit_resp.getStatus());
						//this.dbconndb.WriteMsgID(submit_resp.getMsgID(),submit_resp.getStatus(),submit_resp.header.getSequenceID());
						break;
					default:
						Console.WriteLine("mt收到未知的数据包");
						this._mtalive=false;
						break;
				}
				return 0;
			}
			catch(Exception ex)
			{
				Console.WriteLine("submit_resp执行失败:{0}",ex.Message.ToString());
				this._mtalive=false;
				return -1;
			}
				
		}
	
		public int SMGP_mo_recv()
		{
			//	包接收函数,根据不同的包做相应的处理
			//	描述:接收数据包包,同时发送回应
			//	参数:SocketConn,DBConn_mo
			//	返回:成功返回0,失败返回错误代码,错误返回-1
			//	创建:李文达 2005-10-08 
			//  先收包头
			try
			{
				byte[] b_header=new byte[12];
				int packlength;
				uint rseq_id;
				int getlength;
				n_smgppackage.SMGP_COMMAND_ID reCmdID=new n_smgppackage.SMGP_COMMAND_ID();
				n_smgppackage.SMGP_Header header=new n_smgppackage.SMGP_Header();
				getlength=this.netcon.smgp_recv(b_header,0,b_header.Length);
				if (getlength==0)	/*什么都没有收到的情况*/
				{
					return -1;
				}
				header.SMGP_Header_unpack(b_header);
				packlength=header.getPacketLength();
				rseq_id=header.getSequenceID();
				reCmdID=header.getCommandID();
				Console.WriteLine("{0} MO thread get gateway data:{1}",DateTime.Now.ToString(),header.getCommandID().ToString());
				//Console.WriteLine(reCmdID);
				switch(reCmdID)
				{
					case n_smgppackage.SMGP_COMMAND_ID.SMGP_ACTIVE_TEST:			//活动测试,需要回应
						//Console.WriteLine("MO thread get SMGP_ACTIVE_TEST");
						n_smgppackage.SMGP_Activetest_resp actresp=new n_smgppackage.SMGP_Activetest_resp();
						actresp.header.setPacketLength(12);
						actresp.header.setRequestID(n_smgppackage.SMGP_COMMAND_ID.SMGP_ACTIVE_TEST_RESP);
						actresp.header.setSequenceID(rseq_id);
						//数据打包并发送	
						this.netcon.smgp_send(actresp.SMGP_Activetest_resp_pack(),0,actresp.header.getPacketLength());
						//Console.WriteLine("mo发送活动测试包回应");
						break;
					case n_smgppackage.SMGP_COMMAND_ID.SMGP_ACTIVE_TEST_RESP:		//活动测试回应,不需要回应
						//Console.WriteLine("MO thread get SMGP_ACTIVE_TEST_RESP");
						break;
					case n_smgppackage.SMGP_COMMAND_ID.SMGP_DELIVER:				//DELIVER,需要回应
						//Console.WriteLine("MO thread get SMGP_DELIVER");
						byte[] recvBuffer=new byte[packlength];
						Buffer.BlockCopy(b_header,0,recvBuffer,0,b_header.Length);	//把包头连上
						//Console.WriteLine("把包头连上");
						this.netcon.smgp_recv(recvBuffer,12,packlength-12);
						//Console.WriteLine("收完剩下的包");
						n_smgppackage.SMGP_Deliver deliver=new n_smgppackage.SMGP_Deliver();
						n_smgppackage.SMGP_Deliver_resp deliver_resp=new n_smgppackage.SMGP_Deliver_resp();

						deliver_resp.header.setPacketLength(12+10+4);
						deliver_resp.header.setRequestID(n_smgppackage.SMGP_COMMAND_ID.SMGP_DELIVER_RESP);
						deliver_resp.header.setSequenceID(rseq_id);
						deliver_resp.setMsgID(deliver.getMsgID_b());
						deliver_resp.setStatus(0);

						this.netcon.smgp_send(deliver_resp.SMGP_Deliver_resp_pack(),0,12+10+4);
						//Console.WriteLine("mo发送DELIVER的回应");

						deliver.SMGP_Deliver_unpack(recvBuffer);
						//Console.WriteLine("MsgID:{0}",deliver.getMsgID());					
						Console.WriteLine("IsReport:{0}",deliver.getIsReport());
						//Console.WriteLine("MsgFormat:{0}",deliver.getMsgFormat());
						Console.WriteLine("SrcTermID:{0}",deliver.getSrcTermID());
						Console.WriteLine("DestTermID:{0}",deliver.getDestTermID());
						//Console.WriteLine("MsgLength:{0}",deliver.getMsgLength());
				
						if (deliver.getIsReport()==1)
						{
							//Console.WriteLine("Report_Id:{0}",deliver.Reporter.getID());
							//Console.WriteLine("Report_Sub:{0}",deliver.Reporter.getSub());
							//Console.WriteLine("Report_Dlvrd:{0}",deliver.Reporter.getDlvrd());
							//Console.WriteLine("Report_Submit_date:{0}",deliver.Reporter.getSubmit_date());
							//Console.WriteLine("Report_Done_date:{0}",deliver.Reporter.getDone_date());
							//Console.WriteLine("Report_Stat:{0}",deliver.Reporter.getStat());
							//Console.WriteLine("Report_Err:{0}",deliver.Reporter.getErr());
							//Console.WriteLine("Report_Text:{0}",deliver.Reporter.getText());
							//Console.WriteLine("Is Report!");
							int iresult=this.sqldbw.InsertReport(deliver.Reporter.getID(),deliver.Reporter.getSub(),
								deliver.Reporter.getDlvrd(),deliver.Reporter.getSubmit_date(),
								deliver.Reporter.getDone_date(),deliver.Reporter.getStat(),
								deliver.Reporter.getErr(),deliver.Reporter.getText());
							if (iresult!=0)
							{
								_moalive=false;
							}

						}
						else
						{				
							Console.WriteLine("MsgContent:{0}",deliver.getMsgContent());
							this.sqldbw.InsertDeliver(deliver.getMsgID(),deliver.getMsgFormat(),deliver.getRecvTime(),deliver.getSrcTermID(),deliver.getDestTermID(),deliver.getMsgLength(),deliver.getMsgContent());
						}

						break;
						
					case n_smgppackage.SMGP_COMMAND_ID.SMGP_EXIT:					//断开连接,需要回应
						Console.WriteLine("MO thread get SMGP_DELIVER_exit");
                       
						_moalive=false;
						break;
					default:
						Console.WriteLine("mo收到未知的数据包");
						this._moalive=false;
						break;
				}
				return 0;
			}
			catch(Exception ex)
			{
				Console.WriteLine(ex.Message.ToString());
				this._moalive=false;
				return -1;
			}

		}

		public int SMGP_deliver(string str_S_IP,int i_S_port,string str_SPID,string str_SPpwd)
		{
			
			int statlogin=SMGP_login(str_S_IP,i_S_port,str_SPID,str_SPpwd,1);
			if (statlogin!=0)
			{
				Console.WriteLine("MO Login error");
				return statlogin;
			}
			else
			{
				Console.WriteLine("MO Login gateway !");
				
				while (_moalive)
				{
					this.SMGP_mo_recv();
				}

			}
			return -1;

		}
		public void SMGP_thread_mo(string str_S_IP,int i_S_port,string str_SPID,string str_SPpwd)
		{
			try
			{
				SMGP_deliver(str_S_IP,i_S_port,str_SPID,str_SPpwd);
			}
			catch(Exception ex)
			{
				Console.WriteLine(ex.Message.ToString());
			}
			
		}
		public int SMGP_submit(string str_S_IP,int i_S_port,string str_SPID,string str_SPpwd,int slp_persend,string pergroup)
		{
			int statlogin=SMGP_login(str_S_IP,i_S_port,str_SPID,str_SPpwd,0);
			if (statlogin!=0)
			{
				Console.WriteLine("MT Login error");
				return statlogin;
			}
			else
			{
				Console.WriteLine("Login gateway !");
				_mtalive=true;
				Thread thr_mtRecv=new Thread(new ThreadStart(thread_mt_recv));
				thr_mtRecv.Start();

				try
				{
					while(_mtalive)
					{
						int i_countsubmit=sqldbr.getPreSubmit(pergroup);
						
						for(int i=0;i<i_countsubmit&&_mtalive;i++)
						{
							int SubType=Int32.Parse(sqldbr.ds_Submit.Tables[0].Rows[i]["SubType"].ToString());
							int NeedReport=Int32.Parse(sqldbr.ds_Submit.Tables[0].Rows[i]["NeedReport"].ToString());
							int Priority=Int32.Parse(sqldbr.ds_Submit.Tables[0].Rows[i]["Priority"].ToString());
							string ServiceID=sqldbr.ds_Submit.Tables[0].Rows[i]["ServiceID"].ToString();
							string FeeType=sqldbr.ds_Submit.Tables[0].Rows[i]["FeeType"].ToString();
							string FeeCode=sqldbr.ds_Submit.Tables[0].Rows[i]["FeeCode"].ToString();
							string FixCode=sqldbr.ds_Submit.Tables[0].Rows[i]["FixCode"].ToString();
							int MsgFormat=Int32.Parse(sqldbr.ds_Submit.Tables[0].Rows[i]["MsgFormat"].ToString());
							string ValidTime=sqldbr.ds_Submit.Tables[0].Rows[i]["ValidTime"].ToString();
							string AtTime=sqldbr.ds_Submit.Tables[0].Rows[i]["AtTime"].ToString();
							string SrcTermID=sqldbr.ds_Submit.Tables[0].Rows[i]["SrcTermID"].ToString();
							string ChargeTermID=sqldbr.ds_Submit.Tables[0].Rows[i]["ChargeTermID"].ToString();
							int DestTermIDCount=1;
							string DestTermID=sqldbr.ds_Submit.Tables[0].Rows[i]["DestTermID"].ToString();
							string MsgContent=sqldbr.ds_Submit.Tables[0].Rows[i]["MsgContent"].ToString();
							string Reserve=sqldbr.ds_Submit.Tables[0].Rows[i]["Reserve"].ToString();
							string fromcp=sqldbr.ds_Submit.Tables[0].Rows[i]["fromcp"].ToString();

							
							DataRow newdr=tempds.Tables["temptable"].NewRow();

							newdr["SEQID"]=++mtseqid;								
							newdr["SubType"]=SubType;
							newdr["NeedReport"]=NeedReport;
							newdr["Priority"]=Priority;
							newdr["ServiceID"]=ServiceID;
							newdr["FeeType"]=FeeType;
							newdr["FeeCode"]=FeeCode;
							newdr["FixCode"]=FixCode;
							newdr["MsgFormat"]=MsgFormat;
							newdr["ValidTime"]=ValidTime;
							newdr["AtTime"]=AtTime;
							newdr["SrcTermID"]=SrcTermID;
							newdr["ChargeTermID"]=ChargeTermID;
							newdr["DestTermIDCount"]=DestTermIDCount;
							newdr["DestTermID"]=DestTermID;
							newdr["MsgContent"]=MsgContent;
							newdr["Reserve"]=Reserve;
							newdr["fromcp"]=fromcp;

							tempds.Tables["temptable"].Rows.Add(newdr);
							//							Console.WriteLine("SubType:{0}",SubType);	
							//							Console.WriteLine("NeedReport:{0}",NeedReport);
							//							Console.WriteLine("Priority:{0}",Priority);
							//							Console.WriteLine("ServiceID:{0}",ServiceID);
							//							Console.WriteLine("FeeType:{0}",FeeType);
							//							Console.WriteLine("FeeCode:{0}",FeeCode);
							//							Console.WriteLine("FixCode:{0}",FixCode);
							//							Console.WriteLine("MsgFormat:{0}",MsgFormat);
							//							Console.WriteLine("ValidTime:{0}",ValidTime);
							//							Console.WriteLine("AtTime:{0}",AtTime);
							//							Console.WriteLine("SrcTermID:{0}",SrcTermID);
							//							Console.WriteLine("ChargeTermID:{0}",ChargeTermID);
							//							Console.WriteLine("DestTermIDCount:{0}",DestTermIDCount);
							//							Console.WriteLine("DestTermID:{0}",DestTermID);
							//							Console.WriteLine("MsgContent:{0}",MsgContent);
							//							Console.WriteLine("Reserve:{0}",Reserve);
							//							Console.WriteLine("***************************************");
							sqldbr.ds_Submit.Tables[0].Rows[i].Delete();
							SMGP_mt_Send(SubType,NeedReport,Priority, ServiceID, FeeType,FeeCode,FixCode,MsgFormat,
								ValidTime, AtTime, SrcTermID,ChargeTermID,DestTermIDCount,DestTermID,MsgContent,Reserve);
							Thread.Sleep(slp_persend);
							
						}
						sqldbr.UpdateData();
						Thread.Sleep(1000);
					}
					return -2;
				}
				catch(Exception ex)
				{
					Console.WriteLine(ex.Message.ToString());
					
					_mtalive=false;
					return -1;
				}

				
			}
		}

        public int SMGP_EXIT()
        {
            n_smgppackage.SMGP_Exit mExit = new n_smgppackage.SMGP_Exit();
            this.netcon.smgp_send(mExit.SMGP_Exit_pack(), 0, mExit.header.getPacketLength());
            return 0;
        }
		public void thread_mt_recv()
		{
			Console.WriteLine("进入MTRECV线程");
			try
			{
				while(_mtalive)
				{
					this.SMGP_mt_Recv();
				}
			}
			catch(Exception ex)
			{
				Console.WriteLine(ex.Message.ToString());
				_mtalive=false;
			}
		}

		public void recordmt(string mtseqid,string msgid,int status)
		{
			int irowcount=tempds.Tables["temptable"].Rows.Count;
			//Console.WriteLine("临时表中数据为:{0}",tempds.Tables["temptable"].Rows.Count);
			for(int i=0;i<irowcount;i++)
			{
				if(tempds.Tables["temptable"].Rows[i]["SEQID"].ToString()==mtseqid.ToString())
				{
					//Console.WriteLine("准备记录MT,i={0}",i);
					this.sqldbw.InsertMT(tempds.Tables["temptable"].Rows[i]["SEQID"].ToString(),
						Int32.Parse(tempds.Tables["temptable"].Rows[i]["SubType"].ToString()),
						Int32.Parse(tempds.Tables["temptable"].Rows[i]["NeedReport"].ToString()),
						Int32.Parse(tempds.Tables["temptable"].Rows[i]["Priority"].ToString()),
						tempds.Tables["temptable"].Rows[i]["ServiceID"].ToString(),
						tempds.Tables["temptable"].Rows[i]["FeeType"].ToString(),
						tempds.Tables["temptable"].Rows[i]["FeeCode"].ToString(),
						tempds.Tables["temptable"].Rows[i]["FixCode"].ToString(),
						Int32.Parse(tempds.Tables["temptable"].Rows[i]["MsgFormat"].ToString()),
						tempds.Tables["temptable"].Rows[i]["ValidTime"].ToString(),
						tempds.Tables["temptable"].Rows[i]["AtTime"].ToString(),
						tempds.Tables["temptable"].Rows[i]["SrcTermID"].ToString(),
						tempds.Tables["temptable"].Rows[i]["ChargeTermID"].ToString(),
						Int32.Parse(tempds.Tables["temptable"].Rows[i]["DestTermIDCount"].ToString()),
						tempds.Tables["temptable"].Rows[i]["DestTermID"].ToString(),
						tempds.Tables["temptable"].Rows[i]["MsgContent"].ToString(),
						tempds.Tables["temptable"].Rows[i]["Reserve"].ToString(),
						msgid,status,tempds.Tables["temptable"].Rows[i]["fromcp"].ToString());	
					//Console.WriteLine("纪录MT完成");
					//Console.WriteLine("准备删除零时表中第{0}条纪录",i);
					tempds.Tables["temptable"].Rows[i].Delete();
					//Console.WriteLine("删除零时表中第{0}条纪录",i);
					break;

				}
			}
			//Console.WriteLine("临时表中还有数据为:{0}",tempds.Tables["temptable"].Rows.Count);
		}


		
	}
}  


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -