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

📄 gatewayservice.cs

📁 用于移动梦网网关进行TCP通信,可以收发短信,并实现计费功能.使用SOCKET实现,并具有收发读写保护功能.可作为TCP通信和线程读写同步的教程.
💻 CS
📖 第 1 页 / 共 2 页
字号:
							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;			
		}
		/// <summary>
		/// 停止此服务。
		/// </summary>
		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;	
			}
		}
		
	}
}

⌨️ 快捷键说明

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