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

📄 form1.cs

📁 三汇CTI示例程序源码
💻 CS
📖 第 1 页 / 共 5 页
字号:

						ChInfo[nCh].nStatus = APP_USER_STATUS.USER_TALKING;
						break;
					default:
						break;
					}
		
					//retrieve CalledId
					if (SsmGetDtmfStr(nCh,ChInfo[nCh].szCalleeId) == -1)
					{
						ShowErrMsg("E_TK_DIAL_OK", "", "SsmGetDtmfStr");
					}
					break;
				/*+++++++++define public message+++++++++*/
				case (int)EventMsg.E_MSG_RELEASE:
					switch(ChInfo[nCh].nStatus)
					{
					case APP_USER_STATUS.USER_TALKING:
						//play howler tone
						if(SsmSendTone(nCh, 3) == -1)
						{
							ShowErrMsg("E_MSG_RELEASE", "USER_TALKING", "SsmSendTone");
						}

						ChInfo[nCh].nStatus = APP_USER_STATUS.USER_WAIT_HANGUP;
						break;
					case APP_USER_STATUS.USER_F_WAIT_TALK:
						//stop playback of background music
						nPlayResult = ShDll.SsmCheckPlay(nCh);
						if(nPlayResult != -1)
						{
							if(nPlayResult == 0)
							{
								if(ShDll.SsmStopPlayFile(nCh) == -1)
								{
									ShowErrMsg("E_MSG_RELEASE", "USER_F_TALKING", "SsmStopPlayFile");
								}
							}
						}
						else
						{
							ShowErrMsg("E_MSG_RELEASE", "USER_F_TALKING", "SsmCheckPlay");
						}
			
						//call transfer failed and send howler tone to original calling party 
						if(SsmSendTone(nCh, 3) == -1)
						{
							ShowErrMsg("E_MSG_RELEASE", "USER_F_TALKING", "SsmSendTone");
						}
			
						ChInfo[nCh].nStatus = APP_USER_STATUS.USER_WAIT_HANGUP;
						break;
					case APP_USER_STATUS.USER_F_TALKING:
						//play howler tone
						if(SsmSendTone(nCh, 3) == -1)
						{
							ShowErrMsg("E_MSG_RELEASE", "USER_F_TALKING", "SsmSendTone");
						}
			
						ChInfo[nCh].nLinkToCh = -1;
						ChInfo[nCh].nStatus = APP_USER_STATUS.USER_F_OPERATE;
						break;
					default:
						break;
					}
					break;
				case (int)EventMsg.E_MSG_FLASH:

					//play background music
					if(ShDll.SsmPlayFile(nCh, "bgmusic.wav", -1, 0, 0xffffffff) == -1)
					{
						ShowErrMsg("E_MSG_FLASH", "", "SsmPlayFile");
					}

					ChInfo[nCh].nStatus = APP_USER_STATUS.USER_F_WAIT_TALK;
					break;
				case (int)EventMsg.E_MSG_CONNECT:
					ChInfo[nCh].nLinkToCh = lParam;
					//stop playback of background music 
					nPlayResult = ShDll.SsmCheckPlay(nCh);
					if(nPlayResult != -1)
					{
						if(nPlayResult == 0)
						{
							if(ShDll.SsmStopPlayFile(nCh) == -1)
							{
								ShowErrMsg("E_MSG_CONNECT", "", "SsmStopPlayFile");
							}
						}
					}
					else
					{
						ShowErrMsg("E_MSG_CONNECT", "", "SsmCheckPlay");
					}

					ChInfo[nCh].nStatus = APP_USER_STATUS.USER_TALKING;
					break;
				case (int)EventMsg.E_MSG_HANGUP:
					ChInfo[nCh].bSubmiteChHookFlag = true;			//origial calling party go on-hook
					break;
				default:
					break;
			}	
		}


		void TrunkProc(int event1, int wParam, int lParam)
		{
            int nCh;						//trunk channel number
			int dwDtmfLen;				//lenght of DTMF received
			char dwDtmfNum;				// DTMF received
			int nChState;					//current statt of trunk channel
			int nPlayResult;				//return value of function SsmCheckPlay()
			string tempChar = "";//new char [20];

			nCh = wParam;

			switch(event1)
			{
				/*+++++++++driver message+++++++++*/
			case (int)Event.E_CHG_ChState:
				nChState = lParam & 0xffff;
				switch(ChInfo[nCh].nStatus)
				{
					case APP_USER_STATUS.TRUNK_IDLE:
						if(nChState == (int)ChState.S_CALL_RINGING)
						{
							
							if(ShDll.SsmPickup(nCh) == -1)
							{
								ShowErrMsg("E_CHG_ChState", "TRUNK_IDLE", "SsmPickup");
							}
								//retrieve CallerId 
							if(ShDll.SsmGetCallerId(nCh, ChInfo[nCh].szCallerId) == -1)
							{
								ShowErrMsg("E_CHG_ChState", "TRUNK_IDLE", "SsmGetDtmfStr");			
							}
							ChInfo[nCh].nStatus = APP_USER_STATUS.TRUNK_WAIT_ACTUAL_PICKUP;
						}
						break;
					case APP_USER_STATUS.TRUNK_WAIT_ACTUAL_PICKUP:
						if(nChState == (int)ChState.S_CALL_TALKING)				
						{		

							//play welcome
							if(ShDll.SsmPlayFile(nCh, "Select.pcm", -1, 0, 0xffffffff) == -1)
							{
								ShowErrMsg("E_CHG_ChState", "TRUNK_WAIT_ACTUAL_PICKUP", "SsmPlayFile");
							}
							//set DTMF-STOP-PLAY switch 
							if(ShDll.SsmSetDtmfStopPlay(nCh, true) == -1)
							{
								ShowErrMsg("E_CHG_ChState", "TRUNK_WAIT_ACTUAL_PICKUP", "SsmSetDtmfStopPlay");
							}

							ChInfo[nCh].nTimer = ShDll.SsmStartTimer(15000,1);
							ChInfo[nCh].nStatus = APP_USER_STATUS.TRUNK_WAIT_SELECTION;
						}
						else
						{	
				
							if(ShDll.SsmClearRxDtmfBuf(nCh) == -1)
							{
								ShowErrMsg("E_CHG_ChState", "TRUNK_WAIT_ACTUAL_PICKUP", "SsmClearRxDtmfBuf");
							}
							
							if(ShDll.SsmHangup(nCh) == -1)
							{
								ShowErrMsg("E_CHG_ChState", "TRUNK_WAIT_ACTUAL_PICKUP", "SsmHangup");
							}
							ChInfo[nCh].szCallerId = new StringBuilder (NUM_LENGTH);		
							ChInfo[nCh].szCalleeId = new StringBuilder (NUM_LENGTH);					
							ChInfo[nCh].nStatus = APP_USER_STATUS.TRUNK_IDLE;
						}
						break;
					case APP_USER_STATUS.TRUNK_DIALING:
			
						switch(nChState)
						{
						case (int)ChState.S_CALL_WAIT_REMOTE_PICKUP:
							//retrieve CalledId
							ChInfo[nCh].szCalleeId = new StringBuilder (ChInfo[nCh].szPhoneNumBuf.ToString ());

							ChInfo[nCh].nStatus = APP_USER_STATUS.TRUNK_WAIT_REMOTE_PICKUP;
				
							SendMessage(hwnd,WM_USER+(int)EventMsg.E_TK_DIAL_OK, (IntPtr)ChInfo[nCh].nLinkToCh, (IntPtr)nCh);
							break;
						case (int)ChState.S_CALL_TALKING:
							//retrieve calledId
							ChInfo[nCh].szCalleeId = new StringBuilder (ChInfo[nCh].szPhoneNumBuf.ToString ());
							ChInfo[nCh].nStatus = APP_USER_STATUS.TRUNK_CONNECTED;
						
							SendMessage(hwnd,WM_USER+(int)EventMsg.E_TK_REMOTE_PICKUP, (IntPtr)ChInfo[nCh].nLinkToCh, (IntPtr)nCh);
							break;
						case (int)ChState.S_CALL_PENDING:			
						
							SendMessage(hwnd,WM_USER+(int)EventMsg.E_TK_DIAL_FAIL, (IntPtr)ChInfo[nCh].nLinkToCh, (IntPtr)nCh);
			
							if(ShDll.SsmHangup(nCh) == -1)
							{
								ShowErrMsg("E_CHG_ChState", "TRUNK_DIALING", "SsmHangup");
							}
						
							if(ShDll.SsmClearRxDtmfBuf(nCh) == -1)
							{
								ShowErrMsg("E_CHG_ChState", "TRUNK_DIALING", "SsmClearRxDtmfBuf");
							}
							ChInfo[nCh].szCallerId = new StringBuilder (NUM_LENGTH);		
							ChInfo[nCh].szCalleeId = new StringBuilder (NUM_LENGTH);	
			
							ChInfo[nCh].nStatus = APP_USER_STATUS.TRUNK_IDLE;
							break;
						default:
							break;
						}
						break;
					case APP_USER_STATUS.TRUNK_WAIT_REMOTE_PICKUP:
						if(nChState == (int)ChState.S_CALL_TALKING)			//called trunk channel answer the call
						{	
							ChInfo[nCh].nStatus = APP_USER_STATUS.TRUNK_CONNECTED;
					
							SendMessage(hwnd,WM_USER+(int)EventMsg.E_TK_REMOTE_PICKUP, (IntPtr)ChInfo[nCh].nLinkToCh, (IntPtr)nCh);
						}
						else									//called trunk channel does not answer the call
						{				
							if(ShDll.SsmClearRxDtmfBuf(nCh) == -1)
							{
								ShowErrMsg("E_CHG_ChState", "TRUNK_WAIT_REMOTE_PICKUP", "SsmClearRxDtmfBuf");
							}
							//go on-hook
							if(ShDll.SsmHangup(nCh) == -1)
							{
								ShowErrMsg("E_CHG_ChState", "TRUNK_WAIT_REMOTE_PICKUP", "SsmHangup");
							}
							//send E_TK_REMOTE_NOANSWER
							SendMessage(hwnd,WM_USER+(int)EventMsg.E_TK_REMOTE_NOANSWER, (IntPtr)ChInfo[nCh].nLinkToCh, (IntPtr)nCh);	
							ChInfo[nCh].szCalleeId = new StringBuilder (NUM_LENGTH);		
							ChInfo[nCh].szCallerId = new StringBuilder (NUM_LENGTH);		
							ChInfo[nCh].nStatus = APP_USER_STATUS.TRUNK_IDLE;
						}
						break;
					case APP_USER_STATUS.TRUNK_REQ_USER:
						if(nChState == (int)ChState.S_CALL_PENDING)
						{
							//clear DTmf buffer
							if(ShDll.SsmClearRxDtmfBuf(nCh) == -1)
							{
								ShowErrMsg("E_CHG_ChState", "TRUNK_REQ_USER", "SsmClearRxDtmfBuf");
							}
							//go on-hook
							if(ShDll.SsmHangup(nCh) == -1)
							{
								ShowErrMsg("E_CHG_ChState", "TRUNK_REQ_USER", "SsmHangup");
							}
				
							ChInfo[nCh].szCallerId = new StringBuilder (NUM_LENGTH);		
							ChInfo[nCh].szCalleeId = new StringBuilder (NUM_LENGTH);		
				
							ChInfo[nCh].nStatus = APP_USER_STATUS.TRUNK_IDLE;
						}
						break;
					case APP_USER_STATUS.TRUNK_RING_BACK:
						if(nChState == (int)ChState.S_CALL_PENDING)
						{
							//stop background music
							nPlayResult = ShDll.SsmCheckPlay(nCh);
							if(nPlayResult != -1)
							{
								if(nPlayResult == 0)
								{
									if(ShDll.SsmStopPlayFile(nCh) == -1)
									{
										ShowErrMsg("E_CHG_ChState", "TRUNK_RING_BACK", "SsmStopPlayFile");
									}
								}
							}
							else
							{
								ShowErrMsg("E_CHG_ChState", "TRUNK_RING_BACK", "SsmCheckPlay");
							}

							//clear DTMF buffer
							if(ShDll.SsmClearRxDtmfBuf(nCh) == -1)
							{
								ShowErrMsg("E_CHG_ChState", "TRUNK_RING_BACK", "SsmClearRxDtmfBuf");
							}
							//go on-hook
							if(ShDll.SsmHangup(nCh) == -1)
							{
								ShowErrMsg("E_CHG_ChState", "TRUNK_RING_BACK", "SsmHangup");
							}

							//send E_US_RELEASE
							SendMessage(hwnd,WM_USER+(int)EventMsg.E_US_RELEASE, (IntPtr)ChInfo[nCh].nLinkToCh, (IntPtr)nCh);

							ChInfo[nCh].szCallerId = new StringBuilder (NUM_LENGTH);		
							ChInfo[nCh].szCalleeId = new StringBuilder (NUM_LENGTH);						
							ChInfo[nCh].nStatus = APP_USER_STATUS.TRUNK_IDLE;				
						}
						break;
					case APP_USER_STATUS.TRUNK_CONNECTED:
						if(nChState == (int)ChState.S_CALL_PENDING)
						{
							//send E_MSG_RELEASE to channel connected				
							SendMessage(hwnd,WM_USER+(int)EventMsg.E_MSG_RELEASE, (IntPtr)ChInfo[nCh].nLinkToCh, (IntPtr)nCh);
							//tear down bus connection
							if(ShDll.SsmStopTalkWith(nCh, ChInfo[nCh].nLinkToCh) == -1)
							{
								ShowErrMsg("E_CHG_ChState", "TRUNK_CONNECTED", "SsmStopTalkWith");
							}
							//clear DTMF buffer
							if(ShDll.SsmClearRxDtmfBuf(nCh) == -1)
							{
								ShowErrMsg("E_CHG_ChState", "TRUNK_CONNECTED", "SsmClearRxDtmfBuf");
							}
							//go on-hook
							if(ShDll.SsmHangup(nCh) == -1)
							{
								ShowErrMsg("E_CHG_ChState", "TRUNK_CONNECTED", "SsmHangup");
							}

							ChInfo[nCh].szCallerId = new StringBuilder (NUM_LENGTH);		
							ChInfo[nCh].szCalleeId = new StringBuilder (NUM_LENGTH);		

							ChInfo[nCh].nStatus = APP_USER_STATUS.TRUNK_IDLE;				
						}
						break;
					case APP_USER_STATUS.TRUNK_WAIT_SELECTION:
						if(nChState ==(int)ChState.S_CALL_PENDING)
						{
							//close T1:8 seconds
							if(ShDll.SsmStopTimer(ChInfo[nCh].nTimer) == -1)
							{
								ShowErrMsg("E_CHG_ChState", "TRUNK_WAIT_SELECTION", "SsmStopTimer");
							}
							//clear DTMF buffer
							if(ShDll.SsmClearRxDtmfBuf(nCh) == -1)
							{
								ShowErrMsg("E_CHG_ChState", "TRUNK_WAIT_SELECTION", "SsmClearRxDtmfBuf");
							}
							//go on-hook 
							if(ShDll.SsmHangup(nCh) == -1)
							{
								ShowErrMsg("E_CHG_ChState", "TRUNK_WAIT_SELECTION", "SsmHangup");
							}

							ChInfo[nCh].szCallerId = new StringBuilder (NUM_LENGTH);					
							ChInfo[nCh].szCalleeId = new StringBuilder (NUM_LENGTH);					

							ChInfo[nCh].nStatus = APP_USER_STATUS.TRUNK_IDLE;
						}
						break;
					case APP_USER_STATUS.TRUNK_FLASHING:
						if(nChState == (int)ChState.S_CALL_PENDING)
						{
							//stop background music
							nPlayResult = ShDll.SsmCheckPlay(nCh);
							if(nPlayResult != -1)
							{
								if(nPlayResult == 0)
								{
									if(ShDll.SsmStopPlayFile(nCh) == -1)
									{
										ShowErrMsg("E_CHG_ChState", "TRUNK_FLASHING", "SsmStopPlayFile");
									}
								}
							}
							else
							{
								ShowErrMsg("E_CHG_ChState", "TRUNK_FLASHING", "SsmCheckPlay");
							}
				
							SendMessage(hwnd,WM_USER+(int)EventMsg.E_MSG_HANGUP, (IntPtr)ChInfo[nCh].nLinkToCh, (IntPtr)nCh);
						}
						break;
					default:
						break;
				}
					break;
			case (int)Event.E_CHG_RcvDTMF:
				dwDtmfLen = 

⌨️ 快捷键说明

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