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

📄 mainframe.cpp

📁 三汇CTI示例程序源码
💻 CPP
📖 第 1 页 / 共 2 页
字号:
									CHECK_RETURN SsmAddToFileList(ch, "wav\\m.wav", -1, 0, -1);
									CHECK_RETURN SsmAddToFileList(ch, "wav\\a.wav", -1, 0, -1);
									CHECK_RETURN SsmPlayFileList(ch);
								}
							}
							else // Failed to create a conference.
							{
								CHECK_RETURN SsmClearFileList(ch);
								CHECK_RETURN SsmAddToFileList(ch, "wav\\m.wav", -1, 0, -1);
								CHECK_RETURN SsmAddToFileList(ch, "wav\\a.wav", -1, 0, -1);
								CHECK_RETURN SsmPlayFileList(ch);
							}

						}
						// To join
						else if (SsmValidateGrpId(atoi(channels[ch].dtmf_str.c_str())))
						{
							// Store the conf_id, it will be used later on.
							channels[ch].creater = false;
							channels[ch].conf_to_join = atoi(channels[ch].dtmf_str.c_str());
							channels[ch].dtmf_str.erase(channels[ch].dtmf_str.begin(), channels[ch].dtmf_str.end());
							CHECK_RETURN SsmPlayFile(ch, "wav\\c.wav", -1, 0, -1);
							channels[ch].state_conference = CO_HOW_TO_JOIN;
						}
						// To what? no specific conference.
						else 
						{
							// Play "the id doesn't exist ...".
							CHECK_RETURN SsmClearFileList(ch);
							CHECK_RETURN SsmAddToFileList(ch, "wav\\b.wav", -1, 0, -1);
							// Play "which to join or create...".
							CHECK_RETURN SsmAddToFileList(ch, "wav\\a.wav", -1, 0, -1);
							CHECK_RETURN SsmPlayFileList(ch);
							// Clear my dtmf buffer.
							channels[ch].dtmf_str.erase(channels[ch].dtmf_str.begin(), channels[ch].dtmf_str.end());
						}
					}
					else
					{
						// never forget to store the recent dtmf.
						channels[ch].dtmf_str.append(1, dtmf);
					}
				}

				// Arc 8
				else if (channels[ch].state_conference == CO_IN_CONFERENCE)
				{
					dtmf = lParam & 0x00FF;
					switch (dtmf)
					{
						case '*':
							// verbose infomation
							int GrpId, MmbrId;
							DWORD SilenceTime;
							WORD JoinMode, IsSpeaking, TotalMember, TotalSpeaker, TotalSpeaking;
							CHECK_RETURN SsmGetConfChInfo(ch, &GrpId, &MmbrId, & JoinMode, &IsSpeaking, &SilenceTime);
							CHECK_RETURN SsmGetConfGrpInfo(GrpId, &TotalMember, &TotalSpeaker, &TotalSpeaking);
							CHECK_RETURN SsmClearFileList(ch);
							// Play "group id is ...".
							CHECK_RETURN SsmAddToFileList(ch, "wav\\j1.wav", -1, 0, -1);
							add_list(ch, GrpId);
							// Play "member id is ...".
							CHECK_RETURN SsmAddToFileList(ch, "wav\\j2.wav", -1, 0, -1);
							add_list(ch, MmbrId);
							// Play "join mode is ...".
							CHECK_RETURN SsmAddToFileList(ch, "wav\\j3.wav", -1, 0, -1);
							add_list(ch, JoinMode);
							// Play "is_speaking is ...".
							CHECK_RETURN SsmAddToFileList(ch, "wav\\j4.wav", -1, 0, -1);
							add_list(ch, IsSpeaking);
							// Play "silence time is ...".
							CHECK_RETURN SsmAddToFileList(ch, "wav\\j5.wav", -1, 0, -1);
							add_list(ch, SilenceTime);
							// play "total member is ...".
							CHECK_RETURN SsmAddToFileList(ch, "wav\\j6.wav", -1, 0, -1);
							add_list(ch, TotalMember);
							// Play "total speaker is ...".
							CHECK_RETURN SsmAddToFileList(ch, "wav\\j7.wav", -1, 0, -1);
							add_list(ch, TotalSpeaker);
							// Play "total speaking is ...".
							CHECK_RETURN SsmAddToFileList(ch, "wav\\j8.wav", -1, 0, -1);
							add_list(ch, TotalSpeaking);
							CHECK_RETURN SsmPlayFileList(ch);
							break;

						case '9':
							// Stop moving freq
							//SsmSetVoiceEffect(ch, 128);
							break;

						case '1':
							// Moving freq up, like a woman
							//SsmSetVoiceEffect(ch, 220);
							break;

						case '2':
							// Moving freq down, like a man
							//SsmSetVoiceEffect(ch, 70);
							break;

						case '#':
							// To talk securely
							CHECK_RETURN SsmPlayFile(ch, "wav\\h.wav", -1, 0, -1);
							channels[ch].state_conference = CO_WHO_TO_TALK_SECURELY;
							break;

						default:
							// Error! but no operation needed!
							break;

					}
				}

				// Arc 10
				else if (channels[ch].state_conference == CO_WHO_TO_TALK_SECURELY)
				{
					dtmf = lParam & 0x00FF;
					switch (dtmf)
					{
						case '#':
							// Exit talking securely
							if (channels[ch].dtmf_str.length() == 0)
							{
								if (channels[ch].ch_to_talk_securely >= 0)
								{
									CHECK_RETURN SsmStopLinkFrom(ch, channels[ch].ch_to_talk_securely);
									CHECK_RETURN SsmExitConfGroup(ch, FALSE);
									CHECK_RETURN SsmJoinConfGroup(channels[ch].conf_to_join, ch, channels[ch].last_join_mode, 0, FALSE, FALSE);
									channels[ch].ch_to_talk_securely = -1;
									CHECK_RETURN SsmPlayFile(ch, "wav\\o.wav", -1, 0, -1);
								}
							}
							// Start talking securely
							else
							{
								channels[ch].ch_to_talk_securely = atoi(channels[ch].dtmf_str.c_str());
								channels[ch].dtmf_str.erase(channels[ch].dtmf_str.begin(), channels[ch].dtmf_str.end());
								if (is_same_group(ch, channels[ch].ch_to_talk_securely))
								{
									int tmp;
									WORD tmp2;
									DWORD tmp3;
									CHECK_RETURN SsmGetConfChInfo(ch, &tmp, &tmp, &channels[ch].last_join_mode, &tmp2, &tmp3);
									CHECK_RETURN SsmExitConfGroup(ch, FALSE);
									CHECK_RETURN SsmJoinConfGroup(channels[ch].conf_to_join,
										ch,	2 , 0, FALSE, FALSE);
									CHECK_RETURN SsmLinkFrom(ch, channels[ch].ch_to_talk_securely);
									CHECK_RETURN SsmPlayFile(ch, "wav\\n.wav", -1, 0, -1);
								}
								else
								{
									channels[ch].ch_to_talk_securely = -1;
									CHECK_RETURN SsmClearFileList(ch);
									CHECK_RETURN SsmAddToFileList(ch, "wav\\i.wav", -1, 0, -1);
									CHECK_RETURN SsmPlayFileList(ch);
								}
							}
							channels[ch].state_conference = CO_IN_CONFERENCE;
							break;
						default:
							channels[ch].dtmf_str.append(sizeof(char), dtmf);
					}
				}

				// Arc 11
				else if (channels[ch].state_conference == CO_HOW_TO_JOIN)
				{
					dtmf = lParam & 0x00FF;
					switch (dtmf)
					{
						// Five entries, corresponding to five join modes.
						case '1': case '2': case '3': case '4': case '5':
							if (SsmJoinConfGroup(channels[ch].conf_to_join, ch, dtmf - '1', 0, FALSE, FALSE) == 0)
							{
								CHECK_RETURN SsmStopPlayFileList(get_chs_master(ch));
								CHECK_RETURN SsmSetPlayDest(get_chs_master(ch), 1);
								CHECK_RETURN SsmClearFileList(get_chs_master(ch));
								add_list(get_chs_master(ch), ch);
								CHECK_RETURN SsmAddToFileList(get_chs_master(ch), "wav\\f.wav", -1, 0, -1);
								CHECK_RETURN SsmStopPlayFile(get_chs_master(ch));
								CHECK_RETURN SsmPlayFileList(get_chs_master(ch));
								channels[get_chs_master(ch)].IsPlayingBgSound = false;
								//SsmBindVCh(ch);
								//SsmSetVoiceEffect(ch, 128);
								channels[ch].state_conference = CO_IN_CONFERENCE;
							}
							else
							{
								CHECK_RETURN SsmClearFileList(ch);
								CHECK_RETURN SsmAddToFileList(ch, "wav\\p.wav", -1, 0, -1);
								CHECK_RETURN SsmAddToFileList(ch, "wav\\c.wav", -1, 0, -1);
								CHECK_RETURN SsmPlayFileList(ch);
							}
							break;
						// No specified join mode.
						default:
							CHECK_RETURN SsmClearFileList(ch);
							CHECK_RETURN SsmAddToFileList(ch, "wav\\e.wav", -1, 0, -1);
							CHECK_RETURN SsmAddToFileList(ch, "wav\\c.wav", -1, 0, -1);
							CHECK_RETURN SsmPlayFileList(ch);
					}
				}
				break; 

			// Here is the first step in conf flowchart.
			case TO_START - WM_USER:
				if (channels[ch].state_conference == CO_IDLE)
				{
					CHECK_RETURN SsmSetDtmfStopPlay(ch, TRUE);
					CHECK_RETURN SsmPlayFile(ch, "wav\\a.wav", -1, 0, -1);
					channels[ch].state_conference = CO_CREATE_OR_JOIN;
					channels[ch].dtmf_str.erase(channels[ch].dtmf_str.begin(), channels[ch].dtmf_str.end());
				}
				break; 

			// Here is the last step in conf flowchart.
			case TO_END - WM_USER:
				if (channels[ch].state_conference == CO_CREATE_OR_JOIN)
				{
					if (SsmCheckPlay(ch) == 0)
						CHECK_RETURN SsmStopPlay(ch);
					CHECK_RETURN SsmSetDtmfStopPlay(ch, FALSE);
					channels[ch].state_conference = CO_IDLE;
				}
				else if (channels[ch].state_conference == CO_HOW_TO_JOIN)
				{
					if (channels[ch].creater == true)
					{
						CHECK_RETURN SsmStopRecToFile(cm_pair.find(channels[ch].conf_to_join)->second);
						channels[cm_pair.find(channels[ch].conf_to_join)->second].master = MASTER_IDLE;
						CHECK_RETURN SsmFreeConfGroup(channels[ch].conf_to_join);
						cm_pair.erase(cm_pair.find(channels[ch].conf_to_join));
					}
					if (SsmCheckPlay(ch) == 0)
						CHECK_RETURN SsmStopPlay(ch);
					CHECK_RETURN SsmSetDtmfStopPlay(ch, FALSE);
					channels[ch].state_conference = CO_IDLE;
				}
				else if (channels[ch].state_conference == CO_IN_CONFERENCE ||
					channels[ch].state_conference == CO_WHO_TO_TALK_SECURELY)
				{
					int GrpId, MmbrId;
					DWORD SilenceTime;
					WORD JoinMode, IsSpeaking, TotalMember, TotalSpeaker, TotalSpeaking;
					CHECK_RETURN SsmSetPlayDest(get_chs_master(ch), 1);
					CHECK_RETURN SsmStopPlayFileList(get_chs_master(ch));
					CHECK_RETURN SsmClearFileList(get_chs_master(ch));
					add_list(get_chs_master(ch), ch);
					CHECK_RETURN SsmAddToFileList(get_chs_master(ch), "wav\\g.wav", -1, 0, -1);
					CHECK_RETURN SsmStopPlayFile(get_chs_master(ch));
					CHECK_RETURN SsmPlayFileList(get_chs_master(ch));
					channels[get_chs_master(ch)].IsPlayingBgSound = false;
					CHECK_RETURN SsmGetConfChInfo(ch, &GrpId, &MmbrId, & JoinMode, &IsSpeaking, &SilenceTime);
					CHECK_RETURN SsmGetConfGrpInfo(GrpId, &TotalMember, &TotalSpeaker, &TotalSpeaking);
					//SsmSetVoiceEffect(ch, 128);
					//SsmUnBindVCh(ch);
					if (TotalMember == 2)
					{
						CHECK_RETURN SsmStopRecToFile(get_chs_master(ch));
						CHECK_RETURN SsmExitConfGroup(ch, FALSE);
						if (channels[ch].ch_to_talk_securely >= 0)
						{
							CHECK_RETURN SsmStopLinkFrom(ch, channels[ch].ch_to_talk_securely);
							channels[ch].ch_to_talk_securely = -1;
						}
						channels[get_master(GrpId)].master = MASTER_IDLE;
						CHECK_RETURN SsmFreeConfGroup(GrpId);
						cm_pair.erase(cm_pair.find(GrpId));
					}
					else
					{
						if (channels[ch].ch_to_talk_securely >= 0)
						{
							CHECK_RETURN SsmStopLinkFrom(ch, channels[ch].ch_to_talk_securely);
							channels[ch].ch_to_talk_securely = -1;
						}
						CHECK_RETURN SsmExitConfGroup(ch, FALSE);
					}
					if (SsmCheckPlay(ch) == 0)
						CHECK_RETURN SsmStopPlay(ch);
					CHECK_RETURN SsmSetDtmfStopPlay(ch, FALSE);
					channels[ch].state_conference = CO_IDLE;
				}
				break; 
		}
	}

	return CFrameWnd::WindowProc(message, wParam, lParam);
}

// Maintain backgound sound.
void maintain(pair<int, int> x)
{
	CHECK_RETURN SsmSetPlayVolume(x.second, channels[x.second].BgSoundVolume);
	// Not playing anything
	if (SsmCheckPlay(x.second) > 0)
	{
		int i = SsmCheckPlay(x.second);
		// Let it play backgroud sound.
		if (channels[x.second].BgSoundEnabled == true)
		{
			CHECK_RETURN SsmPlayFile(x.second, "wav\\bg.wav", -1, 0, -1);
			channels[x.second].IsPlayingBgSound = true;
		}
	}
	// Playing
	else
	{
		// Playing background sound, but not allowed, so let us stop it.
		if(channels[x.second].IsPlayingBgSound && channels[x.second].BgSoundEnabled == false)
		{
			CHECK_RETURN SsmStopPlay(x.second);
		}
	}
}

void MainFrame::OnTimer(UINT nIDEvent)
{
	if (nIDEvent == 0)
	{
		for_each(cm_pair.begin(), cm_pair.end(), maintain);
	}
}

⌨️ 快捷键说明

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