📄 mainframe.cpp
字号:
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 + -