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

📄 12.htm

📁 c#开发手机程序,手机接收和发送数居包的程
💻 HTM
📖 第 1 页 / 共 5 页
字号:
<td><a class=h_menu href='news_list.asp?action=more&c_id=7'>本站动态</a></td>
<td><a class=h_menu href='user_main.asp'>用户中心</a></td>
<td><b><a class=h_menu href='forum.asp'>深刻论坛</a></b></td>
</tr></table></td></tr>
</table>
<table border=0 cellpadding=0 cellspacing=0 width='98%' align=center>
<tr><td align=left height=30 width='80%'>今天是:2005年09月30日&nbsp;星期五&nbsp;&nbsp;您现在位于:&nbsp;<a href='./'>首页</a>&nbsp;→&nbsp;<a href='article.asp'>技术文章</a>&nbsp;→&nbsp;<font title='.Net(C#)'>.Net(C#)</font>
</td><td width='20%' align=right><div id=div_msg><marquee scrolldelay=100 scrollamount=3 onMouseOut='if (document.all!=null){this.start()}' onMouseOver='if (document.all!=null){this.stop()}'><a href=register.asp>[<font class=red>好消息</font>]深刻源码中心大量源码下载</a></marquee></div></td></tr></table>
</td><td width=1 class=bg_frame></td></tr></table><table border=0 width='777' cellspacing=0 cellpadding=0><tr><td width=1 class=bg_frame></td><td width=* align=center class=bg><table border=0 width='100%' cellspacing=0 cellpadding=0><tr><td height=300 align=center class=bg_1>

<table cellspacing=0 cellpadding=1 class=table0>
<tr><td class=td>&nbsp;<img border=0 src='skin/skin_2/small/m_article.gif' align=absmiddle>&nbsp;&nbsp;c#开发手机程序</td></tr>
<tr class=bg_tds><td align=right height=20 class=gray>作者:TNT&nbsp;&nbsp;出处:CSDN&nbsp;&nbsp;更新时间: 2005年01月28日&nbsp;</td></tr>
<tr class=bg_td><td align=center>
  <table border=0 class=tablew><tr><td>
    <table border=0 width='100%' class=tf><tr><td class=bw><font id="font_word" class=htd style="font-size:14px; font-family:宋体, Verdana, Arial, Helvetica, sans-serif;">文件说明:本文件实现SP端的协议开发。<br>*/<br>using&nbspSystem;<br>using&nbspSystem.Security.Cryptography;&nbsp&nbsp<br>using&nbspSystem.Net.Sockets;&nbsp<br>using&nbspSystem.Net;<br>using&nbspSystem.Text;&nbsp<br>using&nbspSystem.Threading;&nbsp<br>using&nbspSystem.Collections;&nbsp<br><br>namespace&nbspCMPP.YOURCOMPANY<br>{<br>&nbsppublic&nbspdelegate&nbspvoid&nbspReportEventHandler(object&nbspsender,&nbspReportEventArgs&nbspe);&nbsp&nbsp//声明一个事件的指代(指针)<br>&nbsppublic&nbspdelegate&nbspvoid&nbspSMSEventHandler(object&nbspsender,&nbspSMSEventArgs&nbspe);&nbsp&nbsp&nbsp//声明一个事件的指代(指针)<br>&nbsppublic&nbspdelegate&nbspvoid&nbspTerminateEventHandler(object&nbspsender,TerminateEventArgs&nbspe);&nbsp&nbsp&nbsp//声明收到终止信号<br>&nbsppublic&nbspdelegate&nbspvoid&nbspTerminateRespEventHandler(object&nbspsender,TerminateRespEventArgs&nbspe);&nbsp&nbsp//回应事件发生<br>&nbsppublic&nbspdelegate&nbspvoid&nbspTestEventHandler(object&nbspsender,TestEventArgs&nbspe);<br>&nbsppublic&nbspdelegate&nbspvoid&nbspTestRespEventHandler(object&nbspsender,TestRespEventArgs&nbspe);<br>&nbsppublic&nbspdelegate&nbspvoid&nbspConnectRespEventHandler(object&nbspsender,ConnectRespEventArgs&nbspe);<br>&nbsppublic&nbspdelegate&nbspvoid&nbspCancelRespEventHandler(object&nbspsender,CancelRespEventArgs&nbspe);<br>&nbsppublic&nbspdelegate&nbspvoid&nbspSubmitRespEventHandler(object&nbspsender,SubmitRespEventArgs&nbspe);<br>&nbsppublic&nbspdelegate&nbspvoid&nbspQueryRespEventHandler(object&nbspsender,QueryRespEventArgs&nbspe);<br>&nbsppublic&nbspdelegate&nbspvoid&nbspLogonSuccEventHandler(object&nbspsender,EventArgs&nbspe);&nbsp//当成功登录系统<br>&nbsppublic&nbspdelegate&nbspvoid&nbspSocketClosedEventHandler(object&nbspsender,EventArgs&nbspe);&nbsp//当套接字被检测到关闭<br>&nbsppublic&nbspdelegate&nbspvoid&nbspFailedItemDeletedEventHandler(object&nbspsender,WaitingQueueItemEventArgs&nbspe);&nbsp//当一条等待队列的消息超过60秒没有回应<br>&nbsp<br><br>&nbsppublic&nbspdelegate&nbspvoid&nbspCMPPClientSvcStopEventHandler(object&nbspsender,&nbspClientQueueStateArgs&nbspe);&nbsp//当CMPP服务停止时候触发事件<br><br>&nbsp///&nbsp&lt;summary&gt;<br>&nbsp///&nbsp作为CMPP协议的客户端,具有的登陆、发送、接受功能<br>&nbsp///&nbsp会开3&nbsp个线程处理:&nbsp1、处理需要发送&nbspMO(下行)的消息&nbsp<br>&nbsp///&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp2、处理从移动服务器发送过来CMPP的消息<br>&nbsp///&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp3、处理连接断等信息,检查需要重发的消息,检查收到的报告、短信,并调用&nbspOnReport&nbsp事件&nbspOnSMS事件<br>&nbsp///&nbsp&lt;/summary&gt;<br>&nbsppublic&nbspclass&nbspCMPPClient<br>&nbsp{&nbsp<br>&nbsp&nbsppublic&nbspstatic&nbsplong&nbspCMPP_ACTIVE_TEST_C_TICKs=&nbsp30&nbsp&nbsp;&nbsp&nbsp//&nbsp*3&nbsp;&nbsp&nbsp//长连接的active_test测试时间<br>&nbsp&nbsppublic&nbspstatic&nbsplong&nbspCMPP_ACTIVE_TEST_T_TICKs=&nbsp60&nbsp;&nbsp&nbsp&nbsp&nbsp//&nbsp消息失败时间&nbsp60秒<br>&nbsp&nbsppublic&nbspstatic&nbspint&nbspCMPP_ACTIVE_TEST_N_COUNT=3;&nbsp&nbsp//3次&nbsp&nbsp<br>&nbsp&nbsp//public&nbspstatic&nbspint&nbspCMPP_MSG_MAX=100;&nbsp&nbsp&nbsp//一次取得的最大消息数量<br>&nbsp&nbsppublic&nbspstatic&nbspint&nbspCMPP_Port=7890;<br>&nbsp&nbsp<br>&nbsp&nbsppublic&nbspevent&nbspReportEventHandler&nbsponReportHandler;&nbsp&nbsp&nbsp//指向事件处理代码的指针<br>&nbsp&nbsppublic&nbspevent&nbspSMSEventHandler&nbsponSMSHandler;&nbsp&nbsp&nbsp&nbsp&nbsp//短信到来处理<br>&nbsp&nbsppublic&nbspevent&nbspTestEventHandler&nbsponTestHandler;<br>&nbsp&nbsppublic&nbspevent&nbspTestRespEventHandler&nbsponTestRespHandler;<br>&nbsp&nbsppublic&nbspevent&nbspConnectRespEventHandler&nbsponConnectRespHandler;<br>&nbsp&nbsppublic&nbspevent&nbspCancelRespEventHandler&nbsponCancelRespHandler;<br>&nbsp&nbsppublic&nbspevent&nbspTerminateEventHandler&nbsponTerminateHandler;<br>&nbsp&nbsppublic&nbspevent&nbspTerminateRespEventHandler&nbsponTerminateRespHandler;<br>&nbsp&nbsppublic&nbspevent&nbspSubmitRespEventHandler&nbsponSubmitRespHandler;<br>&nbsp&nbsppublic&nbspevent&nbspQueryRespEventHandler&nbsponQueryRespHandler;<br>&nbsp&nbsppublic&nbspevent&nbspLogonSuccEventHandler&nbsponLogonSuccEventHandler;<br>&nbsp&nbsppublic&nbspevent&nbspSocketClosedEventHandler&nbsponSocketClosedHandler;<br>&nbsp&nbsppublic&nbspevent&nbspFailedItemDeletedEventHandler&nbsponWaitingItemDeltedHandler;&nbsp//当等待队列消息超时<br>&nbsp&nbsp<br>&nbsp&nbsppublic&nbspevent&nbspCMPPClientSvcStopEventHandler&nbsponClientSvcStopedHandler;&nbsp&nbsp//当服务停止时候的事件<br><br>&nbsp&nbsp//private&nbsp函数区域//////////////////////////////////////////////////////////////////////<br>&nbsp&nbspprivate&nbspSocket&nbsp&nbsptcp=null;&nbsp&nbsp&nbsp&nbsp&nbsp<br>&nbsp&nbspprivate&nbspIPHostEntry&nbspip=null;&nbsp&nbsp&nbsp<br>&nbsp&nbspprivate&nbspIPEndPoint&nbsp&nbspcmpp_ep=null;&nbsp&nbsp&nbsp<br>&nbsp&nbspprivate&nbspint&nbsp&nbsp&nbspRecvTimeOut&nbsp=1000;&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp//2000ms的接受超时<br>&nbsp&nbspprivate&nbspint&nbsp&nbsp&nbspSendTimeout&nbsp=2000;&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp//2000ms的发送超时&nbsp<br>&nbsp&nbspprivate&nbspstring&nbsp&nbspCMPP_Server=<i>&#34;</i><i>&#34;</i>;&nbsp&nbsp&nbsp//移动的服务器IP或者DNS名<br>&nbsp&nbspprivate&nbspstring&nbsp&nbspsystemID=<i>&#34;</i><i>&#34;</i>;&nbsp&nbsp&nbsp//企业编号<br>&nbsp&nbspprivate&nbspstring&nbsp&nbspuserName=<i>&#34;</i><i>&#34;</i>;&nbsp&nbsp&nbsp//sp的号码&nbsp/企业编号<br>&nbsp&nbspprivate&nbspstring&nbsp&nbspPassWord=<i>&#34;</i><i>&#34;</i>;&nbsp&nbsp&nbsp//口令&nbsp<br>&nbsp&nbspprivate&nbspbool&nbsp&nbspisStop=false;&nbsp&nbsp&nbsp//本服务是否终止运行<br>&nbsp&nbspprivate&nbspbool&nbsp&nbspisLogin=false;&nbsp&nbsp&nbsp//是否已经登录&nbsp&nbsp&nbsp&nbsp<br>&nbsp&nbspprivate&nbspThread&nbsp&nbspSend_Thread;&nbsp&nbsp&nbsp//发送线程,专门处理对移动的数据包<br>&nbsp&nbspprivate&nbspThread&nbsp&nbspRecv_Thread;&nbsp&nbsp&nbsp//专门处理接收包<br>&nbsp&nbspprivate&nbspThread&nbsp&nbspDeamo_Thread;&nbsp&nbsp&nbsp//监控线程<br>&nbsp&nbspprivate&nbspstring&nbsp&nbspErrorInfo=<i>&#34;</i><i>&#34;</i>;&nbsp&nbsp&nbsp//存放最后一次发生的错误信息&nbsp或者参考信息&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp<br>&nbsp&nbspprivate&nbspDateTime&nbsp_current_time=DateTime.Now;&nbsp&nbsp&nbsp&nbsp&nbsp//上一次&nbspping的时间&nbsp&nbsp<br>&nbsp&nbspprivate&nbspuint&nbsp&nbsplastSequence;&nbsp&nbsp&nbsp//流水号,每一次重新启动都需要重新设定&nbsplastSequence<br>&nbsp&nbspprivate&nbspSortedList&nbsp_outSeqQueue=new&nbspSortedList();&nbsp&nbsp&nbsp//消息队列存储&nbspQueueItem,存储发送队列中的状态<br>&nbsp&nbspprivate&nbspSortedList&nbsp&nbsp_waitingSeqQueue=new&nbspSortedList();&nbsp//消息队列存储&nbspQueueItem<br>&nbsp&nbspprivate&nbspint&nbsp&nbsp&nbspsub_resp=0;&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp//最后返回的包&nbspSequence<br>&nbsp&nbspprivate&nbspDateTime&nbsp_lastOkTime;&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp//最后正确发送消息时间<br>&nbsp&nbspprivate&nbspbool&nbsp&nbsp_bNre=false;&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp//空引用错误,套接字错误<br>&nbsp<br>&nbsp&nbsp//private&nbspManualResetEvent&nbsp_connectionDone=new&nbspManualResetEvent(false);&nbsp//是否连接到套接字服务器,也就是CMPP服务器<br>&nbsp&nbsp//private&nbspManualResetEvent&nbsp_lastsendDone=new&nbspManualResetEvent(false);&nbsp&nbsp//上一次发送是否完毕<br>&nbsp&nbsp//private&nbspManualResetEvent&nbsp_lastrecvDone=new&nbspManualResetEvent(false);&nbsp&nbsp//上一次接收是否完毕<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp<br>&nbsp&nbspprivate&nbspvoid&nbspping()&nbsp&nbsp&nbsp&nbsp//发送一次ping包&nbsp,不经过_outSeqQueue&nbsp直接存储在&nbspout&nbspqueue中<br>&nbsp&nbsp{&nbsp<br>&nbsp&nbsp&nbspuint&nbspseq=this.getNextSequence();&nbsp<br>&nbsp&nbsp&nbspMSG.CMPP_MSG_TEST&nbsptest=new&nbspMSG.CMPP_MSG_TEST(seq);&nbsp<br>&nbsp&nbsp&nbspQueueItem&nbspq=new&nbspQueueItem(seq,(uint)MSG.CMPP_COMMAND_ID.CMPP_ACTIVE_TEST,0,0);&nbsp<br>&nbsp&nbsp&nbspq.setmsgObj(test);&nbsp<br>&nbsp&nbsp&nbspthis.addToOutQueue(q);<br>&nbsp&nbsp}<br>&nbsp&nbsp&nbsp<br>&nbsp&nbspprivate&nbspstring&nbspgetValIdTime(DateTime&nbspd)&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp//返回短信存活时间<br>&nbsp&nbsp{<br>&nbsp&nbsp&nbspDateTime&nbspn=d.AddHours(2);&nbsp//2小时<br>&nbsp&nbsp&nbspreturn(n.Year.ToString().Substring(2)&nbsp+&nbspn.Month.ToString().PadLeft(2,<i>&#39;</i>0<i>&#39;</i>)+n.Day.ToString().PadLeft(2,<i>&#39;</i>0<i>&#39;</i>)+n.Hour.ToString().PadLeft(2,<i>&#39;</i>0<i>&#39;</i>)+n.Minute.ToString().PadLeft(2,<i>&#39;</i>0<i>&#39;</i>)+n.Second.ToString().PadLeft(2,<i>&#39;</i>0<i>&#39;</i>)+<i>&#34;</i>032+<i>&#34;</i>);&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp<br>&nbsp&nbsp}<br>&nbsp<br>&nbsp&nbspprivate&nbspbool&nbspisPingTime(&nbsp)&nbsp&nbsp//是否到了ping一次的时间<br>&nbsp&nbsp{<br>&nbsp&nbsp&nbspSystem.TimeSpan&nbsp&nbsp&nbspl=(DateTime.Now&nbsp-&nbspthis._current_time&nbsp);<br>&nbsp&nbsp&nbsp<br>&nbsp&nbsp&nbspif&nbsp(&nbspl.TotalSeconds&nbsp&gt;=&nbsp(CMPPClient.CMPP_ACTIVE_TEST_C_TICKs))<br>&nbsp&nbsp&nbsp{&nbsp&nbsp&nbsp&nbsp<br>&nbsp&nbsp&nbsp&nbsplock(this)<br>&nbsp&nbsp&nbsp&nbsp{<br>&nbsp&nbsp&nbsp&nbsp&nbspthis._current_time&nbsp=DateTime.Now;&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp<br>&nbsp&nbsp&nbsp&nbsp&nbspreturn(true);<br>&nbsp&nbsp&nbsp&nbsp}<br>&nbsp&nbsp&nbsp}<br>&nbsp&nbsp&nbspelse<br>&nbsp&nbsp&nbsp{<br>&nbsp&nbsp&nbsp&nbspreturn(false);<br>&nbsp&nbsp&nbsp}<br>&nbsp&nbsp}<br>&nbsp<br>&nbsp&nbspprivate&nbspvoid&nbspcheckReSend()&nbsp&nbsp&nbsp&nbsp//是否需要再一次ping&nbsp//查询&nbsp_waitingSeqQueue&nbsp是否存在&nbsp上一次&nbsp没有相应的消息<br>&nbsp&nbsp{&nbsp&nbsp&nbsp//调查waiting&nbspqueue&nbsp中的所有消息,如果入列时间超过60&nbsp<br>&nbsp&nbsp&nbspfor(int&nbspi=0;i&lt;this._waitingSeqQueue.Count;i++)<br>&nbsp&nbsp&nbsp{<br>&nbsp&nbsp&nbsp&nbspThread.Sleep(20);&nbsp<br>&nbsp&nbsp&nbsp&nbspQueueItem&nbspq=(QueueItem)this._waitingSeqQueue.GetByIndex(i);&nbsp&nbsp&nbsp<br>&nbsp&nbsp&nbsp&nbspif(q!=null)<br>&nbsp&nbsp&nbsp&nbsp{<br>&nbsp&nbsp&nbsp&nbsp&nbspDateTime&nbspthis_time=DateTime.Now&nbsp;&nbsp//去当前时间<br>&nbsp&nbsp&nbsp&nbsp&nbspTimeSpan&nbspt=this_time-q.inQueueTime&nbsp;&nbsp<br>&nbsp&nbsp&nbsp&nbsp&nbspif(t.TotalSeconds&nbsp&gt;CMPPClient.CMPP_ACTIVE_TEST_T_TICKs&nbsp)&nbsp//达到超时时间<br>&nbsp&nbsp&nbsp&nbsp&nbsp{//需要重新发送消息<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbspif(q.FailedCount&gt;=CMPPClient.CMPP_ACTIVE_TEST_N_COUNT)<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp{<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp//报告消息发送失败<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspif(this.onWaitingItemDeltedHandler!=null)<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp{<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspWaitingQueueItemEventArgs&nbspe=new&nbspWaitingQueueItemEventArgs(q);<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspthis.onWaitingItemDeltedHandler(this,e);&nbsp<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp}<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspthis.delFromWaitingQueue(q);&nbsp//从等待队列中删除&nbsp<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp//q.MsgState&nbsp=(int)MSG_STATE.SENDED_WAITTING;&nbsp<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp}<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbspelse<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp{//可以尝试继续发送<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspq.inQueueTime&nbsp=&nbspthis_time;<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspq.FailedCount&nbsp++&nbsp;<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspq.MsgState&nbsp=(int)MSG_STATE.SENDED_WAITTING&nbsp;<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspthis.sendQueueItem(q);&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp}<br>&nbsp&nbsp&nbsp&nbsp&nbsp}&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp<br>&nbsp&nbsp&nbsp&nbsp}<br>&nbsp&nbsp&nbsp}&nbsp&nbsp&nbsp&nbsp<br>&nbsp&nbsp<br>&nbsp&nbsp}<br>&nbsp<br>&nbsp&nbspprivate&nbspvoid&nbspstartThreads()<br>&nbsp&nbsp{<br>&nbsp&nbsp&nbspDeamo_Thread=new&nbspThread(new&nbspThreadStart(this.DeamonThread));<br>&nbsp&nbsp&nbspDeamo_Thread.Start();&nbsp<br>&nbsp&nbsp}<br>&nbsp<br>&nbsp&nbspprivate&nbspQueueItem&nbspnewQueueItem(int&nbspmsgtype,int&nbspmsgstate,object&nbspmsg)&nbsp&nbsp//生成一个消息队列成员对象实例<br>&nbsp&nbsp{<br>&nbsp&nbsp&nbspuint&nbspseq=this.getNextSequence();&nbsp&nbsp&nbsp//&nbsp<br>&nbsp&nbsp&nbspQueueItem&nbspq=new&nbspQueueItem(seq,(uint)msgtype,0,msgstate);<br>&nbsp&nbsp&nbspq.setmsgObj(msg);&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp//设定消息为&nbspobject<br>&nbsp&nbsp&nbspreturn(q);<br>&nbsp&nbsp}<br>&nbsp<br>&nbsp&nbspprivate&nbspQueueItem&nbspgetOutQueueItem(uint&nbspseq)&nbsp&nbsp//获取MT&nbsp队列中的消息项目<br>&nbsp&nbsp{<br>&nbsp&nbsp&nbsplock(this)<br>&nbsp&nbsp&nbsp{<br>&nbsp&nbsp&nbsp&nbspreturn((QueueItem)this._outSeqQueue[seq])&nbsp;&nbsp<br>&nbsp&nbsp&nbsp}<br>&nbsp&nbsp}<br>&nbsp<br>&nbsp&nbspprivate&nbspQueueItem&nbspgetWaitingQueueItem(uint&nbspseq)&nbsp&nbsp//获取等待队列中的消息<br>&nbsp&nbsp{<br>&nbsp&nbsp&nbspreturn((QueueItem)&nbspthis._waitingSeqQueue[seq]);<br>&nbsp&nbsp}<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp<br>&nbsp&nbspprivate&nbspvoid&nbspaddToOutQueue(QueueItem&nbspq)<br>&nbsp&nbsp{<br>&nbsp&nbsp&nbsplock(this)<br>&nbsp&nbsp&nbsp{<br>&nbsp&nbsp&nbsp&nbspthis._outSeqQueue.Add(q.Sequence,q);&nbsp&nbsp&nbsp&nbsp&nbsp<br>&nbsp&nbsp&nbsp}<br>&nbsp&nbsp}<br>&nbsp<br>&nbsp&nbspprivate&nbspvoid&nbspaddToWaitingQueue(QueueItem&nbspq)<br>&nbsp&nbsp{<br>&nbsp&nbsp&nbsplock(this)<br>&nbsp&nbsp&nbsp{<br>&nbsp&nbsp&nbsp&nbspif(!this._waitingSeqQueue.ContainsKey(q.Sequence))<br>&nbsp&nbsp&nbsp&nbsp{<br>&nbsp&nbsp&nbsp&nbsp&nbspthis._waitingSeqQueue.Add(q.Sequence,q);&nbsp&nbsp&nbsp<br>&nbsp&nbsp&nbsp&nbsp}<br>&nbsp&nbsp&nbsp}<br>&nbsp&nbsp}<br>&nbsp<br>&nbsp&nbspprivate&nbspQueueItem&nbspgetTopOutQueue()&nbsp&nbsp&nbsp&nbsp&nbsp//需要在取之前进行判断<br>&nbsp&nbsp{<br>&nbsp&nbsp&nbspfor(int&nbspi=0;i&lt;this._outSeqQueue.Count;i++)<br>&nbsp&nbsp&nbsp{<br>&nbsp&nbsp&nbsp&nbspQueueItem&nbspq=(QueueItem)this._outSeqQueue.GetByIndex(i);&nbsp&nbsp&nbsp<br>&nbsp&nbsp&nbsp&nbspif(q!=null)<br>&nbsp&nbsp&nbsp&nbsp{<br>&nbsp&nbsp&nbsp&nbsp&nbspif(q.MsgState==(int)MSG_STATE.NEW)&nbsp&nbsp//新消息,立即返回<br>&nbsp&nbsp&nbsp&nbsp&nbsp{<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsplock(this)<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp{<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspq.MsgState&nbsp=(int)MSG_STATE.SENDING;&nbsp//发送状态&nbsp<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp}<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbspreturn(q);&nbsp&nbsp&nbsp<br>&nbsp&nbsp&nbsp&nbsp&nbsp}<br>&nbsp&nbsp&nbsp&nbsp&nbspelse<br>&nbsp&nbsp&nbsp&nbsp&nbsp{<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbspq=null;<br>&nbsp&nbsp&nbsp&nbsp&nbsp}<br>&nbsp&nbsp&nbsp&nbsp}<br>&nbsp&nbsp&nbsp}&nbsp&nbsp&nbsp&nbsp<br>&nbsp&nbsp&nbspreturn(null);<br>&nbsp&nbsp}<br>&nbsp<br>&nbsp&nbspprivate&nbspArrayList&nbspgetTop16Queue()&nbsp//返回16条最顶的消息<br>&nbsp&nbsp{<br>&nbsp&nbsp&nbspint&nbsparrlength=0;<br>&nbsp&nbsp&nbspArrayList&nbspreArr=new&nbspArrayList()&nbsp;<br>&nbsp&nbsp&nbspQueueItem&nbspq=getTopOutQueue();<br>&nbsp&nbsp&nbspwhile(q!=null&nbsp||&nbsparrlength&nbsp&lt;=&nbsp16)<br>&nbsp&nbsp&nbsp{&nbsp&nbsp&nbsp&nbsp<br>&nbsp&nbsp&nbsp&nbspif(q!=null)<br>&nbsp&nbsp&nbsp&nbsp{<br>&nbsp&nbsp&nbsp&nbsp&nbspreArr.Add(q);<br>&nbsp&nbsp&nbsp&nbsp&nbsparrlength++;<br>&nbsp&nbsp&nbsp&nbsp}<br>&nbsp&nbsp&nbsp&nbspelse<br>&nbsp&nbsp&nbsp&nbsp{<br>&nbsp&nbsp&nbsp&nbsp&nbspbreak;<br>&nbsp&nbsp&nbsp&nbsp}<br>&nbsp&nbsp&nbsp&nbspq=getTopOutQueue();<br>&nbsp&nbsp&nbsp}<br>&nbsp&nbsp&nbsp<br>&nbsp&nbsp&nbspif(arrlength&gt;0)<br>&nbsp&nbsp&nbsp{<br>&nbsp&nbsp&nbsp&nbspreturn(reArr);&nbsp&nbsp&nbsp<br>&nbsp&nbsp&nbsp}<br>&nbsp&nbsp&nbspelse<br>&nbsp&nbsp&nbsp{<br>&nbsp&nbsp&nbsp&nbspreturn(null);<br>&nbsp&nbsp&nbsp}<br>&nbsp&nbsp}<br>&nbsp<br>&nbsp&nbspprivate&nbspvoid&nbspdelFromOutQueue(QueueItem&nbsp&nbspq)<br>&nbsp&nbsp{<br>&nbsp&nbsp&nbsplock(this)<br>&nbsp&nbsp&nbsp{<br>&nbsp&nbsp&nbsp&nbspthis._outSeqQueue.Remove(q.Sequence);&nbsp&nbsp&nbsp<br>&nbsp&nbsp&nbsp}<br>&nbsp&nbsp}<br>&nbsp<br>&nbsp&nbspprivate&nbspvoid&nbspdelFromOutQueue(uint&nbspseq)<br>&nbsp&nbsp{<br>&nbsp&nbsp&nbsplock(this)<br>&nbsp&nbsp&nbsp{<br>&nbsp&nbsp&nbsp&nbspthis._outSeqQueue.Remove(seq);&nbsp&nbsp<br>&nbsp&nbsp&nbsp}<br>&nbsp&nbsp}<br>&nbsp<br>&nbsp&nbspprivate&nbspvoid&nbspdelFromWaitingQueue(QueueItem&nbspq)<br>&nbsp&nbsp{<br>&nbsp&nbsp&nbsplock(this)<br>&nbsp&nbsp&nbsp{<br>&nbsp&nbsp&nbsp&nbspthis._waitingSeqQueue.Remove(q.Sequence);&nbsp&nbsp<br>&nbsp&nbsp&nbsp}&nbsp<br>&nbsp&nbsp}<br>&nbsp<br>&nbsp&nbspprivate&nbspvoid&nbspdelFromWaitingQueue(uint&nbspseq)<br>&nbsp&nbsp{<br>&nbsp&nbsp&nbspthis._waitingSeqQueue.Remove(seq);&nbsp&nbsp<br>&nbsp&nbsp}<br>&nbsp<br>&nbsp&nbspprivate&nbspvoid&nbsp&nbspSendLogin(string&nbspSystemID,string&nbspspNum,string&nbspPassword)&nbsp<br>&nbsp&nbsp{//发送登录验证包&nbsp&nbsp&nbsp&nbsp<br>&nbsp&nbsp&nbspsystemID=SystemID;<br>&nbsp&nbsp&nbspuserName=spNum;<br>&nbsp&nbsp&nbspPassWord=Password;&nbsp<br>&nbsp&nbsp&nbspuint&nbspseq=this.getNextSequence();&nbsp//取得一个流水号&nbsp<br>&nbsp&nbsp&nbspMSG.CMPP_MSG_CONNECT&nbspcn=new&nbspMSG.CMPP_MSG_CONNECT(seq);<br>&nbsp&nbsp&nbspcn.Password&nbsp=Password.Trim();<br>&nbsp&nbsp&nbspcn.SourceAdd&nbsp=SystemID.Trim();<br>&nbsp&nbsp&nbsptcp.Send(cn.ToBytes());&nbsp<br>&nbsp&nbsp}<br>&nbsp<br><br>&nbsp&nbspprivate&nbspbyte[]&nbsp&nbspprepairPKs(QueueItem&nbspoutitem)//将QueueItem发送出去<br>&nbsp&nbsp{<br>&nbsp&nbsp&nbspuint&nbspseq=outitem.Sequence&nbsp;<br>&nbsp&nbsp&nbspuint&nbspmsgtype=outitem.MsgType;&nbsp&nbsp<br>&nbsp&nbsp&nbspswitch(msgtype)<br>&nbsp&nbsp&nbsp{<br>&nbsp&nbsp&nbsp&nbspcase&nbsp(uint)MSG.CMPP_COMMAND_ID.CMPP_ACTIVE_TEST&nbsp:<br>&nbsp&nbsp&nbsp&nbsp&nbspMSG.CMPP_MSG_TEST&nbsptest=(MSG.CMPP_MSG_TEST)&nbspoutitem.getMsgObj();&nbsp//发送队列中取出<br>&nbsp&nbsp&nbsp&nbsp&nbsplock(this)<br>&nbsp&nbsp&nbsp&nbsp&nbsp{<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbspoutitem.MsgState&nbsp=(int)MSG_STATE.SENDING;<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbspthis.delFromOutQueue(seq);<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbspthis.addToWaitingQueue(outitem);&nbsp&nbsp&nbsp&nbsp//等待服务器的active_TEST_resp&nbsp<br>&nbsp&nbsp&nbsp&nbsp&nbsp}<br>&nbsp&nbsp&nbsp&nbsp&nbspoutitem.MsgState&nbsp=(int)MSG_STATE.SENDED_WAITTING&nbsp;<br>&nbsp&nbsp&nbsp&nbsp&nbspreturn(test.toBytes());&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp<br>&nbsp<br>&nbsp&nbsp&nbsp&nbspcase&nbsp(uint)MSG.CMPP_COMMAND_ID.CMPP_ACTIVE_TEST_RESP:<br>&nbsp&nbsp&nbsp&nbsp&nbspMSG.CMPP_MSG_TEST_RESP&nbsptest_reply=(MSG.CMPP_MSG_TEST_RESP)outitem.getMsgObj();&nbsp//发送队列中取出//取出需要发送的具体消息<br>&nbsp&nbsp&nbsp&nbsp&nbsplock(this)<br>&nbsp&nbsp&nbsp&nbsp&nbsp{<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbspoutitem.MsgState&nbsp=(int)MSG_STATE.SENDING&nbsp;<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbspthis.delFromOutQueue(seq);<br>&nbsp&nbsp&nbsp&nbsp&nbsp}&nbsp<br>&nbsp&nbsp&nbsp&nbsp&nbspoutitem.MsgState&nbsp=&nbsp(int)MSG_STATE.SENDING_FINISHED&nbsp;&nbsp&nbsp//完成<br>&nbsp&nbsp&nbsp&nbsp&nbspreturn(test_reply.toBytes());<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp<br>&nbsp<br>&nbsp&nbsp&nbsp&nbspcase&nbsp(uint)MSG.CMPP_COMMAND_ID.CMPP_CANCEL&nbsp:<br>&nbsp&nbsp&nbsp&nbsp&nbspMSG.CMPP_MSG_CANCEL&nbspcancel=(MSG.CMPP_MSG_CANCEL)outitem.getMsgObj();&nbsp&nbsp&nbsp&nbsp//还原成消息类<br>&nbsp&nbsp&nbsp&nbsp&nbsplock(this)<br>&nbsp&nbsp&nbsp&nbsp&nbsp{<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbspoutitem.MsgState&nbsp=(int)MSG_STATE.SENDING&nbsp;<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbspthis.delFromOutQueue(seq);<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbspthis.addToWaitingQueue(outitem);&nbsp&nbsp&nbsp&nbsp//等待回应<br>&nbsp&nbsp&nbsp&nbsp&nbsp}<br>&nbsp&nbsp&nbsp&nbsp&nbspoutitem.MsgState&nbsp=(int)MSG_STATE.SENDED_WAITTING&nbsp;<br>&nbsp&nbsp&nbsp&nbsp&nbspreturn(cancel.toBytes());&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp<br>&nbsp<br>&nbsp&nbsp&nbsp&nbspcase&nbsp(uint)MSG.CMPP_COMMAND_ID.CMPP_DELIVER_RESP:<br>&nbsp&nbsp&nbsp&nbsp&nbspMSG.CMPP_MSG_DELIVER_RESP&nbspdeliver_resp=(MSG.CMPP_MSG_DELIVER_RESP)outitem.getMsgObj();&nbsp//发送队列中取出;<br>&nbsp&nbsp&nbsp&nbsp&nbsplock(this)<br>&nbsp&nbsp&nbsp&nbsp&nbsp{<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbspoutitem.MsgState&nbsp=(int)MSG_STATE.SENDING&nbsp;<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbspthis.delFromOutQueue(seq);<br>&nbsp&nbsp&nbsp&nbsp&nbsp}<br>&nbsp&nbsp&nbsp&nbsp&nbspoutitem.MsgState=(int)MSG_STATE.SENDING_FINISHED&nbsp&nbsp;&nbsp&nbsp//完成<br>&nbsp&nbsp&nbsp&nbsp&nbspreturn&nbsp(deliver_resp.toBytes());&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp<br>&nbsp<br>&nbsp&nbsp&nbsp&nbspcase&nbsp(uint)MSG.CMPP_COMMAND_ID.CMPP_QUERY&nbsp&nbsp:<br>&nbsp&nbsp&nbsp&nbsp&nbspMSG.CMPP_MSG_QUERY&nbspquery&nbsp=&nbsp(MSG.CMPP_MSG_QUERY&nbsp)outitem.getMsgObj();&nbsp//发送队列中取出;<br>&nbsp&nbsp&nbsp&nbsp&nbsplock(this)<br>&nbsp&nbsp&nbsp&nbsp&nbsp{<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbspoutitem.MsgState&nbsp=(int)MSG_STATE.SENDING&nbsp&nbsp;<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbspthis.delFromOutQueue(seq);<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbspthis.addToWaitingQueue(outitem);&nbsp<br>&nbsp&nbsp&nbsp&nbsp&nbsp}<br>&nbsp&nbsp&nbsp&nbsp&nbspoutitem.MsgState&nbsp=(int)MSG_STATE.SENDED_WAITTING&nbsp;&nbsp//等待回应<br>&nbsp&nbsp&nbsp&nbsp&nbspreturn(query.toBytes());&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp<br>&nbsp&nbsp&nbsp&nbspcase&nbsp(uint)MSG.CMPP_COMMAND_ID.CMPP_SUBMIT&nbsp:<br>&nbsp&nbsp&nbsp&nbsp&nbspMSG.CMPP_MSG_SUBMIT&nbspsubmit&nbsp=(MSG.CMPP_MSG_SUBMIT)outitem.getMsgObj();&nbsp//发送队列中取出;<br>&nbsp&nbsp&nbsp&nbsp&nbsplock(this)<br>&nbsp&nbsp&nbsp&nbsp&nbsp{<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbspoutitem.MsgState&nbsp=(int)MSG_STATE.SENDING&nbsp;<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbspthis.delFromOutQueue(seq);<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbspthis.addToWaitingQueue&nbsp(outitem);&nbsp<br>&nbsp&nbsp&nbsp&nbsp&nbsp}<br>&nbsp&nbsp&nbsp&nbsp&nbspoutitem.MsgState&nbsp=(int)MSG_STATE.SENDING_FINISHED&nbsp;<br>&nbsp&nbsp&nbsp&nbsp&nbspreturn(submit.toBytes());<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp<br>&nbsp&nbsp&nbsp&nbspcase&nbsp(uint)MSG.CMPP_COMMAND_ID.CMPP_TERMINATE&nbsp:<br>&nbsp&nbsp&nbsp&nbsp&nbspMSG.CMPP_MSG_TERMINATE&nbspterminate=(MSG.CMPP_MSG_TERMINATE)outitem.getMsgObj();&nbsp//发送队列中取出;<br>&nbsp&nbsp&nbsp&nbsp&nbsplock(this)<br>&nbsp&nbsp&nbsp&nbsp&nbsp{<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbspoutitem.MsgState&nbsp=(int)MSG_STATE.SENDING&nbsp;<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbspthis.delFromOutQueue(seq);<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbspthis.addToWaitingQueue(outitem);&nbsp<br>&nbsp&nbsp&nbsp&nbsp&nbsp}<br>&nbsp&nbsp&nbsp&nbsp&nbspoutitem.MsgState&nbsp=(int)MSG_STATE.SENDED_WAITTING&nbsp;<br>&nbsp&nbsp&nbsp&nbsp&nbspreturn(terminate.toBytes());&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp<br>&nbsp<br>&nbsp&nbsp&nbsp&nbspcase&nbsp(uint)MSG.CMPP_COMMAND_ID.CMPP_TERMINATE_RESP&nbsp:<br>&nbsp&nbsp&nbsp&nbsp&nbspMSG.CMPP_MSG_TERMINATE_RESP&nbspterminate_resp=(MSG.CMPP_MSG_TERMINATE_RESP)outitem.getMsgObj();&nbsp//发送队列中取出;<br>&nbsp&nbsp&nbsp&nbsp&nbsplock(this)<br>&nbsp&nbsp&nbsp&nbsp&nbsp{<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbspoutitem.MsgState&nbsp=(int)MSG_STATE.SENDING&nbsp;<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbspthis.delFromOutQueue(seq);<br>&nbsp&nbsp&nbsp&nbsp&nbsp}<br>&nbsp&nbsp&nbsp&nbsp&nbspoutitem.MsgState&nbsp=(int)MSG_STATE.SENDING_FINISHED&nbsp&nbsp;&nbsp<br>&nbsp&nbsp&nbsp&nbsp&nbspreturn(terminate_resp.toBytes());&nbsp<br><br>&nbsp&nbsp&nbsp&nbspdefault:&nbsp&nbsp&nbsp<br>&nbsp&nbsp&nbsp&nbsp&nbsptest=(MSG.CMPP_MSG_TEST)&nbspoutitem.getMsgObj();&nbsp//发送队列中取出<br>&nbsp&nbsp&nbsp&nbsp&nbsplock(this)<br>&nbsp&nbsp&nbsp&nbsp&nbsp{<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbspoutitem.MsgState&nbsp=(int)MSG_STATE.SENDING;<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbspthis.delFromOutQueue(seq);<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbspthis.addToWaitingQueue(outitem);&nbsp&nbsp&nbsp&nbsp//等待服务器的active_TEST_resp&nbsp<br>&nbsp&nbsp&nbsp&nbsp&nbsp}<br>&nbsp&nbsp&nbsp&nbsp&nbspoutitem.MsgState&nbsp=(int)MSG_STATE.SENDED_WAITTING&nbsp;<br>&nbsp&nbsp&nbsp&nbsp&nbspreturn(test.toBytes());&nbsp<br>&nbsp&nbsp&nbsp}&nbsp&nbsp&nbsp&nbsp<br>&nbsp&nbsp}<br><br>&nbsp&nbspprivate&nbspvoid&nbspsendQueueItem(QueueItem&nbspoutitem)//将QueueItem发送出去<br>&nbsp&nbsp{<br>&nbsp&nbsp&nbspuint&nbspseq=outitem.Sequence&nbsp;<br>&nbsp&nbsp&nbspuint&nbspmsgtype=outitem.MsgType;<br>&nbsp&nbsp&nbsptry<br>&nbsp&nbsp&nbsp{<br>&nbsp&nbsp&nbsp&nbspswitch(msgtype)<br>&nbsp&nbsp&nbsp&nbsp{&nbsp<br>&nbsp&nbsp&nbsp&nbsp&nbspcase&nbsp(uint)MSG.CMPP_COMMAND_ID.CMPP_ACTIVE_TEST&nbsp:<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbspMSG.CMPP_MSG_TEST&nbsptest=(MSG.CMPP_MSG_TEST)&nbspoutitem.getMsgObj();&nbsp//发送队列中取出<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsplock(this)<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp{<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspoutitem.MsgState&nbsp=(int)MSG_STATE.SENDING;<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspthis.delFromOutQueue(seq);<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspthis.addToWaitingQueue(outitem);&nbsp&nbsp&nbsp&nbsp//等待服务器的active_TEST_resp&nbsp<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp}<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsptcp.Send(test.toBytes());<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbspoutitem.MsgState&nbsp=(int)MSG_STATE.SENDED_WAITTING&nbsp;<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbspbreak;<br>&nbsp<br>&nbsp&nbsp&nbsp&nbsp&nbspcase&nbsp(uint)MSG.CMPP_COMMAND_ID.CMPP_ACTIVE_TEST_RESP:<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbspMSG.CMPP_MSG_TEST_RESP&nbsptest_reply=(MSG.CMPP_MSG_TEST_RESP)outitem.getMsgObj();&nbsp//发送队列中取出//取出需要发送的具体消息<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsplock(this)<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp{<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspoutitem.MsgState&nbsp=(int)MSG_STATE.SENDING&nbsp;<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspthis.delFromOutQueue(seq);<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp}&nbsp<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsptcp.Send(test_reply.toBytes());<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbspoutitem.MsgState&nbsp=&nbsp(int)MSG_STATE.SENDING_FINISHED&nbsp;&nbsp&nbsp//完成<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbspbreak;<br>&nbsp<br>&nbsp&nbsp&nbsp&nbsp&nbspcase&nbsp(uint)MSG.CMPP_COMMAND_ID.CMPP_CANCEL&nbsp:<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbspMSG.CMPP_MSG_CANCEL&nbspcancel=(MSG.CMPP_MSG_CANCEL)outitem.getMsgObj();&nbsp&nbsp&nbsp&nbsp//还原成消息类<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsplock(this)<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp{<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspoutitem.MsgState&nbsp=(int)MSG_STATE.SENDING&nbsp;<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspthis.delFromOutQueue(seq);<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspthis.addToWaitingQueue(outitem);&nbsp&nbsp&nbsp&nbsp//等待回应<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp}<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsptcp.Send(cancel.toBytes());&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbspoutitem.MsgState&nbsp=(int)MSG_STATE.SENDED_WAITTING&nbsp;<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbspbreak;&nbsp<br>&nbsp<br>&nbsp&nbsp&nbsp&nbsp&nbspcase&nbsp(uint)MSG.CMPP_COMMAND_ID.CMPP_DELIVER_RESP:<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbspMSG.CMPP_MSG_DELIVER_RESP&nbspdeliver_resp=(MSG.CMPP_MSG_DELIVER_RESP)outitem.getMsgObj();&nbsp//发送队列中取出;<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsplock(this)<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp{<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspoutitem.MsgState&nbsp=(int)MSG_STATE.SENDING&nbsp;<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspthis.delFromOutQueue(seq);<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp}<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsptcp.Send(deliver_resp.toBytes());<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbspoutitem.MsgState=(int)MSG_STATE.SENDING_FINISHED&nbsp&nbsp;&nbsp&nbsp//完成<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbspbreak;<br>&nbsp<br>&nbsp&nbsp&nbsp&nbsp&nbspcase&nbsp(uint)MSG.CMPP_COMMAND_ID.CMPP_QUERY&nbsp&nbsp:<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbspMSG.CMPP_MSG_QUERY&nbspquery&nbsp=&nbsp(MSG.CMPP_MSG_QUERY&nbsp)outitem.getMsgObj();&nbsp//发送队列中取出;<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsplock(this)<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp{<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspoutitem.MsgState&nbsp=(int)MSG_STATE.SENDING&nbsp&nbsp;<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspthis.delFromOutQueue(seq);<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspthis.addToWaitingQueue(outitem);&nbsp<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp}<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsptcp.Send(query.toBytes());<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbspoutitem.MsgState&nbsp=(int)MSG_STATE.SENDED_WAITTING&nbsp;&nbsp//等待回应<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbspbreak;<br>&nbsp<br>&nbsp&nbsp&nbsp&nbsp&nbspcase&nbsp(uint)MSG.CMPP_COMMAND_ID.CMPP_SUBMIT&nbsp:<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbspMSG.CMPP_MSG_SUBMIT&nbspsubmit&nbsp=(MSG.CMPP_MSG_SUBMIT)outitem.getMsgObj();&nbsp//发送队列中取出;<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsplock(this)<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp{<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspoutitem.MsgState&nbsp=(int)MSG_STATE.SENDING&nbsp;<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspthis.delFromOutQueue(seq);<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspthis.addToWaitingQueue&nbsp(outitem);&nbsp<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp}<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsptcp.Send(submit.toBytes());<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbspoutitem.MsgState&nbsp=(int)MSG_STATE.SENDING_FINISHED&nbsp;<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbspbreak;<br>&nbsp<br>&nbsp&nbsp&nbsp&nbsp&nbspcase&nbsp(uint)MSG.CMPP_COMMAND_ID.CMPP_TERMINATE&nbsp:<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbspMSG.CMPP_MSG_TERMINATE&nbspterminate=(MSG.CMPP_MSG_TERMINATE)outitem.getMsgObj();&nbsp//发送队列中取出;<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsplock(this)<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp{<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspoutitem.MsgState&nbsp=(int)MSG_STATE.SENDING&nbsp;<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspthis.delFromOutQueue(seq);<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspthis.addToWaitingQueue(outitem);&nbsp<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp}<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbspif(this.tcpIsCanUse())<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp{<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsptcp.Send(terminate.toBytes());<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspoutitem.MsgState&nbsp=(int)MSG_STATE.SENDED_WAITTING&nbsp;&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp}<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbspthis.isStop&nbsp=true;&nbsp&nbsp&nbsp&nbsp&nbsp//通知其他线程可以退出了&nbsp<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbspbreak;<br>&nbsp<br>&nbsp&nbsp&nbsp&nbsp&nbspcase&nbsp(uint)MSG.CMPP_COMMAND_ID.CMPP_TERMINATE_RESP&nbsp:<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbspMSG.CMPP_MSG_TERMINATE_RESP&nbspterminate_resp=(MSG.CMPP_MSG_TERMINATE_RESP)outitem.getMsgObj();&nbsp//发送队列中取出;<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsplock(this)<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp{<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspoutitem.MsgState&nbsp=(int)MSG_STATE.SENDING&nbsp;<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspthis.delFromOutQueue(seq);&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp}<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsptcp.Send(terminate_resp.toBytes());<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbspoutitem.MsgState&nbsp=(int)MSG_STATE.SENDING_FINISHED&nbsp&nbsp;&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbspbreak;<br>&nbsp&nbsp&nbsp&nbsp}<br>&nbsp&nbsp&nbsp&nbspLogLastOkTime(DateTime.Now&nbsp);&nbsp&nbsp//记录当前最后一次消息soket正确时间<br>&nbsp&nbsp&nbsp}<br>&nbsp&nbsp&nbspcatch(SocketException&nbspse)<br>&nbsp&nbsp&nbsp{<br>&nbsp&nbsp&nbsp&nbsp//发生套接字错误<br>&nbsp&nbsp&nbsp&nbspthis.ErrorInfo&nbsp=this.ErrorInfo&nbsp+<i>&#34;</i>\r\n<i>&#34;</i>+se.ToString&nbsp();<br>&nbsp&nbsp&nbsp}<br>&nbsp&nbsp&nbspcatch(NullReferenceException&nbspnre)<br>&nbsp&nbsp&nbsp{<br>&nbsp&nbsp&nbsp&nbspthis._bNre&nbsp=true;&nbsp&nbsp//出现空引用错误<br>&nbsp&nbsp&nbsp&nbspthis.ErrorInfo&nbsp=this.ErrorInfo&nbsp+<i>&#34;</i>\r\n<i>&#34;</i>+nre.ToString&nbsp();<br>&nbsp&nbsp&nbsp}<br>&nbsp&nbsp}<br>&nbsp<br>&nbsp&nbspprivate&nbspbool&nbsptcpIsCanUse()&nbsp&nbsp//测试当前tcp是否可用<br>&nbsp&nbsp{<br>&nbsp&nbsp&nbspbool&nbspreval=true;<br>&nbsp&nbsp&nbspDateTime&nbspt=DateTime.Now&nbsp;<br>&nbsp&nbsp&nbspTimeSpan&nbspts=t-&nbspthis._lastOkTime;<br>&nbsp&nbsp&nbspif(ts.TotalSeconds&nbsp&gt;&nbspCMPPClient.CMPP_ACTIVE_TEST_T_TICKs&nbsp)&nbsp//60秒<br>&nbsp&nbsp&nbsp{<br>&nbsp&nbsp&nbsp&nbspreval=false;&nbsp&nbsp//不可用<br>&nbsp&nbsp&nbsp}<br>&nbsp&nbsp&nbspif(this._bNre&nbsp)<br>&nbsp&nbsp&nbsp{<br>&nbsp&nbsp&nbsp&nbspreval=false;<br>&nbsp&nbsp&nbsp}<br>&nbsp&nbsp&nbspreturn(reval);<br>&nbsp&nbsp}<br>&nbsp<br>&nbsp&nbspprivate&nbspvoid&nbsp_reStartRecvNSend()<br>&nbsp&nbsp{<br>&nbsp&nbsp&nbspSend_Thread=new&nbspThread(new&nbspThreadStart(this.SendSPMsgThread));&nbsp<br>&nbsp&nbsp&nbspSend_Thread.Start();&nbsp<br>&nbsp&nbsp&nbspRecv_Thread=new&nbspThread(new&nbspThreadStart(this.RecvISMGMsgThread));<br>&nbsp&nbsp&nbspRecv_Thread.Start();<br>&nbsp&nbsp}<br>&nbsp<br>&nbsp&nbspprivate&nbspvoid&nbspLogLastOkTime(DateTime&nbsplastoktime)<br>&nbsp&nbsp{<br>&nbsp&nbsp&nbsplock(this)<br>&nbsp&nbsp&nbsp{<br>&nbsp&nbsp&nbsp&nbspthis._lastOkTime=lastoktime;&nbsp&nbsp//设定最后成功消息交互时间&nbsp<br>&nbsp&nbsp&nbsp}<br>&nbsp&nbsp}<br>&nbsp<br>&nbsp&nbspprivate&nbspvoid&nbspdefaultReportHandler()&nbsp//却省的报告事件处理函数<br>&nbsp&nbsp{<br>&nbsp<br>&nbsp&nbsp}<br>&nbsp<br>&nbsp&nbspprivate&nbspvoid&nbspdefaultSMSHandler()<br>&nbsp&nbsp{<br>&nbsp<br>&nbsp&nbsp}<br>&nbsp<br>&nbsp&nbspprivate&nbspvoid&nbspdefaultTeminateHandler()<br>&nbsp&nbsp{<br>&nbsp<br>&nbsp&nbsp}<br>&nbsp<br>&nbsp&nbspprivate&nbspvoid&nbspdefaultTestEventHandler()<br>&nbsp&nbsp{<br>&nbsp<br>&nbsp&nbsp}<br>&nbsp&nbspprivate&nbspvoid&nbspdefaultTestRespEventHandler()<br>&nbsp&nbsp{<br>&nbsp<br>&nbsp&nbsp}<br>&nbsp&nbspprivate&nbspvoid&nbspdefaultTerminateEventHandler()<br>&nbsp&nbsp{<br>&nbsp&nbsp}<br>&nbsp&nbspprivate&nbspvoid&nbspdefaultTerminateRespEventHandler()<br>&nbsp&nbsp{<br>&nbsp&nbsp}<br>&nbsp&nbspprivate&nbspvoid&nbspdefaultCancelRespEventHandler()<br>&nbsp&nbsp{<br>&nbsp&nbsp}<br>&nbsp&nbspprivate&nbspvoid&nbspdefaultQueryRespEventHandler()<br>&nbsp&nbsp{<br>&nbsp&nbsp}<br>&nbsp<br>&nbsp&nbspprivate&nbspvoid&nbspdefaultConnectRespEventHandler()<br>&nbsp&nbsp{<br>&nbsp&nbsp&nbspQueueItem&nbspq=new&nbspQueueItem(this.getNextSequence(),(uint)MSG.CMPP_COMMAND_ID.CMPP_ACTIVE_TEST,0,(int)MSG_STATE.NEW);<br>&nbsp&nbsp&nbspMSG.CMPP_MSG_TEST&nbsptest=new&nbspMSG.CMPP_MSG_TEST(q.Sequence&nbsp);&nbsp//立即发送包过去<br>&nbsp&nbsp&nbspq.setmsgObj(test);&nbsp<br>&nbsp&nbsp&nbspthis.addToOutQueue(q);&nbsp&nbsp&nbsp<br>&nbsp&nbsp}<br>&nbsp&nbspprivate&nbspvoid&nbspdefaultSubmitRespEventHandler()<br>&nbsp&nbsp{<br>&nbsp&nbsp}<br><br>&nbsp&nbspprivate&nbspvoid&nbspdefaultClientStopEventHandler()<br>&nbsp&nbsp{}<br>&nbsp&nbsp&nbsp&nbsp&nbsp<br>&nbsp&nbspprivate&nbspvoid&nbsprePortError(string&nbspinfo)<br>&nbsp&nbsp{<br>&nbsp<br>&nbsp&nbsp}<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp<br>&nbsp&nbspprivate&nbspbool&nbsp_init(string&nbspCMPPServer,int&nbspCMPPPort)<br>&nbsp&nbsp{<br>&nbsp&nbsp&nbspbool&nbspreVal=false;<br>&nbsp&nbsp&nbspCMPP_Server=CMPPServer;<br>&nbsp&nbsp&nbspCMPP_Port=CMPPPort;&nbsp<br>&nbsp&nbsp&nbsptry<br>&nbsp&nbsp&nbsp{<br>&nbsp&nbsp&nbsp&nbsptcp=new&nbspSocket(AddressFamily.InterNetwork&nbsp,SocketType.Stream&nbsp,ProtocolType.Tcp&nbsp);&nbsp<br>&nbsp&nbsp&nbsp&nbspip=Dns.GetHostByName(CMPP_Server);&nbsp<br>&nbsp&nbsp&nbsp&nbspcmpp_ep=new&nbspIPEndPoint(ip.AddressList[0],CMPP_Port);&nbsp<br>&nbsp&nbsp&nbsp&nbsptcp.Connect(cmpp_ep);&nbsp//连接&nbsp<br>&nbsp&nbsp&nbsp&nbspreVal=true;&nbsp&nbsp&nbsp<br>&nbsp&nbsp&nbsp}<br>&nbsp&nbsp&nbspcatch(SocketException&nbspse)<br>&nbsp&nbsp&nbsp{<br>&nbsp&nbsp&nbsp&nbspErrorInfo=<i>&#34;</i>Socker&nbspError:<i>&#34;</i>&nbsp+&nbspse.ToString();<br>&nbsp&nbsp&nbsp}<br>&nbsp&nbsp&nbspreturn(reVal);&nbsp&nbsp&nbsp<br>&nbsp&nbsp}<br>&nbsp&nbspprivate&nbspuint&nbspgetNextSequence()<br>&nbsp&nbsp{<br>&nbsp&nbsp&nbsplock(typeof(CMPPClient))<br>&nbsp&nbsp&nbsp{<br>&nbsp&nbsp&nbsp&nbsptry<br>&nbsp&nbsp&nbsp&nbsp{<br>&nbsp&nbsp&nbsp&nbsp&nbsplastSequence++;<br>&nbsp&nbsp&nbsp&nbsp}<br>&nbsp&nbsp&nbsp&nbspcatch(OverflowException&nbspofe)<br>&nbsp&nbsp&nbsp&nbsp{<br>&nbsp&nbsp&nbsp&nbsp&nbspthis.ErrorInfo&nbsp=this.ErrorInfo&nbsp+<i>&#34;</i>\r\n<i>&#34;</i>+ofe.ToString();&nbsp<br>&nbsp&nbsp&nbsp&nbsp&nbsplastSequence=uint.Min<i>value</i>;&nbsp<br>&nbsp&nbsp&nbsp&nbsp}&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp<br>&nbsp&nbsp&nbsp&nbspreturn(lastSequence);<br>&nbsp&nbsp&nbsp}<br>&nbsp&nbsp}&nbsp<br>&nbsp<br>&nbsp&nbspprivate&nbspvoid&nbspRecvISMGMsgThread()&nbsp&nbsp&nbsp//处理ISMG消息的线程<br>&nbsp&nbsp{<br>&nbsp&nbsp&nbspwhile(!this.isStop&nbsp)<br>&nbsp&nbsp&nbsp{<br>&nbsp&nbsp&nbsp&nbsptry<br>&nbsp&nbsp&nbsp&nbsp{&nbsp&nbsp&nbsp&nbsp&nbsp<br>&nbsp&nbsp&nbsp&nbsp&nbspbyte[]&nbsprbuf=new&nbspbyte[10240];&nbsp//结果缓冲区<br>&nbsp&nbsp&nbsp&nbsp&nbspbyte[]&nbsprecv_temp=new&nbspByte[1024];&nbsp//recv临时缓冲区<br>&nbsp&nbsp&nbsp&nbsp&nbspint&nbspindex=0;<br>&nbsp&nbsp&nbsp&nbsp&nbspint&nbspmsglength=tcp.Receive(rbuf);&nbsp&nbsp//阻塞接收//分析收到的数据&nbsp<br>&nbsp<br>&nbsp&nbsp&nbsp&nbsp&nbspMSG.CMPP_MSG_Header&nbspheader;&nbsp&nbsp//=new&nbspMSG.CMPP_MSG_Header(rbuf,index);&nbsp//取得一个消息&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp<br>&nbsp&nbsp&nbsp&nbsp&nbspwhile(index&lt;msglength)&nbsp//逐个消息分析<br>&nbsp&nbsp&nbsp&nbsp&nbsp{<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbspheader=new&nbspMSG.CMPP_MSG_Header(rbuf,index);&nbsp//取得一个消息&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbspbyte[]&nbspthe_pk=&nbspnew&nbspbyte[header.MSGLength]&nbsp;&nbsp&nbsp&nbsp//生成此消息的大小<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbspfor(int&nbspi=0;i&lt;header.MSGLength&nbsp;i++)<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp{<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspthe_pk<i>=rbuf[index++];<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp}&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbspuint&nbspseq;&nbsp//取得回复消息的下一个流水序列号<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbspswitch(header.Command_ID)<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp{<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspcase&nbsp(uint)MSG.CMPP_COMMAND_ID.CMPP_ACTIVE_TEST&nbsp:&nbsp//服务器给客户的测试信号<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspthis.ErrorInfo&nbsp=this.ErrorInfo&nbsp+<i>&#34;</i>\r\n<i>&#34;</i>+<i>&#34;</i>收到:CMPP_ACTIVE_TEST<i>&#34;</i>;<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspMSG.CMPP_MSG_TEST&nbsptest=new&nbspMSG.CMPP_MSG_TEST(the_pk);<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspseq=test.Sequence;&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp//取得发送过来的流水号&nbsp<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspMSG.CMPP_MSG_TEST_RESP&nbsptest_reply=new&nbspMSG.CMPP_MSG_TEST_RESP(seq);&nbsp&nbsp&nbsp<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsptcp.Send(test_reply.toBytes());&nbsp&nbsp&nbsp&nbsp//马上送出回应包,不需要进入队列&nbsp&nbsp<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspif(this.onTestHandler!=null)<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp{<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspTestEventArgs&nbspe=new&nbspTestEventArgs(test);<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsponTestHandler(this,e);<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp}<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspelse<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp{<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspdefaultTestEventHandler();<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp}<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspthis.ErrorInfo&nbsp=this.ErrorInfo&nbsp+<i>&#34;</i>\r\n<i>&#34;</i>+<i>&#34;</i>发送:CMPP_ACTIVE_TEST_RESP&nbsp<i>&#34;</i>;&nbsp<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspbreak;<br>&nbsp<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspcase&nbsp(uint)MSG.CMPP_COMMAND_ID.CMPP_ACTIVE_TEST_RESP&nbsp:&nbsp//服务器的回应消息,应当丢弃不管<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspthis.ErrorInfo&nbsp=this.ErrorInfo&nbsp+<i>&#34;</i>\r\n<i>&#34;</i>+(<i>&#34;</i>收到:CMPP_ACTIVE_TEST_RESP&nbsp<i>&#34;</i>);&nbsp<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspMSG.CMPP_MSG_TEST_RESP&nbsptest_reply2=new&nbspMSG.CMPP_MSG_TEST_RESP(the_pk);&nbsp//构造消息<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspseq=test_reply2.Sequence;&nbsp&nbsp&nbsp&nbsp//寻找&nbsp曾经发送过去的消息&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspthis.delFromWaitingQueue(seq);&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp//删除等待队列中的消息&nbsp//清空等待回应队列<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspif(this.onTestRespHandler!=null)<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp{<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspTestRespEventArgs&nbspe=new&nbspTestRespEventArgs(test_reply2);&nbsp<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsponTestRespHandler(this,e);<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp}<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspelse<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp{<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspdefaultTestRespEventHandler();<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp}<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspbreak;<br>&nbsp<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspcase&nbsp(uint)MSG.CMPP_COMMAND_ID.CMPP_CANCEL_RESP&nbsp:<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspthis.ErrorInfo&nbsp=this.ErrorInfo&nbsp+<i>&#34;</i>\r\n<i>&#34;</i>+(<i>&#34;</i>收到:CMPP_CANCEL_RESP&nbsp<i>&#34;</i>);&nbsp<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspMSG.CMPP_MSG_CANCEL_RESP&nbspcancel_reply=new&nbspMSG.CMPP_MSG_CANCEL_RESP(the_pk);//构造消息<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspseq=cancel_reply.Sequence;<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspthis.delFromWaitingQueue(seq);<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspif(this.onCancelRespHandler!=null)<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp{<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspCancelRespEventArgs&nbspe=new&nbspCancelRespEventArgs(cancel_reply);&nbsp<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsponCancelRespHandler(this,e);&nbsp<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp}<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspelse<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp{<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspdefaultCancelRespEventHandler();<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp}<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspbreak;<br>&nbsp<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspcase&nbsp(uint)MSG.CMPP_COMMAND_ID.CMPP_CONNECT_RESP&nbsp:&nbsp&nbsp&nbsp//检查下消息的正确性,清除等待队列&nbsp设定连接成功标志<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspthis.ErrorInfo&nbsp=this.ErrorInfo&nbsp+<i>&#34;</i>\r\n<i>&#34;</i>+(<i>&#34;</i>收到:CMPP_CONNECT_RESP&nbsp<i>&#34;</i>);&nbsp<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspMSG.CMPP_MSG_CONNECT_RESP&nbspcn_reply=new&nbspMSG.CMPP_MSG_CONNECT_RESP(the_pk);<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspseq=cn_reply.Sequence;&nbsp&nbsp&nbsp&nbsp&nbsp//取得消息的seq<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspif(this.onConnectRespHandler&nbsp!=null)<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp{<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspConnectRespEventArgs&nbspe=new&nbspConnectRespEventArgs(cn_reply);<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsponConnectRespHandler(this,e);<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp}<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspelse<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp{<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspdefaultConnectRespEventHandler();<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp}<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspif(cn_reply.isOk)<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp{<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspthis.isLogin&nbsp&nbsp=true;<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp}<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspelse<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp{<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspthis.isLogin&nbsp&nbsp=false;<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp}<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspthis.delFromWaitingQueue(seq);&nbsp&nbsp&nbsp&nbsp//删除队列中的等待连接信息包&nbsp<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspbreak;<br>&nbsp<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspcase&nbsp(uint)MSG.CMPP_COMMAND_ID.CMPP_DELIVER:&nbsp&nbsp&nbsp&nbsp//检查消息正确定,立即返回&nbsp正确&nbsp或者&nbsp失败,正确则处理是否状态包,不是状态包则存到MO缓存,表示收到信息,时状态包则判断缓存消息进行消息送达处理<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspthis.ErrorInfo&nbsp=this.ErrorInfo&nbsp+<i>&#34;</i>\r\n<i>&#34;</i>+(<i>&#34;</i>收到:CMPP_DELIVER&nbsp<i>&#34;</i>);&nbsp<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspBIConvert.DumpBytes(the_pk,<i>&#34;</i>c:\\CMPP_DELIVER.txt<i>&#34;</i>);//保留映像<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspMSG.CMPP_MSG_DELIVER&nbspdeliver=new&nbspMSG.CMPP_MSG_DELIVER(the_pk);&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspseq=(uint)deliver.ISMGSequence;&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp//发过来的流水号,需要立即发送一个deliver_resp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp//一条&nbspISMG--〉SP&nbsp的消息<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspMSG.CMPP_MSG_DELIVER_RESP&nbspdeliver_resp=new&nbspMSG.CMPP_MSG_DELIVER_RESP(seq);&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspdeliver_resp.MsgID&nbsp=deliver.MsgID&nbsp;<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspdeliver_resp.Result&nbsp=0;<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspbyte[]&nbspt=deliver_resp.toBytes();<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsptcp.Send(t);<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspthis.ErrorInfo&nbsp=this.ErrorInfo&nbsp+<i>&#34;</i>\r\n<i>&#34;</i>+(<i>&#34;</i>发送:CMPP__DELIVER_RESP&nbsp<i>&#34;</i>);&nbsp<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspif(deliver.isReport)<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp{&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp//删除等待队列的消息//报告消息已经正确发送到&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp//UInt64&nbspReportMsgID=deliver.ReportMsgID&nbsp;&nbsp//取得消息ID&nbsp,更新&nbspMsgID<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspstring&nbspStateReport=deliver.StateReport;&nbsp//取得关于此消息的状态&nbsp<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp//_debugBs(the_pk);<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspReportEventArgs&nbsparg=new&nbspReportEventArgs(the_pk,MSG.CMPP_MSG_Header.HeaderLength+8+21+10+1+1+1+21+1+1);&nbsp&nbsp&nbsp&nbsp//构造报告事件参数<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp//ReportEventArgs&nbsparg=new&nbspReportEventArgs(ReportMsgID.ToString(),&nbsp<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspif(this.onReportHandler!=null)&nbsp//ReportEventArgs传递的字节数组是&nbsp报告信息包的数据,在此不考虑多个报告的情况<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp{<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsponReportHandler(this,arg);<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp}<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspelse<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp{<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspthis.defaultReportHandler();&nbsp&nbsp<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp}<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp}<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspelse<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp{//SMSEventArgs&nbsp传递的整个deliver包<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspSMSEventArgs&nbspsmsarg=new&nbspSMSEventArgs&nbsp(the_pk,MSG.CMPP_MSG_Header.HeaderLength);&nbsp&nbsp<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspif(this.onSMSHandler!=null)<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp{<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsponSMSHandler(this,smsarg);&nbsp&nbsp&nbsp//触发事件,应当很快结束处理,不要靠考虑存储之类的耗费资源事宜<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp}<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspelse<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp{<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspdefaultSMSHandler();<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp}<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp}&nbsp&nbsp&nbsp&nbsp<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspbreak;&nbsp<br>&nbsp<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspcase&nbsp(uint)MSG.CMPP_COMMAND_ID.CMPP_QUERY_RESP&nbsp:<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspthis.ErrorInfo&nbsp=this.ErrorInfo&nbsp+<i>&#34;</i>\r\n<i>&#34;</i>+(<i>&#34;</i>收到:CMPP_QUERY_RESP&nbsp<i>&#34;</i>);&nbsp<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp//收到消息,处理后存入数据库<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspMSG.CMPP_MSG_QUERY_RESP&nbspquery_resp=new&nbspMSG.CMPP_MSG_QUERY_RESP(the_pk);<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspthis.delFromWaitingQueue(query_resp.Sequence&nbsp);&nbsp&nbsp&nbsp//将等待的队列中的元素删除<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspif(this.onQueryRespHandler!=null)<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp{<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspQueryRespEventArgs&nbspe=new&nbspQueryRespEventArgs(query_resp);&nbsp<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp}<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspelse<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp{<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspdefaultQueryRespEventHandler();<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp}<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspbreak;<br>&nbsp<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspcase&nbsp(uint)MSG.CMPP_COMMAND_ID.CMPP_SUBMIT_RESP&nbsp:&nbsp&nbsp&nbsp&nbsp//收到服务器送达的慧英消息<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspthis.ErrorInfo&nbsp=this.ErrorInfo&nbsp+<i>&#34;</i>\r\n<i>&#34;</i>+(<i>&#34;</i>收到:CMPP_SUBMIT_RESP&nbsp<i>&#34;</i>);&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspMSG.CMPP_MSG_SUBMIT_RESP&nbspsubmit_resp=new&nbspMSG.CMPP_MSG_SUBMIT_RESP(the_pk);&nbsp&nbsp<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspBIConvert.DumpBytes(the_pk,<i>&#34;</i>c:\\CMPP_SUBMIT_RESP.txt<i>&#34;</i>);//保留映像<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp//BIConvert.DumpBytes(init<i>value</i>,<i>&#34;</i>c:\\CMPP_SUBMIT_RESP.txt<i>&#34;</i>);//保留映像<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspsub_resp++;&nbsp//该变量仅供测试使用<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspdelFromWaitingQueue(submit_resp.Sequence);&nbsp&nbsp//删除需要等待的消息<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspif(this.onSubmitRespHandler!=null)<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp{<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspSubmitRespEventArgs&nbspe=new&nbspSubmitRespEventArgs(submit_resp);<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp//submit_resp.<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsponSubmitRespHandler(this,e);<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp}<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspelse<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp{<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspdefaultSubmitRespEventHandler();<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp}<br>&nbsp<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspbreak;<br>&nbsp<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspcase&nbsp(uint)MSG.CMPP_COMMAND_ID.CMPP_TERMINATE&nbsp:<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspthis.ErrorInfo&nbsp=this.ErrorInfo&nbsp+<i>&#34;</i>\r\n<i>&#34;</i>+<i>&#34;</i>收到:CMPP_TERMINATE<i>&#34;</i>;<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspMSG.CMPP_MSG_TERMINATE&nbspterminate=new&nbspMSG.CMPP_MSG_TERMINATE(the_pk);<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspseq=terminate.Sequence;<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspMSG.CMPP_MSG_TERMINATE_RESP&nbsp&nbspterminate_resp=new&nbspMSG.CMPP_MSG_TERMINATE_RESP(seq);<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspthis.ErrorInfo&nbsp=this.ErrorInfo&nbsp+<i>&#34;</i>\r\n<i>&#34;</i>+<i>&#34;</i>收到:CMPP_TERMINATE_RESP<i>&#34;</i>;<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsptcp.Send(terminate_resp.toBytes());&nbsp&nbsp<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspif(this.onTerminateHandler!=null)<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp{<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspTerminateEventArgs&nbspe=new&nbspTerminateEventArgs(terminate);<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsponTerminateHandler(this,e);<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspthis.StopMe()&nbsp;&nbsp//准备自我停止?<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp}<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspelse<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp{<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspdefaultTerminateEventHandler();<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp}<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspthis._StopMe();&nbsp&nbsp//发出终止设定&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspreturn;&nbsp&nbsp&nbsp//退出线程&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp<br>&nbsp<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspcase&nbsp(uint)MSG.CMPP_COMMAND_ID.CMPP_TERMINATE_RESP&nbsp:<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspthis.ErrorInfo&nbsp=this.ErrorInfo&nbsp+<i>&#34;</i>\r\n<i>&#34;</i>+<i>&#34;</i>收到:CMPP_TERMINATE_RESP<i>&#34;</i>;<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspMSG.CMPP_MSG_TERMINATE_RESP&nbspter_resp=new&nbspMSG.CMPP_MSG_TERMINATE_RESP(the_pk);<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspseq=ter_resp.Sequence&nbsp;&nbsp&nbsp//取得流水信号<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspthis.delFromOutQueue(seq);&nbsp&nbsp&nbsp//删除输出表重点项目&nbsp<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspif(this.onTerminateRespHandler!=null)<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp{<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspTerminateRespEventArgs&nbspe=new&nbspTerminateRespEventArgs(ter_resp);<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsponTerminateRespHandler(this,e);<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp}<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspelse<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp{<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspdefaultTerminateRespEventHandler();<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp}<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspthis._StopMe();&nbsp<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspbreak;<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp}&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp<br>&nbsp&nbsp&nbsp&nbsp&nbsp}&nbsp&nbsp&nbsp&nbsp&nbsp<br>&nbsp&nbsp&nbsp&nbsp&nbspLogLastOkTime(DateTime.Now&nbsp);&nbsp&nbsp//记录当前最后一次消息soket正确时间<br>&nbsp&nbsp&nbsp&nbsp}<br>&nbsp&nbsp&nbsp&nbspcatch(SocketException&nbspse)<br>&nbsp&nbsp&nbsp&nbsp{&nbsp<br>&nbsp&nbsp&nbsp&nbsp&nbsp//超时&nbsp&nbsp&nbsp&nbsp<br>&nbsp&nbsp&nbsp&nbsp}<br>&nbsp&nbsp&nbsp&nbspThread.Sleep(50);&nbsp<br>&nbsp&nbsp&nbsp}&nbsp&nbsp&nbsp<br>&nbsp&nbsp}<br>&nbsp&nbsp//debug<br>//&nbsp&nbspprivate&nbspvoid&nbsp_debugBs(byte[]&nbspthe_pk)&nbsp//存储byte字节<br>//&nbsp&nbsp{<br>//&nbsp&nbsp&nbsp&nbsp<br>//&nbsp&nbsp}<br>&nbsp&nbsp//debug<br>&nbsp<br>&nbsp&nbspprivate&nbspvoid&nbspDeamonThread()&nbsp&nbsp&nbsp&nbsp//监视本系统连接是否正常<br>&nbsp&nbsp{//此线程是监视线程<br>&nbsp&nbsp&nbspint&nbsp&nbspt_count&nbsp=0;&nbsp&nbsp&nbsp//循环时间计数<br>&nbsp&nbsp&nbsp_reStartRecvNSend();&nbsp&nbsp&nbsp//启动接收和发送<br>&nbsp&nbsp&nbspwhile(!&nbspthis.isStop)&nbsp<br>&nbsp&nbsp&nbsp{&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp<br>&nbsp&nbsp&nbsp&nbspt_count++;&nbsp&nbsp&nbsp&nbsp//0.1秒&nbsp&nbsp&nbsp&nbsp<br>&nbsp&nbsp&nbsp&nbspif(tcpIsCanUse())&nbsp&nbsp<br>&nbsp&nbsp&nbsp&nbsp{<br>&nbsp&nbsp&nbsp&nbsp&nbspif(this.isPingTime())&nbsp<br>&nbsp&nbsp&nbsp&nbsp&nbsp{<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbspthis.ping();&nbsp&nbsp//发送一个ping包&nbsp<br>&nbsp&nbsp&nbsp&nbsp&nbsp}<br>&nbsp&nbsp&nbsp&nbsp&nbspif(t_count&gt;50)&nbsp&nbsp//&nbsp500*100=50000=50秒<br>&nbsp&nbsp&nbsp&nbsp&nbsp{<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbspt_count=0;<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbspcheckReSend()&nbsp;&nbsp//检查需要重新发送的消息<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp//触发一个事件,让系统自动检查消息队列,存储消息队列中的消息状态<br>&nbsp&nbsp&nbsp&nbsp&nbsp}<br>&nbsp&nbsp&nbsp&nbsp}<br>&nbsp&nbsp&nbsp&nbspelse<br>&nbsp&nbsp&nbsp&nbsp{<br>&nbsp&nbsp&nbsp&nbsp&nbspEventArgs&nbspe=new&nbspEventArgs();&nbsp<br>&nbsp&nbsp&nbsp&nbsp&nbspif(this.onSocketClosedHandler!=null)<br>&nbsp&nbsp&nbsp&nbsp&nbsp{<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsponSocketClosedHandler(this,e);<br>&nbsp&nbsp&nbsp&nbsp&nbsp}<br>&nbsp&nbsp&nbsp&nbsp&nbspelse<br>&nbsp&nbsp&nbsp&nbsp&nbsp{&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp<br>&nbsp&nbsp&nbsp&nbsp&nbsp}<br>&nbsp&nbsp&nbsp&nbsp&nbspthis.isStop&nbsp=true;&nbsp&nbsp//通知其他线程退出<br>&nbsp&nbsp&nbsp&nbsp}<br>&nbsp&nbsp&nbsp&nbspThread.Sleep(1000);&nbsp<br>&nbsp&nbsp&nbsp}<br>&nbsp&nbsp}&nbsp&nbsp&nbsp<br>&nbsp&nbsp<br>&nbsp&nbspprivate&nbspvoid&nbspSendSPMsgThread()<br>&nbsp&nbsp{&nbsp<br>&nbsp&nbsp&nbspwhile&nbsp(!this.isStop&nbsp)<br>&nbsp&nbsp&nbsp{<br>&nbsp&nbsp&nbsp&nbspThread.Sleep(10);&nbsp<br>&nbsp&nbsp&nbsp&nbspif(this.isLogin)<br>&nbsp&nbsp&nbsp&nbsp{<br>&nbsp&nbsp&nbsp&nbsp&nbspArrayList&nbsplists=this.getTop16Queue();&nbsp&nbsp//取出16条最顶的消息&nbsp&nbsp&nbsp&nbsp&nbsp<br>&nbsp&nbsp&nbsp&nbsp&nbspif(lists!=null&nbsp&nbsp&&&nbsplists.Count&nbsp&gt;0)<br>&nbsp&nbsp&nbsp&nbsp&nbsp{<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbspint&nbspcount=lists.Count;&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbspArrayList&nbsppks=new&nbspArrayList(&nbspcount);&nbsp//定义容量<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbspfor&nbsp(int&nbspi=0;i&lt;lists.Count;&nbspi++)<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp{<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspQueueItem&nbspoutitem=(QueueItem)lists<i>;&nbsp//取出每一个消息对象<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspif(outitem!=null)<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp{<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsptry<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp{<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspsendQueueItem(outitem);&nbsp&nbsp&nbsp&nbsp//发送每一个消息<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp}<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspcatch(SocketException&nbspse)<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp{<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp//发送失败<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspoutitem.FailedCount&nbsp++;<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp}<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp}&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp}<br>&nbsp&nbsp&nbsp&nbsp&nbsp}<br>&nbsp&nbsp&nbsp&nbsp}<br>&nbsp&nbsp&nbsp&nbspThread.Sleep(100);&nbsp<br>&nbsp&nbsp&nbsp}&nbsp&nbsp<br>&nbsp&nbsp}&nbsp&nbsp<br><br>&nbsp&nbspprivate&nbspvoid&nbsp_StopMe()<br>&nbsp&nbsp{<br>&nbsp&nbsp&nbsplock(this)<br>&nbsp&nbsp&nbsp{<br>&nbsp&nbsp&nbsp&nbspthis.isStop&nbsp=true;<br>&nbsp&nbsp&nbsp}<br>&nbsp&nbsp}<br>&nbsp<br>&nbsp&nbspprivate&nbspvoid&nbsp_forcedSubThread(Thread&nbspt)&nbsp&nbsp&nbsp//强制停止线程<br>&nbsp&nbsp{<br>&nbsp&nbsp&nbsptry<br>&nbsp&nbsp&nbsp{<br>&nbsp&nbsp&nbsp&nbspt.Abort();<br>&nbsp&nbsp&nbsp&nbspt.Join();&nbsp&nbsp<br>&nbsp&nbsp&nbsp}<br>&nbsp&nbsp&nbspcatch(Exception&nbsp)<br>&nbsp&nbsp&nbsp{}<br>&nbsp&nbsp}<br>&nbsp<br>&nbsp&nbsp//private&nbsp函数区域//////////////////////////////////////////////////////////////////<br>&nbsp<br>&nbsp<br>&nbsp&nbsp//公用函数&nbsp属性区域////////////////////////////////////////&nbsp<br>&nbsp&nbsppublic&nbspbool&nbspInit(string&nbspCMPPServer,int&nbspCMPPPort)<br>&nbsp&nbsp{<br>&nbsp&nbsp&nbspreturn(this._init(CMPPServer,CMPPPort));&nbsp<br>&nbsp&nbsp}<br>&nbsp<br>&nbsp&nbsppublic&nbspbool&nbspInit(string&nbspCMPPServer,int&nbsp

⌨️ 快捷键说明

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