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

📄 form1.cs

📁 三汇CTI示例程序源码
💻 CS
📖 第 1 页 / 共 5 页
字号:
							//search for idle analog trunk channel
							ChInfo[nCh].nLinkToCh = SsmSearchIdleCallOutCh(1, 0);
							if(ChInfo[nCh].nLinkToCh >= 0)
							{					
								if(ShDll.SsmClearRxDtmfBuf(nCh) == -1)
								{
									ShowErrMsg("E_CHG_RcvDTMF", "USER_GET_1STDTMF", "SsmClearRxDtmfBuf");
								}
								ChInfo[nCh].nStatus = APP_USER_STATUS.USER_REQ_TRUNK;
								//send E_US_SEIZURE_TK
								SendMessage(hwnd,WM_USER+(int)EventMsg.E_US_SEIZURE_TK, (IntPtr)ChInfo[nCh].nLinkToCh, (IntPtr)nCh);
							}
							else
							{
								//note: if value "-1" is returned by function SsmSearchIdleCallOutCh(), then it is due to failed call of this function or 
								// no idle channel is found
								if(ChInfo[nCh].nLinkToCh == -1)
								{
									ShowErrMsg("E_CHG_RcvDTMF", "USER_GET_1STDTMF", "SsmSearchIdleCallOutCh");
								}

								if(SsmSendTone(nCh, 1) == -1)
								{
									ShowErrMsg("E_CHG_RcvDTMF", "USER_GET_1STDTMF", "SsmSendTone");
								}
								ChInfo[nCh].nStatus = APP_USER_STATUS.USER_WAIT_HANGUP;
							}
							break;
						case '2':
							ChInfo[nCh].nStatus = APP_USER_STATUS.USER_GET_DTMF;
							//start T2:8 seconds
							if( (ChInfo[nCh].nTimer = ShDll.SsmStartTimer(8000, 1)) == -1)
							{
								ShowErrMsg("E_CHG_RcvDTMF", "USER_GET_1STDTMF", "SsmStartTimer");
							}
							break;
						default:
							//send busy tone to station channel 
							if(SsmSendTone(nCh, 1) == -1)
							{
								ShowErrMsg("E_CHG_RcvDTMF", "USER_GET_1STDTMF", "SsmSendTone");
							}
							ChInfo[nCh].nStatus = APP_USER_STATUS.USER_WAIT_HANGUP;
							break;
						}
						break;
					case APP_USER_STATUS.USER_GET_DTMF:
						if(dwDtmfLen == MAX_USER_DTMFLEN)
						{
							ChInfo[nCh].szPhoneNumBuf.Insert (dwDtmfLen-1,dwDtmfNum);//[dwDtmfLen-1] = dwDtmfNum;
							//close T2
							if(ShDll.SsmStopTimer(ChInfo[nCh].nTimer) == -1)	
							{
								ShowErrMsg("E_CHG_RcvDTMF", "USER_GET_DTMF", "SsmStopTimer");
							}
			
							for(int i=0; i<nMaxCh; i++)
							{
								//to identify channel number Ch-k according to extension number
								if ( (ChInfo[i].nChType == 2) && (ChInfo[nCh].szPhoneNumBuf.ToString ().Equals ( ChInfo[i].szUserNum.ToString ())) && i != nCh)			//	&& (ChInfo[nCh].szPhoneNumBuf== ChInfo[i].szUserNum.ToString ().ToCharArray ()) && i != nCh)
								{
									ChInfo[nCh].nLinkToCh = i;
									ChInfo[nCh].nStatus = APP_USER_STATUS.USER_REQ_USER;
									//send E_US_SEIZURE
									SendMessage(hwnd,WM_USER+(int)EventMsg.E_US_SEIZURE, (IntPtr)ChInfo[nCh].nLinkToCh, (IntPtr)nCh);	//send seizure reqest to called party channel
								}
							}
				
							if(ChInfo[nCh].nLinkToCh == -1)
							{
								//send busy tone to station channel 
								if(SsmSendTone(nCh, 1) == -1)
								{
									ShowErrMsg("E_CHG_RcvDTMF", "USER_GET_DTMF", "SsmSendTone");
								}
								ChInfo[nCh].nStatus = APP_USER_STATUS.USER_WAIT_HANGUP;
							}
						}//end of first if
						else
						{
							ChInfo[nCh].szPhoneNumBuf.Insert (dwDtmfLen-1,dwDtmfNum);
							//close and restart T2 in order to reset T2 
							if(ShDll.SsmStopTimer(ChInfo[nCh].nTimer) == -1)	
							{
								ShowErrMsg("E_CHG_RcvDTMF", "USER_GET_DTMF", "SsmStopTimer");
							}
							if( (ChInfo[nCh].nTimer = ShDll.SsmStartTimer(8000, 1)) == -1)
							{
								ShowErrMsg("E_CHG_RcvDTMF", "USER_GET_DTMF", "SsmStartTimer");
							}
						}
						break;
					case APP_USER_STATUS.USER_DIALOUT:			
						//close and restart T3 in order to reset T3 
						if(ShDll.SsmStopTimer(ChInfo[nCh].nTimer) == -1)	
						{
							ShowErrMsg("E_CHG_RcvDTMF", "USER_DIALOUT", "SsmStopTimer");
						}
						if( (ChInfo[nCh].nTimer = ShDll.SsmStartTimer(18000, 1)) == -1)
						{
							ShowErrMsg("E_CHG_RcvDTMF", "USER_DIALOUT", "SsmStartTimer");
						}

			
						//Send E_US_DTMF2TK
						SendMessage(hwnd,WM_USER+(int)EventMsg.E_US_DTMF2TK, (IntPtr)ChInfo[nCh].nLinkToCh, (IntPtr)lParam);		//post dtmf event to trunk channel
						break;
					case APP_USER_STATUS.USER_F_GET_DTMF:
						if(dwDtmfLen == MAX_USER_DTMFLEN)
						{
							ChInfo[nCh].szPhoneNumBuf.Insert (dwDtmfLen-1,dwDtmfNum);//[dwDtmfLen-1] = dwDtmfNum;
							//close T4
							if(ShDll.SsmStopTimer(ChInfo[nCh].nTimer) == -1)	
							{
								ShowErrMsg("E_CHG_RcvDTMF", "USER_F_GET_DTMF", "SsmStopTimer");
							}

							for(int i=0; i<nMaxCh; i++)
							{
								//station channel rule judge ?
								if( (ChInfo[i].nChType == 2)
								&&(ChInfo[nCh].szPhoneNumBuf.ToString ().Equals (ChInfo[i].szUserNum.ToString ())) && i != nCh )
								{
									ChInfo[nCh].nLinkToCh = i;
									ChInfo[nCh].nStatus = APP_USER_STATUS.USER_F_REQ_USER;
									//F_US_ SEIZURE→ch2
									SendMessage(hwnd,WM_USER+(int)EventMsg.F_US_SEIZURE, (IntPtr)ChInfo[nCh].nLinkToCh, (IntPtr)nCh);	//post seizure event to station channel	
								}
							}
				
							if(ChInfo[nCh].nLinkToCh == -1)
							{
								//send busy tone to station channel 
								if(SsmSendTone(nCh, 1) == -1)
								{
									ShowErrMsg("E_CHG_RcvDTMF", "USER_F_GET_DTMF", "SsmSendTone");
								}

								ChInfo[nCh].nStatus = APP_USER_STATUS.USER_F_OPERATE;
							}
						}//end of first if
						else
						{
							ChInfo[nCh].szPhoneNumBuf.Insert (dwDtmfLen-1,dwDtmfNum);
							//close and restart T4 in order to reset T4
							if(ShDll.SsmStopTimer(ChInfo[nCh].nTimer) == -1)	
							{
								ShowErrMsg("E_CHG_RcvDTMF", "USER_F_GET_DTMF", "SsmStopTimer");
							}
							if( (ChInfo[nCh].nTimer = ShDll.SsmStartTimer(8000, 1)) == -1)
							{
								ShowErrMsg("E_CHG_RcvDTMF", "USER_F_GET_DTMF", "SsmStartTimer");
							}
						}
						break;
					case APP_USER_STATUS.USER_REQ_USER:
						break;
					case APP_USER_STATUS.USER_RING_BACK:
						break;
					case APP_USER_STATUS.USER_TALKING:
						break;
					case APP_USER_STATUS.USER_WAIT_HANGUP:
						break;
					case APP_USER_STATUS.USER_LOCAL_RING:
						break;
					case APP_USER_STATUS.USER_REQ_TRUNK:
						break;
					case APP_USER_STATUS.USER_WAIT_REMOTE_PICKUP:
						break;
					case APP_USER_STATUS.USER_F_REQ_USER:
						break;
					case APP_USER_STATUS.USER_F_RING_BACK:
						break;
					case APP_USER_STATUS.USER_F_TALKING:
						break;
					case APP_USER_STATUS.USER_F_OPERATE:
						break;
					default:
						break;
					}
					break;//end of switch for E_CHG_RcvDTMF
				case (int)Event.E_CHG_FlashCount:

					switch(ChInfo[nCh].nStatus)
					{
					case APP_USER_STATUS.USER_TALKING:
						if(!ChInfo[nCh].bPressFlag)	//flash Flag==0?
						{
							//tear down bus connection between ch0 and ch1
							if(ShDll.SsmStopTalkWith(nCh, ChInfo[nCh].nLinkToCh) == -1)
							{
								ShowErrMsg("E_CHG_FlashCount", "USER_TALKING", "SsmStopTalkWith");
							}
							//E_MSG _FLASH→ch0
							SendMessage(hwnd,WM_USER+(int)EventMsg.E_MSG_FLASH, (IntPtr)ChInfo[nCh].nLinkToCh, (IntPtr)nCh);
							//falsh Flag=1
							ChInfo[nCh].bPressFlag = true;
							//clear DTMF buffer
							if(ShDll.SsmClearRxDtmfBuf(nCh) == -1)
							{
								ShowErrMsg("E_CHG_FlashCount", "USER_TALKING", "SsmClearRxDtmfBuf");
							}
							//send dial tone
							if(SsmSendTone(nCh, 0) == -1)
							{
								ShowErrMsg("E_CHG_FlashCount", "USER_TALKING", "SsmSendTone");
							}

							ChInfo[nCh].nSaveSubmiteCh = ChInfo[nCh].nLinkToCh;			
							ChInfo[nCh].nStatus =APP_USER_STATUS.USER_F_GET_DTMF;
							ChInfo[nCh].nLinkToCh = -1;
							ChInfo[nCh].szPhoneNumBuf = new StringBuilder ();			

							//start T4:8 seconds
							if( (ChInfo[nCh].nTimer = ShDll.SsmStartTimer(8000, 1)) == -1)
							{
								ShowErrMsg("E_CHG_FlashCount", "USER_TALKING", "SsmStartTimer");
							}
						}
						break;
					case APP_USER_STATUS.USER_F_GET_DTMF:			
						//close T4
						if(ShDll.SsmStopTimer(ChInfo[nCh].nTimer) == -1)	
						{
							ShowErrMsg("E_CHG_FlashCount", "USER_F_GET_DTMF", "SsmStopTimer");
						}
						//stop dial tone
						nToneType = -2;
						nToneChResult = SsmChkSendTone(nCh, ref nToneType);
						if(nToneChResult == -1)
						{
							ShowErrMsg("E_CHG_FlashCount", "USER_F_GET_DTMF", "SsmChkSendTone");
						}
						else
						{
							if(nToneChResult == 1)
							{
								if(SsmStopSendTone(nCh) == -1)
								{
									ShowErrMsg("E_CHG_FlashCount", "USER_F_GET_DTMF", "SsmStopSendTone");
								}
							}
						}
			
						//on-hook Flag==0? on Ch0
						if(ChInfo[nCh].bSubmiteChHookFlag)
						{
							if(SsmSendTone(nCh, 3) == -1)
							{
								ShowErrMsg("E_CHG_FlashCount", "USER_F_GET_DTMF", "SsmSendTone");
							}
							ChInfo[nCh].nStatus = APP_USER_STATUS.USER_WAIT_HANGUP;
						}
						else								
						{
							ChInfo[nCh].nStatus = APP_USER_STATUS.USER_TALKING;	
							ChInfo[nCh].nLinkToCh = ChInfo[nCh].nSaveSubmiteCh;
							//E_MSG_CONNECT→ch0
							SendMessage(hwnd,WM_USER+(int)EventMsg.E_MSG_CONNECT, (IntPtr)ChInfo[nCh].nLinkToCh, (IntPtr)nCh);	
							//flash Flag=0
							ChInfo[nCh].bPressFlag = false;
							ChInfo[nCh].nSaveSubmiteCh = -1;
				
							//build bus connection
							if(ShDll.SsmTalkWith(nCh, ChInfo[nCh].nLinkToCh) == -1)
							{
								ShowErrMsg("E_CHG_FlashCount", "USER_F_GET_DTMF", "SsmTalkWith");
							}
							//clear DTMF buffer
							if(ShDll.SsmClearRxDtmfBuf(nCh) == -1)
							{
								ShowErrMsg("E_CHG_FlashCount", "USER_F_GET_DTMF", "SsmClearRxDtmfBuf");
							}
						}
						break;
					case APP_USER_STATUS.USER_F_REQ_USER:
						//on-hook Flag==0?
						if(ChInfo[nCh].bSubmiteChHookFlag)
						{
							if(SsmSendTone(nCh, 3) == -1)
							{
								ShowErrMsg("E_CHG_FlashCount", "USER_F_REQ_USER", "SsmSendTone");
							}
							ChInfo[nCh].nStatus = APP_USER_STATUS.USER_WAIT_HANGUP;
						}
						else								
						{
							ChInfo[nCh].nLinkToCh = ChInfo[nCh].nSaveSubmiteCh;
							ChInfo[nCh].nStatus = APP_USER_STATUS.USER_TALKING;
							//E_MSG_CONNECT→ch0
							SendMessage(hwnd,WM_USER+(int)EventMsg.E_MSG_CONNECT, (IntPtr)ChInfo[nCh].nLinkToCh, (IntPtr)nCh);
							//flash Flag=0
							ChInfo[nCh].bPressFlag = false;
							ChInfo[nCh].nSaveSubmiteCh = -1;
				
							//build bus connectin between ch0 and ch1
							if(ShDll.SsmTalkWith(nCh, ChInfo[nCh].nLinkToCh) == -1)
							{
								ShowErrMsg("E_CHG_FlashCount", "USER_F_REQ_USER", "SsmTalkWith");
							}
							//clear DTMF buffer
							if(ShDll.SsmClearRxDtmfBuf(nCh) == -1)
							{
								ShowErrMsg("E_CHG_FlashCount", "USER_F_REQ_USER", "SsmClearRxDtmfBuf");
							}
						}
						break;
					case APP_USER_STATUS.USER_F_OPERATE:
						if(SsmStopSendTone(nCh) == -1)
						{
							ShowErrMsg("E_CHG_FlashCount", "USER_F_OPERATE", "SsmStopSendTone");
						}
						//on-hook Flag==0? on Ch0
						if(ChInfo[nCh].bSubmiteChHookFlag)
						{
							//play howler tone
							if(SsmSendTone(nCh, 3) == -1)
							{
								ShowErrMsg("E_CHG_FlashCount", "USER_F_OPERATE", "SsmSendTone");
							}

							ChInfo[nCh].nStatus = APP_USER_STATUS.USER_WAIT_HANGUP;
						}
						else
						{
							ChInfo[nCh].nLinkToCh = ChInfo[nCh].nSaveSubmiteCh;
							//E_MSG_CONNECT→ch0
							SendMessage(hwnd,WM_USER+(int)EventMsg.E_MSG_CONNECT,(IntPtr) ChInfo[nCh].nLinkToCh, (IntPtr)nCh);
					
							//build bus connection between ch0 and ch1
							if(ShDll.SsmTalkWith(nCh, ChInfo[nCh].nLinkToCh) == -1)
							{
								ShowErrMsg("E_CHG_FlashCount", "USER_F_OPERATE", "SsmTalkWith");
							}
							//clear DTMF
							if(ShDll.SsmClearRxDtmfBuf(nCh) == -1)
							{
								ShowErrMsg("E_CHG_FlashCount", "USER_F_OPERATE", "SsmClearRxDtmfBuf");
							}
				
							ChInfo[nCh].nStatus = APP_USER_STATUS.USER_TALKING;
							ChInfo[nCh].nSaveSubmiteCh = -1;
							ChInfo[nCh].bPressFlag = false;
						}
						break;
					case APP_USER_STATUS.USER_GET_1STDTMF:
						break;
					case APP_USER_STATUS.USER_GET_DTMF:
						break;
					case APP_USER_STATUS.USER_REQ_USER:
						break;
					case APP_USER_STATUS.USER_RING_BACK:
						break;
					case APP_USER_STATUS.USER_WAIT_HANGUP:
						break;
					case APP_USER_STATUS.USER_REQ_TRUNK:
						break;
					case APP_USER_STATUS.USER_DIALOUT:
						break;
					case APP_USER_STATUS.USER_WAIT_REMOTE_PICKUP:
						break;
					case APP_USER_STATUS.USER_F_RING_BACK:
						break;
					case APP_USER_STATUS.USER_F_TALKING:
						break;
					default:
						break;
					}
					break;
				case (int)Event.E_SYS_TIMEOUT:		//timer Timeout event 

					switch(ChInfo[nCh].nStatus)
					{
					case APP_USER_STATUS.USER_GET_1STDTMF:
						//close T1
						if(ShDll.SsmStopTimer(ChInfo[nCh].nTimer) == -1)	
						{
							ShowErrMsg("E_SYS_TIMEOUT", "USER_F_GET_DTMF", "SsmStopTimer");
						}
			
						nToneType = 0;
						nToneChResult = SsmChkSendTone(nCh,ref nToneType);
						if(nToneChResult != -1)

⌨️ 快捷键说明

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