📄 gatewayservice.cs
字号:
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 + -