www.pudn.com > FeeGateWaySrv.rar > GateWayService.cs


using System; 
using System.Collections; 
using System.ComponentModel; 
using System.Data; 
using System.Diagnostics; 
using System.ServiceProcess; 
using System.Threading; 
using System.Text; 
using System.Windows; 
using System.Data.SqlClient; 
using System.IO; 
using System.Xml; 
using System.Net; 
 
namespace GateWayFroCMPP3 
{ 
	public class CMPP3GateWayService : System.ServiceProcess.ServiceBase 
	{ 
		private CMPP3.Client.CMPP3Client cmppClient;//=new CMPP.client.CMPPClient(); 
		///  
		/// 网关所在IP 
		///  
		private string CM_GateWayIP;//真实网关IP 
		///  
		/// 网关端口 
		///  
		private int CM_GateWayPort;//真实网关端口 
		///  
		/// 网关分配企业代码 
		///  
		private string SPID; 
		///  
		/// 网关分配服务号码 
		///  
		private string ServiceCode;//特服号 
		///  
		/// 登陆用户名 
		///  
		private string SendUserName; 
		///  
		/// 登陆密码 
		///  
		private string SendPassWord; 
		/**************************主服务程序配置*********************************/ 
		private string GateWayID; 
		private string GateWayPWD; 
		private string IsmgServerName; 
		private int IsmgServerPort; 
		 
		private System.Threading.AutoResetEvent ARE_ISMGConnect=new AutoResetEvent(false); 
		/***************************数据库连接配置*****************************/ 
		private string DataBaseConnectString; 
		private System.Data.SqlClient.SqlConnection SqlConn; 
		private System.Data.SqlClient.SqlCommand SqlComm; 
		/***************************平台标志位及其他配置***********************/ 
		private bool isStart=false; 
		private bool HandStop=false; 
		private byte[] LastData=new byte[0]; 
		private ReaderWriterLock RWL_MSMQ_Temp=new ReaderWriterLock(); 
		private System.Threading.AutoResetEvent ARE_Start=new AutoResetEvent(false); 
		private System.Threading.Thread ThreadStart; 
		///  
		/// 运营商编号 
		///  
		private int TelOperatorID; 
		///  
		/// 整型的网关号 
		///  
		private int iGatewayID; 
		 
		private string path; 
		private ReaderWriterLock RWL_log=new ReaderWriterLock(); 
		private System.Messaging.MessageQueue RecvSMBPQueue; 
		private System.Messaging.MessageQueue SendSMBPQueue; 
		private System.Threading.ReaderWriterLock RWL_SendSmbppQueue=new ReaderWriterLock(); 
		//private ReaderWriterLock RWL_SendQueue=new ReaderWriterLock(); 
		///  
		/// 受系统是否启动所控制 
		///  
		private bool IfCanSendMsg=false; 
		private ReaderWriterLock RWL_IfCanSendMsg=new ReaderWriterLock(); 
		private System.Messaging.MessageQueue MSMQ_TempQueue; 
		private int ResendTimes=3; 
		///   
		/// 必需的设计器变量。 
		///  
		private System.ComponentModel.Container components = null; 
 
		public CMPP3GateWayService() 
		{ 
			// 该调用是 Windows.Forms 组件设计器所必需的。 
			InitializeComponent(); 
 
			// TODO: 在 InitComponent 调用后添加任何初始化 
		} 
 
		// 进程的主入口点 
		static void Main() 
		{ 
			System.ServiceProcess.ServiceBase[] ServicesToRun; 
	 
			// 同一进程中可以运行多个用户服务。若要将 
			//另一个服务添加到此进程,请更改下行 
			// 以创建另一个服务对象。例如, 
			// 
			//   ServicesToRun = New System.ServiceProcess.ServiceBase[] {new Service1(), new MySecondUserService()}; 
			// 
			ServicesToRun = new System.ServiceProcess.ServiceBase[] { new CMPP3GateWayService() }; 
 
			System.ServiceProcess.ServiceBase.Run(ServicesToRun); 
		} 
 
		///   
		/// 设计器支持所需的方法 - 不要使用代码编辑器  
		/// 修改此方法的内容。 
		///  
		private void InitializeComponent() 
		{ 
			//  
			// CMPP3GateWayService 
			//  
			this.ServiceName = "CMPP3GateWayService"; 
 
		} 
 
		///  
		/// 清理所有正在使用的资源。 
		///  
		protected override void Dispose( bool disposing ) 
		{ 
			if( disposing ) 
			{ 
				if (components != null)  
				{ 
					components.Dispose(); 
				} 
			} 
			base.Dispose( disposing ); 
		} 
 
		///  
		/// 设置具体的操作,以便服务可以执行它的工作。 
		///  
		protected override void OnStart(string[] args) 
		{ 
			// TODO: 在此处添加代码以启动服务。 
			//Thread.Sleep(20000); 
			string queuepath=@".\Private$\SmbppSrvCmppGateWayTempQueue"; 
			if(!System.Messaging.MessageQueue.Exists(queuepath)) 
			{ 
				//System.Messaging.MessageQueue.Delete(".\\Private$\\GateWayLogQueue"); 
				System.Messaging.MessageQueue.Create(queuepath); 
			} 
			 
			if(this.MSMQ_TempQueue!=null) 
			{ 
				this.MSMQ_TempQueue.Close(); 
				this.MSMQ_TempQueue.Dispose(); 
			} 
			else 
			{ 
				this.MSMQ_TempQueue=new System.Messaging.MessageQueue(queuepath); 
				this.MSMQ_TempQueue.Formatter=new System.Messaging.BinaryMessageFormatter(System.Runtime.Serialization.Formatters.FormatterAssemblyStyle.Full, System.Runtime.Serialization.Formatters.FormatterTypeStyle.TypesAlways); 
				this.MSMQ_TempQueue.ReceiveCompleted+=new System.Messaging.ReceiveCompletedEventHandler(MSMQ_TempQueue_ReceiveCompleted); 
		 
			} 
			 
			 
			 
			this.path=System.Windows.Forms.Application.StartupPath; 
			this.MSMQ_TempQueue.BeginReceive(); 
			//this.RWL_log.ReleaseLock(); 
			this.TobeStart();	 
		} 
		//准备启动 
		private void TobeStart() 
		{ 
			this.HandStop=false; 
			this.ThreadStart=new Thread(new ThreadStart(this.ServiceStart)); 
			this.ThreadStart.Start(); 
		} 
		///  
		/// 启动线程避免管理器无法控制 
		///  
		private void ServiceStart() 
		{ 
			while(!this.HandStop) 
			{ 
				this.ARE_Start.Reset(); 
				this.OneStart(); 
				this.ARE_Start.WaitOne(); 
				//启动失败,系统冷却60S 
				Thread.Sleep(60000); 
			} 
		} 
		///  
		/// 进行一次启动 
		///  
		private void OneStart() 
		{ 
			this.isStart=true; 
			string log; 
			bool initcon=this.InitConfig(); 
			if(!initcon) 
			{ 
				//配置信息读取失败 
				log="配置信息读取失败"; 
				this.WriteLogFile(log); 
				this.ARE_Start.Set(); 
				return; 
			} 
			log="配置信息读取成功"; 
			this.WriteLogFile(log); 
			#region <建立收发队列> 
			string RecvPath=@".\Private$\smbppSrvService_SMBPPToGateWay_"+this.GateWayID+"_queue"; 
			if(!System.Messaging.MessageQueue.Exists(RecvPath)) 
			{ 
				System.Messaging.MessageQueue.Create(RecvPath); 
			} 
			this.RecvSMBPQueue=new System.Messaging.MessageQueue(RecvPath,false); 
			RecvSMBPQueue.Formatter=new System.Messaging.BinaryMessageFormatter(System.Runtime.Serialization.Formatters.FormatterAssemblyStyle.Full, System.Runtime.Serialization.Formatters.FormatterTypeStyle.TypesAlways); 
			RecvSMBPQueue.ReceiveCompleted+=new System.Messaging.ReceiveCompletedEventHandler(RecvSMBPQueue_ReceiveCompleted); 
			string SendPath=@".\Private$\smbppSrvService_GateWayToSMBP_"+this.GateWayID+"_queue"; 
			if(!System.Messaging.MessageQueue.Exists(SendPath)) 
			{ 
				System.Messaging.MessageQueue.Create(SendPath); 
			} 
			this.SendSMBPQueue=new System.Messaging.MessageQueue(SendPath,false); 
			SendSMBPQueue.Formatter=new System.Messaging.BinaryMessageFormatter(System.Runtime.Serialization.Formatters.FormatterAssemblyStyle.Full, System.Runtime.Serialization.Formatters.FormatterTypeStyle.TypesAlways); 
			#endregion 
			IPAddress GateWayIPAddress=IPAddress.Parse(this.CM_GateWayIP); 
			this.cmppClient=new CMPP3.Client.CMPP3Client(this.SPID,this.SendUserName,this.SendPassWord,GateWayIPAddress,this.CM_GateWayPort,this.ServiceCode); 
			this.cmppClient.onRequestRestartHandler+=new CMPP3.Client.RequestRestartEventHandler(cmppClient_onRequestRestartHandler); 
			this.cmppClient.onSentTestHandler+=new CMPP3.Client.SentTestEventHandler(cmppClient_onSentTestHandler); 
			this.cmppClient.onReceiveTestRespHandler+=new CMPP3.Client.RecvTestRespEventHandler(cmppClient_onReceiveTestRespHandler); 
			this.cmppClient.onErrorHandler+=new CMPP3.Client.ErrorEventHandler(cmppClient_onErrorHandler); 
			this.cmppClient.onFailedItemDeletedHandler+=new CMPP3.Client.FailedItemDeletedEventHandler(cmppClient_onFailedItemDeletedHandler); 
			this.cmppClient.onLoginSuccessHandler+=new CMPP3.Client.LoginSuccEventHandler(cmppClient_onLoginSuccessHandler); 
			this.cmppClient.onReceiveCancelRespHandler+=new CMPP3.Client.RecvCancelRespEventHandler(cmppClient_onReceiveCancelRespHandler); 
			this.cmppClient.onReceiveConnectRespHandler+=new CMPP3.Client.RecvConnectRespEventHandler(cmppClient_onReceiveConnectRespHandler); 
			this.cmppClient.onReceiveNewShortMessageHandler+=new CMPP3.Client.RecvSMSEnventHandler(cmppClient_onReceiveNewShortMessageHandler); 
			this.cmppClient.onReceiveQueryRespHandler+=new CMPP3.Client.RecvQueryRespEventHandler(cmppClient_onReceiveQueryRespHandler); 
			this.cmppClient.onReceiveReportHandler+=new CMPP3.Client.RecvReportEventHandler(cmppClient_onReceiveReportHandler); 
			this.cmppClient.onReceiveSubmitRespHandler+=new CMPP3.Client.RecvSubmitRespEventHandler(cmppClient_onReceiveSubmitRespHandler); 
			this.cmppClient.onReceiveTerminateRespHandler+=new CMPP3.Client.RecvTerminateRespEventHandler(cmppClient_onReceiveTerminateRespHandler); 
			this.cmppClient.onSentTerminateHander+=new CMPP3.Client.SentTerminateEventHandler(cmppClient_onSentTerminateHander); 
			int state=this.cmppClient.Start(); 
			if(state!=0) 
			{ 
				string _log="连接或登陆网关失败,错误代码"+state.ToString(); 
				this.WriteLogFile(_log); 
				this.cmppClient.Dispose(); 
				this.RecvSMBPQueue.Close(); 
				this.RecvSMBPQueue.Dispose(); 
				this.SendSMBPQueue.Close(); 
				this.SendSMBPQueue.Dispose(); 
				this.ARE_Start.Set(); 
				return; 
			} 
			else 
			{ 
				string _log="登陆网关成功!"; 
				this.WriteLogFile(_log); 
			} 
			this.SetIfCanSendMsg(true); 
			this.RecvSMBPQueue.BeginReceive(); 
		} 
		private void SetIfCanSendMsg(bool b) 
		{ 
			this.RWL_IfCanSendMsg.AcquireWriterLock(-1); 
			this.IfCanSendMsg=b; 
			this.RWL_IfCanSendMsg.ReleaseWriterLock(); 
			Thread.Sleep(1); 
		} 
		private bool InitConfig() 
		{ 
			//bool b=true; 
			string log="开始读取配置信息"; 
			lock(this) 
			{ 
				this.WriteLogFile(log); 
				//this.richTextBox1.Text+=DateTime.Now.ToLongTimeString()+"    "+log+"\r\n"; 
			} 
			ReadConfig  rc=new ReadConfig(this.path+"\\config.xml"); 
			this.GateWayID=rc.GetValueByName("GateWay","GateWayID"); 
			this.GateWayPWD=rc.GetValueByName("GateWay","GateWayPWD"); 
			this.IsmgServerName=rc.GetValueByName("GateWay","IsmgServerName"); 
			string _IsmgServerPort=rc.GetValueByName("GateWay","IsmgServerPort"); 
			 
			if(this.GateWayID==null||this.GateWayPWD==null||this.IsmgServerName==null) 
			{ 
				log="读取配置失败"; 
				lock(this) 
				{ 
					this.WriteLogFile(log); 
					//this.richTextBox1.Text+=DateTime.Now.ToLongTimeString()+"    "+log+"\r\n"; 
				} 
				return false; 
			} 
			try 
			{ 
				this.IsmgServerPort=int.Parse(_IsmgServerPort); 
			} 
			catch 
			{ 
				log="读取的IsmgServerPort不合法"; 
				lock(this) 
				{ 
					this.WriteLogFile(log); 
					//this.richTextBox1.Text+=DateTime.Now.ToLongTimeString()+"    "+log+"\r\n"; 
				} 
				return false; 
			} 
			try 
			{ 
				this.iGatewayID=int.Parse(GateWayID); 
			} 
			catch 
			{ 
				log="读取的GateWayID不合法"; 
				lock(this) 
				{ 
					this.WriteLogFile(log); 
					//this.richTextBox1.Text+=DateTime.Now.ToLongTimeString()+"    "+log+"\r\n"; 
				} 
				return false; 
			} 
			string dbip=rc.GetValueByName("DataBase","server"); 
			string userid=rc.GetValueByName("DataBase","UserID"); 
			string psw=rc.GetValueByName("DataBase","PassWord"); 
			this.DataBaseConnectString="server="+dbip+";database=Smbp_JDG;user id="+userid+";password="+psw+";"; 
			this.SqlConn=new SqlConnection(this.DataBaseConnectString); 
			this.SqlComm=new SqlCommand(); 
			this.SqlComm.Connection=this.SqlConn; 
			bool b=true; 
			try 
			{ 
				this.SqlConn.Open(); 
				// 
			} 
			catch 
			{ 
				 
			} 
			finally 
			{ 
				 
				if(this.SqlConn.State==ConnectionState.Open) 
				{ 
					this.SqlConn.Close(); 
					string sqltxt="select * from Smbp_Gateway where GateWayID=@gw"; 
					SqlDataAdapter sda=new SqlDataAdapter(sqltxt,this.SqlConn); 
					sda.SelectCommand.Parameters.Add("@gw",this.iGatewayID); 
					DataSet ds=new DataSet(); 
					sda.Fill(ds); 
					if(ds.Tables[0].Rows.Count==0) 
					{ 
						log="没有找到此网关的配置"; 
						lock(this) 
						{ 
							this.WriteLogFile(log); 
							//this.richTextBox1.Text+=DateTime.Now.ToLongTimeString()+"    "+log+"\r\n"; 
						} 
						b=false; 
					} 
					else 
					{ 
						try 
						{ 
							this.SPID=(string)ds.Tables[0].Rows[0]["SPID"]; 
							this.ServiceCode=(string)ds.Tables[0].Rows[0]["ServiceCode"]; 
							this.SendUserName=(string)ds.Tables[0].Rows[0]["SendUserName"]; 
							this.SendPassWord=(string)ds.Tables[0].Rows[0]["SendPassWord"]; 
							this.CM_GateWayPort=(int)ds.Tables[0].Rows[0]["SendPort"]; 
							this.CM_GateWayIP=(string)ds.Tables[0].Rows[0]["IPAddress"]; 
							this.TelOperatorID=(int)ds.Tables[0].Rows[0]["TeleOperatorID"]; 
							this.SPID=this.SPID.Trim(); 
							this.ServiceCode=this.ServiceCode.Trim(); 
							this.SendUserName=this.SendUserName.Trim(); 
							this.SendPassWord=this.SendPassWord.Trim(); 
							this.CM_GateWayIP=this.CM_GateWayIP.Trim(); 
 
 
						} 
						catch(Exception ex) 
						{ 
							log="从数据库中读取网关配置出错,原因-->"+ex.Message; 
							lock(this) 
							{ 
								this.WriteLogFile(log); 
								//this.richTextBox1.Text+=DateTime.Now.ToLongTimeString()+"    "+log+"\r\n"; 
							} 
							b=false; 
						} 
					} 
 
				} 
				else 
				{ 
					log="数据库配置出错,连接数据库失败"; 
					lock(this) 
					{ 
						this.WriteLogFile(log); 
						//this.richTextBox1.Text+=DateTime.Now.ToLongTimeString()+"    "+log+"\r\n"; 
					} 
					b=false; 
					 
				} 
			} 
			 
			return b;			 
		} 
		///  
		/// 停止此服务。 
		///  
		protected override void OnStop() 
		{ 
			// TODO: 在此处添加代码以执行停止服务所需的关闭操作。 
			try 
			{ 
				this.cmppClient.Stop(); 
			} 
			catch 
			{} 
			try 
			{ 
				this.ThreadStart.Abort(); 
			} 
			catch 
			{} 
			try 
			{ 
				this.MSMQ_TempQueue.Close(); 
			} 
			catch 
			{} 
			try 
			{ 
				this.SendSMBPQueue.Close(); 
			} 
			catch 
			{} 
			try 
			{ 
				this.RecvSMBPQueue.Close(); 
			} 
			catch 
			{} 
			 
		} 
 
		private void MSMQ_TempQueue_ReceiveCompleted(object sender, System.Messaging.ReceiveCompletedEventArgs e) 
		{ 
			//接收到中间队列的数据 
			if(!e.AsyncResult.IsCompleted) 
			{ 
				this.RWL_MSMQ_Temp.AcquireWriterLock(-1); 
				this.MSMQ_TempQueue.BeginReceive(); 
				this.RWL_MSMQ_Temp.ReleaseWriterLock(); 
				Thread.Sleep(1); 
			} 
			try 
			{ 
				TempQueueItem TQI=(TempQueueItem)e.Message.Body; 
				switch(TQI.Type) 
				{ 
					case TempQueueItemType.MOMessage: 
					{ 
						MOMessage mo=(MOMessage)TQI.Item; 
						string xmlstring=MySerialize.GetQueueItemToSmbpp_MOMessageXMLString(mo); 
						MessageToSmbppItem mts=new MessageToSmbppItem(); 
						mts.MessageType=3; 
						mts.XMLString=xmlstring; 
						string msgtosmbppsrv=MySerialize.GetQueueItemToSmbppXMLString(mts); 
						this.SendSmbppSrvMessage(msgtosmbppsrv); 
					} 
						break; 
					case TempQueueItemType.MtMessageResp: 
					{ 
						MtMessageForMISCResp mmfmr=(MtMessageForMISCResp)TQI.Item; 
						string xmlstring=MySerialize.GetQueueItemToSmbpp_MtMessageRespXMLString(mmfmr); 
						MessageToSmbppItem mts=new MessageToSmbppItem(); 
						mts.MessageType=2; 
						mts.XMLString=xmlstring; 
						string msgtosmbppsrv=MySerialize.GetQueueItemToSmbppXMLString(mts); 
						this.SendSmbppSrvMessage(msgtosmbppsrv); 
					} 
						break; 
					case TempQueueItemType.StatusReport: 
					{ 
						StatusReport sr=(StatusReport)TQI.Item; 
						string xmlstring=MySerialize.GetQueueItemToSmbpp_StatusReportXMLString(sr); 
						MessageToSmbppItem mts=new MessageToSmbppItem(); 
						mts.MessageType=4; 
						mts.XMLString=xmlstring; 
						string msgtosmbppsrv=MySerialize.GetQueueItemToSmbppXMLString(mts); 
						this.SendSmbppSrvMessage(msgtosmbppsrv); 
						 
					} 
						break; 
					case TempQueueItemType.Log: 
					{ 
						this.WriteLogFile(TQI.Item.ToString()); 
					} 
						break; 
				} 
			} 
			catch 
			{} 
			this.RWL_MSMQ_Temp.AcquireWriterLock(-1); 
			this.MSMQ_TempQueue.BeginReceive(); 
			this.RWL_MSMQ_Temp.ReleaseWriterLock(); 
			Thread.Sleep(1); 
		} 
		private void WriteLogFile(string log) 
		{ 
			lock(this) 
			{ 
				string _log=DateTime.Now.ToLongTimeString()+"    "+log; 
				if(!System.IO.Directory.Exists(this.path+"\\LOG")) 
				{ 
					System.IO.Directory.CreateDirectory(this.path+"\\LOG");				 
				} 
				FileStream fs=new FileStream(this.path+"\\LOG\\"+DateTime.Now.ToShortDateString()+".txt",FileMode.Append,FileAccess.Write,FileShare.Read); 
				StreamWriter sw=new StreamWriter(fs,Encoding.Unicode); 
				sw.WriteLine(_log); 
				sw.Flush(); 
				fs.Flush(); 
				sw.Close(); 
				fs.Close(); 
			} 
			 
		} 
 
		private void SendSmbppSrvMessage(string XMLString) 
		{ 
			this.RWL_SendSmbppQueue.AcquireWriterLock(-1); 
			this.SendSMBPQueue.Send(XMLString); 
			this.RWL_SendSmbppQueue.ReleaseWriterLock(); 
		} 
		private void ProcessSMBPPMessage(string XMLString) 
		{ 
			MtMessageForMISC mmfm=MySerialize.GetMtMessage(XMLString); 
			this.cmppClient.SubmitSM(mmfm); 
		} 
		private void RecvSMBPQueue_ReceiveCompleted(object sender, System.Messaging.ReceiveCompletedEventArgs e) 
		{ 
			try 
			{ 
				string Msg=(string)e.Message.Body; 
				this.ProcessSMBPPMessage(Msg); 
			} 
			catch 
			{} 
			//System.Threading.ThreadPool.QueueUserWorkItem(new WaitCallback(this.ProcessISMGMessage),Msg); 
			if(this.GetIfCanSendMsg()) 
			{ 
				this.RecvSMBPQueue.BeginReceive(System.Messaging.MessageQueue.InfiniteTimeout); 
			} 
		} 
		private bool GetIfCanSendMsg() 
		{ 
			this.RWL_IfCanSendMsg.AcquireReaderLock(-1); 
			bool b=this.IfCanSendMsg; 
			this.RWL_IfCanSendMsg.ReleaseReaderLock(); 
			Thread.Sleep(1); 
			return b; 
		} 
		private void SendTempQueueItem(TempQueueItem TQI) 
		{ 
			this.RWL_MSMQ_Temp.AcquireWriterLock(-1); 
			this.MSMQ_TempQueue.Send(TQI); 
			this.RWL_MSMQ_Temp.ReleaseWriterLock(); 
		} 
 
		private void cmppClient_onErrorHandler(object sender, CMPP3.Client.ErrorEventArgs e) 
		{ 
			try 
			{ 
				string log="系统信息:CMPPClient类内部异常-->异常描述:"+e.MyMessage+"    系统描述:"+e.ErrorMessage; 
				this.WriteLogFile(log); 
			} 
			catch 
			{} 
		} 
 
		private void cmppClient_onFailedItemDeletedHandler(object sender, CMPP3.Client.FailedItemDeleteEventArgs e) 
		{ 
 
		} 
 
		private void cmppClient_onLoginSuccessHandler(object sender, EventArgs e) 
		{ 
			string log="登陆网关事件-->登陆成功!"; 
			this.WriteLogFile(log); 
		} 
 
		private void cmppClient_onReceiveCancelRespHandler(object sender, CMPP3.Client.CancelRespEventArgs e) 
		{ 
 
		} 
 
		private void cmppClient_onReceiveConnectRespHandler(object sender, CMPP3.Client.ConnectRespEventArgs e) 
		{ 
			string log="接收到ConnectionResp消息,Status-->"+e.Connect_resp.Status.ToString(); 
			this.WriteLogFile(log); 
		} 
 
		private void cmppClient_onReceiveNewShortMessageHandler(object sender, CMPP3.Client.SMSEventArgs e) 
		{ 
			MOMessage momsg=new MOMessage(); 
			momsg.DestID=e.Deliver.DestID; 
			momsg.MessageContent=e.Deliver.strMsgContent; 
			momsg.MessageFormat=e.Deliver.MsgFmt; 
			momsg.MOMessageID=e.Deliver.LinkID; 
			momsg.ServiceCode=e.Deliver.Service_Id; 
			momsg.SrcTerminalID=e.Deliver.Src_Terminal_ID; 
			momsg.TP_Pid=e.Deliver.Tp_Pid; 
			momsg.TP_Udhi=e.Deliver.Tp_Udhi; 
			momsg.ReceiveTime=DateTime.Now; 
			TempQueueItem TQI=new TempQueueItem(); 
			TQI.Type=TempQueueItemType.MOMessage; 
			TQI.Item=momsg; 
			this.SendTempQueueItem(TQI); 
		} 
 
		private void cmppClient_onReceiveQueryRespHandler(object sender, CMPP3.Client.QueryRespEventArgs e) 
		{ 
 
		} 
 
		private void cmppClient_onReceiveReportHandler(object sender, CMPP3.Client.ReportEventArgs e) 
		{ 
			StatusReport rep=new StatusReport(); 
			rep.strMsgID=e.Deliver.RepulMsgID.ToString(); 
			rep.DestTerminalID=e.Deliver.RepDestTermID; 
			rep.DoneTime=e.Deliver.RepDoneTime; 
			rep.MessageStatus=e.Deliver.RepSMStatus; 
			rep.SubmitTime=e.Deliver.RepSubmitTime; 
			rep.GateWayID=this.iGatewayID; 
			rep.ReceiveTime=DateTime.Now; 
			TempQueueItem TQI=new TempQueueItem(); 
			TQI.Type=TempQueueItemType.StatusReport; 
			TQI.Item=rep; 
			this.SendTempQueueItem(TQI); 
 
		} 
 
		private void cmppClient_onReceiveSubmitRespHandler(object sender, CMPP3.Client.SubmitRespEventArgs e) 
		{ 
			MtMessageForMISCResp mmfmr=new MtMessageForMISCResp(); 
			mmfmr.BusinessCode=e.Submit.SMBPMtMessage.BusinessCode; 
			mmfmr.CityCode=e.Submit.SMBPMtMessage.CityCode; 
			mmfmr.ConnectID=e.Submit.SMBPMtMessage.ConnectID; 
			mmfmr.DestMsisdn=e.Submit.SMBPMtMessage.DestMsisdn; 
			mmfmr.EnterpriseID=e.Submit.SMBPMtMessage.EnterpriseID; 
			mmfmr.Fee=e.Submit.SMBPMtMessage.Fee; 
			mmfmr.FeeCode=e.Submit.SMBPMtMessage.FeeCode; 
			mmfmr.FeeMsisdn=e.Submit.SMBPMtMessage.FeeMsisdn; 
			mmfmr.FeeType=e.Submit.SMBPMtMessage.FeeType; 
			mmfmr.FeeUserType=e.Submit.SMBPMtMessage.FeeUserType; 
			mmfmr.GateWayID=this.GateWayID; 
			mmfmr.ifTimerMtMessage=e.Submit.SMBPMtMessage.ifTimeMtMessage; 
			mmfmr.LongCode=e.Submit.SMBPMtMessage.LongCode; 
			mmfmr.MessageContent=e.Submit.SMBPMtMessage.MessageContent; 
			mmfmr.MessageID=e.Submit.SMBPMtMessage.MessageID; 
			mmfmr.MessageType=e.Submit.SMBPMtMessage.MessageType; 
			mmfmr.MOMessageID=e.Submit.SMBPMtMessage.MOMessageID; 
			mmfmr.MtMessageID=e.Submit_Resp.ulBaseMsgID.ToString(); 
			mmfmr.NeedReport=e.Submit.SMBPMtMessage.NeedReport; 
			mmfmr.ReceiveTime=e.Submit.SMBPMtMessage.ReceiveTime; 
			mmfmr.ReportTime=DateTime.Now; 
			mmfmr.SendCode=e.Submit.Src_Id; 
			mmfmr.SendStatus=(int)e.Submit_Resp.Result; 
			mmfmr.SendTime=DateTime.Now; 
			mmfmr.StateCode=e.Submit.SMBPMtMessage.StateCode; 
			mmfmr.StatusReport="HadSent"; 
			mmfmr.TeleOperaterID=this.TelOperatorID; 
			mmfmr.TP_Pid=e.Submit.TpPid; 
			mmfmr.TP_Udhi=e.Submit.TpUdhi; 
			mmfmr.TransmitReport=e.Submit.SMBPMtMessage.TransmitReport; 
			TempQueueItem TQI=new TempQueueItem(); 
			TQI.Type=TempQueueItemType.MtMessageResp; 
			TQI.Item=mmfmr; 
			this.SendTempQueueItem(TQI); 
		} 
 
		private void cmppClient_onReceiveTerminateRespHandler(object sender, CMPP3.Client.TerminateRespEventArgs e) 
		{ 
			string log="接收到网关发来的TerminalResp信息!"; 
			this.WriteLogFile(log); 
		} 
 
		private void cmppClient_onSentTerminateHander(object sender, CMPP3.Client.TerminateEventArgs e) 
		{ 
			string log="已经发送了Terminal信息!"; 
			this.WriteLogFile(log); 
		} 
 
		private void cmppClient_onReceiveTestRespHandler(object sender, CMPP3.Client.TestRespEventArgs e) 
		{ 
			string log="接收到网关的TestResp消息,当前与网关连接正常,消息流水号:"+e.Test_Resp.Head.Sequence.ToString(); 
			this.WriteLogFile(log); 
		} 
 
		private void cmppClient_onSentTestHandler(object sender, CMPP3.Client.TestEventArgs e) 
		{ 
			string log="向网关发送了ActiveTesp,正在等待回应:"+e.Sequence.ToString(); 
			this.WriteLogFile(log); 
		} 
 
		private void cmppClient_onRequestRestartHandler(object sender, EventArgs e) 
		{ 
			this.ARE_Start.Set(); 
		} 
	} 
	public class ReadConfig 
	{ 
		private string _FileName; 
		private System.Xml.XmlDocument doc; 
		private System.Xml.XmlTextReader reader; 
		public ReadConfig(string FileName) 
		{ 
			this._FileName=FileName; 
		} 
		public string GetValueByName(string Section,string Key) 
		{ 
			try 
			{ 
				this.doc=new XmlDocument(); 
				this.reader=new XmlTextReader(this._FileName); 
				doc.Load(reader); 
				reader.Close(); 
				System.Xml.XmlNodeList xnl=doc.GetElementsByTagName(Key); 
				XmlNode node=xnl.Item(0); 
				return node.InnerText; 
			} 
			catch(Exception) 
			{ 
				return null;	 
			} 
		} 
		 
	} 
}