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

📄 cmpp.cs

📁 用于移动梦网网关进行TCP通信,可以收发短信,并实现计费功能.使用SOCKET实现,并具有收发读写保护功能.可作为TCP通信和线程读写同步的教程.
💻 CS
📖 第 1 页 / 共 5 页
字号:
				}
				catch
				{
					i++;
				}
				if(i>=3)
				{
					break;
				}
			}
		}
		private void AddQueueItemToBufferQueue(QueueItem q)
		{
			this.RWL_TempQueue.AcquireWriterLock(-1);
			this.MSMQ_CMPP3GateWayService_TempQueue.Send(q);
			this.RWL_TempQueue.ReleaseWriterLock();
			Thread.Sleep(1);
		}
		private void SetIfCanProc(bool ifCanProc)
		{
			this.RWL_IfCanProce.AcquireWriterLock(-1);
			this.IfCanProc=ifCanProc;
			this.RWL_IfCanProce.ReleaseWriterLock();
			Thread.Sleep(1);
		}
		private bool GetIfCanProc()
		{
			this.RWL_IfCanProce.AcquireReaderLock(-1);
			bool b=this.IfCanProc;
			this.RWL_IfCanProce.ReleaseReaderLock();
			return b;
		}
		private string GetValidTime(DateTime dt)
		{
			DateTime n=dt.AddHours(24);
			return(n.Year.ToString().Substring(2) + n.Month.ToString().PadLeft(2,'0')+n.Day.ToString().PadLeft(2,'0')+n.Hour.ToString().PadLeft(2,'0')+n.Minute.ToString().PadLeft(2,'0')+n.Second.ToString().PadLeft(2,'0')+"032+");            

		}
		public string GetAtTime(DateTime dt)
		{
			DateTime d=dt.AddMinutes(1);
			return(d.Year.ToString().Substring(2) + d.Month.ToString().PadLeft(2,'0')+d.Day.ToString().PadLeft(2,'0')+d.Hour.ToString().PadLeft(2,'0')+d.Minute.ToString().PadLeft(2,'0')+d.Second.ToString().PadLeft(2,'0')+"032+");            
		}
		private void StartThread()
		{
			this.thDeamon=new Thread(new ThreadStart(this.DeamonThread));
			this.thDeamon.Start();//启动监控线程
		}
		#region
		//		private void SendISMGThread()
		//		{
		//			while(this.State==CMPPState.Started)
		//			{
		//				Thread.Sleep(10);
		//				if(this.isLogin)
		//				{
		//					ArrayList List=this.GetTop16OutQueueItem();
		//					if(List!=null&&List.Count>0)
		//					{
		//						int count=List.Count;
		//						for (int i=0;i<List.Count; i++) 
		//						{ 
		//							QueueItem outitem=(QueueItem)List[i]; //取出每一个消息对象 
		//							if(outitem!=null) 
		//							{ 
		//								try 
		//								{ 
		//									SendQueueItem(outitem);    //发送每一个消息 
		//								} 
		//								catch(SocketException se) 
		//								{ 
		//									//发送失败 
		//									
		//								} 
		//							}      
		//						} 
		//
		//					}
		//				}
		//			}
		//		}
		
		//		private void SendQueueItem(QueueItem q)
		//		{
		//			uint seq=q.MsgSequence;
		//			uint MsgType=q.MsgType;
		//			try
		//			{
		//				switch(MsgType)
		//				{
		//					case (uint)MSG.CMPP_COMMAND_ID.CMPP_ACTIVE_TEST:
		//					{
		//						MSG.CMPP_ActiveTest test=(MSG.CMPP_ActiveTest)q.Msg;
		//						byte[] bsValue=test.ToBytes();
		//						this.AddWaitQueueItem(q);
		//						this.SeverSocket.Send(bsValue,0,bsValue.Length,SocketFlags.None);
		//					}
		//						break;
		//					case (uint)MSG.CMPP_COMMAND_ID.CMPP_SUBMIT:
		//					{
		//						MSG.CMPP_Submit submit=(MSG.CMPP_Submit)q.Msg;
		//						byte[] bsValue=submit.ToBytes();
		//						//this.ProcWaitQueue(q,seq,0,WaitQueueProcType.ADDItem);
		//						this.AddWaitQueueItem(q);
		//						this.SeverSocket.Send(bsValue,0,bsValue.Length,SocketFlags.None);
		//					}
		//						break;
		//					case (uint)MSG.CMPP_COMMAND_ID.CMPP_DELIVER_RESP:
		//					{
		//						MSG.CMPP_Deliver_Resp deliver_resp=(MSG.CMPP_Deliver_Resp)q.Msg;
		//						byte[] bsValue=deliver_resp.ToBytes();
		//						this.AddWaitQueueItem(q);
		//						this.SeverSocket.Send(bsValue,0,bsValue.Length,SocketFlags.None);
		//					}
		//						break;
		//					case (uint)MSG.CMPP_COMMAND_ID.CMPP_CANCEL:
		//					{
		//						MSG.CMPP_Cancel Cancel=(MSG.CMPP_Cancel)q.Msg;
		//						byte[] bsValue=Cancel.ToBytes();
		//						this.AddWaitQueueItem(q);
		//						this.SeverSocket.Send(bsValue,0,bsValue.Length,SocketFlags.None);
		//					}
		//						break;
		//					case (uint)MSG.CMPP_COMMAND_ID.CMPP_QUERY:
		//					{
		//						MSG.CMPP_Query Query=(MSG.CMPP_Query)q.Msg;
		//						byte[] bsValue=Query.ToBytes();
		//						this.AddWaitQueueItem(q);
		//						this.SeverSocket.Send(bsValue,0,bsValue.Length,SocketFlags.None);
		//					}
		//						break;
		//					case (uint)MSG.CMPP_COMMAND_ID.CMPP_ACTIVE_TEST_RESP:
		//					{
		//						MSG.CMPP_ActiveTest_Resp Test_Resp=(MSG.CMPP_ActiveTest_Resp)q.Msg;
		//						byte[] bsValue=Test_Resp.ToBytes();
		//						this.AddWaitQueueItem(q);
		//						this.SeverSocket.Send(bsValue,0,bsValue.Length,SocketFlags.None);
		//					}
		//						break;
		//					case (uint)MSG.CMPP_COMMAND_ID.CMPP_TERMINATE:
		//					{
		//						MSG.CMPP_Terminate Terminate=(MSG.CMPP_Terminate)q.Msg;
		//						byte[] bsValue=Terminate.ToBytes();
		//						this.AddWaitQueueItem(q);
		//						this.SeverSocket.Send(bsValue,0,bsValue.Length,SocketFlags.None);
		//					}
		//						break;
		//					case (uint)MSG.CMPP_COMMAND_ID.CMPP_TERMINATE_RESP:
		//					{
		//						MSG.CMPP_Terminate_Resp Terminate_resp=(MSG.CMPP_Terminate_Resp)q.Msg;
		//						byte[] bsValue=Terminate_resp.ToBytes();
		//						this.AddWaitQueueItem(q);
		//						this.SeverSocket.Send(bsValue,0,bsValue.Length,SocketFlags.None);
		//						this._Stop(3);
		//					}
		//						break;
		//					
		//				}
		//			}
		//			catch
		//			{}
		//		}
	
		
		//		private ArrayList GetTop16OutQueueItem()
		//		{
		//			ArrayList al=new ArrayList();
		//			int ArrayLen=0;
		//			QueueItem q=this.ProcOutQueue(null,0,0,OutQueueProcType.GetAndDelByIndex);
		//			while(q!=null&&ArrayLen<16)
		//			{
		//				if(q!=null)
		//				{
		//					ArrayLen++;
		//					al.Add(q);
		//				}
		//				else
		//				{
		//					break;
		//				}
		//				q=this.ProcOutQueue(null,0,0,OutQueueProcType.GetAndDelByIndex);
		//			}
		//			if(ArrayLen>0)
		//			{
		//				return al;
		//			}
		//			else
		//			{
		//				return null;
		//			}
		//
		//		}

		//		private void RecvISMGThread()
		//		{
		//			byte[] LastData=new byte[0];
		//			int RecvNullNum=0;
		//			byte[] RecvBuffer=new byte[4096];//4K缓冲区
		//			while(this.State==CMPPState.Started)
		//			{
		//				try
		//				{
		//					
		//					int index=0;
		//					RecvBuffer.Initialize();
		//					int RecvSize=this.SeverSocket.Receive(RecvBuffer,0,4096,SocketFlags.None);
		//					this.LockTcpUse(DateTime.Now);
		//					if(RecvSize==0)
		//					{
		//						RecvNullNum++;
		//						if(RecvNullNum>3)
		//						{
		//							RecvNullDataException rnde=new RecvNullDataException();
		//							throw(rnde);							
		//						}
		//					}
		//					else
		//					{
		//						RecvNullNum=0;
		//					}
		//					byte[] Total;
		//					if(LastData.Length==0)
		//					{
		//						//上次无剩余
		//						Total=new byte[RecvSize];
		//						Array.Copy(RecvBuffer,0,Total,0,RecvSize);
		//					}
		//					else
		//					{
		//						Total=new byte[LastData.Length+RecvSize];
		//						LastData.CopyTo(Total,0);
		//						Array.Copy(RecvBuffer,0,Total,LastData.Length,RecvSize);
		//					}
		//					MSG.Header header;
		//					while(index<RecvSize)
		//					{
		//						if(RecvSize-index<12)
		//						{
		//							//已经没有完整的包头了
		//							LastData=new byte[RecvSize-index];
		//							Array.Copy(Total,index,LastData,0,LastData.Length);
		//							break;
		//						}
		//						
		//						header=new CMPP3.Client.MSG.Header(Total,index);
		//						uint MsgLength=header.MSGLength;
		//						if(RecvSize-index<MsgLength)
		//						{
		//							//有包头,但消息体不完整
		//							LastData=new byte[RecvSize-index];
		//							Array.Copy(Total,index,LastData,0,LastData.Length);
		//							break;
		//						}
		//						//到此则是完整的消息
		//						byte[] the_pk=new byte[header.MSGLength];
		//						Array.Copy(Total,index,the_pk,0,the_pk.Length);
		//						index+=the_pk.Length;
		//						uint seq;//取得下一个消息的流水号
		//						switch(header.Command_ID)
		//						{
		//							case (uint)MSG.CMPP_COMMAND_ID.CMPP_ACTIVE_TEST_RESP:
		//							{
		//								//握手包的回复,产生接收到握手回复的事件
		//								//先将等待包中的此数据删除
		//								this.ProcWaitQueue(null,header.Sequence,0,CMPP3.Client.WaitQueueProcType.DelFromSequence);
		//								if(this.onReceiveTestRespHandler!=null)
		//								{
		//									MSG.CMPP_ActiveTest_Resp test_resp=new CMPP3.Client.MSG.CMPP_ActiveTest_Resp(the_pk,0);
		//									TestRespEventArgs e=new TestRespEventArgs(test_resp);
		//									this.onReceiveTestRespHandler(this,e);
		//								}
		//							}
		//								break;
		//							case (uint)MSG.CMPP_COMMAND_ID.CMPP_SUBMIT_RESP:
		//							{
		//								MSG.CMPP_Submit_Resp Submit_Resp=new CMPP3.Client.MSG.CMPP_Submit_Resp(the_pk,0);
		//								QueueItem q=this.ProcWaitQueue(null,header.Sequence,0,WaitQueueProcType.GetAndDelBySequence);
		//								if(q==null)
		//								{
		//									continue;
		//								}
		//								MSG.CMPP_Submit submit=(MSG.CMPP_Submit)q.Msg;
		//								if(this.onReceiveSubmitRespHandler!=null)
		//								{
		//									SubmitRespEventArgs e=new SubmitRespEventArgs(q.MsgSequence,submit,Submit_Resp);
		//									this.onReceiveSubmitRespHandler(this,e);
		//								}
		//							}
		//								break;
		//							case (uint)MSG.CMPP_COMMAND_ID.CMPP_DELIVER:
		//							{
		//								seq=header.Sequence;
		//								MSG.CMPP_Deliver deliver=new CMPP3.Client.MSG.CMPP_Deliver(the_pk,0);
		//								MSG.CMPP_Deliver_Resp deliver_resp=new CMPP3.Client.MSG.CMPP_Deliver_Resp(seq);
		//								deliver_resp.bsMsgID=deliver.bsMsgID;
		//								deliver_resp.Result=0;
		//								QueueItem q=new QueueItem();
		//								q.InQueueTime=DateTime.Now;
		//								q.Msg=deliver_resp;
		//								q.MsgSequence=seq;
		//								q.MsgType=(uint)MSG.CMPP_COMMAND_ID.CMPP_DELIVER_RESP;
		//								this.ProcOutQueue(q,seq,0,CMPP3.Client.OutQueueProcType.ADDItem);
		//								if(deliver.ifReport==1)
		//								{
		//									//状态报告
		//									if(this.onReceiveReportHandler!=null)
		//									{
		//										ReportEventArgs e=new ReportEventArgs(deliver);
		//										this.onReceiveReportHandler(this,e);
		//									}
		//								}
		//								else
		//								{
		//									//MO信息
		//									if(this.onReceiveNewShortMessageHandler!=null)
		//									{
		//										SMSEventArgs e=new SMSEventArgs(deliver);
		//										this.onReceiveNewShortMessageHandler(this,e);
		//									}
		//								}
		//							}
		//								break;
		//							case (uint)MSG.CMPP_COMMAND_ID.CMPP_CANCEL_RESP:
		//							{
		//								seq=header.Sequence;
		//								QueueItem q=this.ProcWaitQueue(null,seq,0,WaitQueueProcType.GetAndDelBySequence);
		//								MSG.CMPP_Cancel cancel=(MSG.CMPP_Cancel)q.Msg;
		//								MSG.CMPP_Cancel_Resp cancel_resp=new CMPP3.Client.MSG.CMPP_Cancel_Resp(the_pk,0);
		//								if(this.onReceiveConnectRespHandler!=null)
		//								{
		//									CancelRespEventArgs e=new CancelRespEventArgs(seq,cancel,cancel_resp);
		//									this.onReceiveCancelRespHandler(this,e);
		//								}
		//							}
		//								break;
		//							case (uint)MSG.CMPP_COMMAND_ID.CMPP_QUERY_RESP:
		//							{
		//								seq=header.Sequence;
		//								QueueItem q=this.ProcWaitQueue(null,seq,0,WaitQueueProcType.GetAndDelBySequence);
		//								MSG.CMPP_Query query=(MSG.CMPP_Query)q.Msg;
		//								MSG.CMPP_Query_Resp query_resp=new CMPP3.Client.MSG.CMPP_Query_Resp(the_pk,0);
		//								if(this.onReceiveQueryRespHandler!=null)
		//								{
		//									QueryRespEventArgs e=new QueryRespEventArgs(seq,query,query_resp);
		//									this.onReceiveQueryRespHandler(this,e);
		//								}
		//							}
		//								break;
		//							case (uint)MSG.CMPP_COMMAND_ID.CMPP_ACTIVE_TEST:
		//							{
		//								//接收到此包则立刻回复
		//								seq=header.Sequence;
		//								MSG.CMPP_ActiveTest_Resp test_resp=new CMPP3.Client.MSG.CMPP_ActiveTest_Resp(seq);
		//								test_resp.Recved=0;
		//								byte[] bsValue=test_resp.ToBytes();
		//								this.SeverSocket.Send(bsValue,0,bsValue.Length,SocketFlags.None);
		//								if(this.onReceiveTestHandler!=null)
		//								{
		//									TestEventArgs e=new TestEventArgs(seq);
		//									this.onReceiveTestHandler(this,e);
		//								}
		//								if(this.onSentTestRespHandler!=null)
		//								{
		//									TestRespEventArgs e=new TestRespEventArgs(test_resp);
		//									this.onSentTestRespHandler(this,e);
		//								}
		//							}
		//								break;
		//							case (uint)MSG.CMPP_COMMAND_ID.CMPP_TERMINATE_RESP:
		//							{
		//								//接收到网关服务器的退出回复
		//								seq=header.Sequence;
		//								if(this.onReceiveTerminateRespHandler!=null)
		//								{
		//									TerminateRespEventArgs e=new TerminateRespEventArgs(seq);
		//									this.onReceiveTerminateRespHandler(this,e);
		//								}
		//								this._Stop(4);
		//							}
		//								break;
		//							case (uint)MSG.CMPP_COMMAND_ID.CMPP_TERMINATE:
		//							{
		//								seq=header.Sequence;
		//								MSG.CMPP_Terminate_Resp Terminate_Resp=new CMPP3.Client.MSG.CMPP_Terminate_Resp(seq);
		//								QueueItem q=new QueueItem();
		//								q.InQueueTime=DateTime.Now;
		//								q.Msg=Terminate_Resp;
		//								q.MsgSequence=seq;
		//								q.MsgType=(uint)MSG.CMPP_COMMAND_ID.CMPP_TERMINATE_RESP;
		//								this.ProcOutQueue(q,seq,0,OutQueueProcType.ADDItem);
		//								if(this.onReceiveTerminateHandler!=null)
		//								{
		//									TerminateEventArgs e=new TerminateEventArgs();
		//									this.onReceiveTerminateHandler(this,e);
		//								}
		//							}
		//								break;								
		//						}
		//					}
		//				}
		//				catch(RecvNullDataException rnde)
		//				{
		//					if(this.onErrorHandler!=null)
		//					{
		//						ErrorEventArgs _ea=new ErrorEventArgs();
		//						_ea.ErrorMessage="Socket异常";
		//						_ea.MyMessage="与网关的Socket连接异常,接收网关数据为0字节已超过3次,服务将自动停止,函数RecvISMGThread()";
		//						this.onErrorHandler(this,_ea);
		//					}
		//					this._Stop(2);
		//					break;
		//				}
		//				catch(SocketException se)
		//				{
		//					if(this.onSocketCloseHandler!=null)
		//					{
		//						SocketClosedEventArgs e=new SocketClosedEventArgs(this.OutQueue,this.WaitQueue);
		//						this.onSocketCloseHandler(this,e);
		//					}
		//					if(this.onErrorHandler!=null)
		//					{
		//						ErrorEventArgs e=new ErrorEventArgs();
		//						e.ErrorMessage=se.Message;
		//						e.MyMessage="Socket连接异常,函数RecvISMGThread()";
		//						this.onErrorHandler(this,e);
		//					}
		//					this._Stop(2);
		//					break;
		//				}
		//				catch(Exception ex)
		//				{
		//					if(this.onErrorHandler!=null)
		//					{
		//						ErrorEventArgs e=new ErrorEventArgs();
		//						e.ErrorMessage=ex.Message;
		//						e.MyMessage="程序异常,函数RecvISMGThread()";
		//						this.onErrorHandler(this,e);
		//					}
		//				}
		//			}
		//		}
		#endregion

⌨️ 快捷键说明

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