bool DtmfSession::OnMessageReceive(mrcp_channel_t* pMrcpChannel, mrcp_message_t* pMrcpMessage) { if(!UmcSession::OnMessageReceive(pMrcpChannel,pMrcpMessage)) return false; const DtmfScenario* pScenario = GetScenario(); RecogChannel* pRecogChannel = (RecogChannel*) mrcp_application_channel_object_get(pMrcpChannel); if(pMrcpMessage->start_line.message_type == MRCP_MESSAGE_TYPE_RESPONSE) { if(pMrcpMessage->start_line.method_id == RECOGNIZER_RECOGNIZE) { /* received the response to RECOGNIZE request */ if(pMrcpMessage->start_line.request_state == MRCP_REQUEST_STATE_INPROGRESS) { /* start to stream the DTMFs to recognize */ if(pRecogChannel && pRecogChannel->m_pDtmfGenerator) { const char* digits = pScenario->GetDigits(); if(digits) { mpf_dtmf_generator_enqueue(pRecogChannel->m_pDtmfGenerator,digits); pRecogChannel->m_Streaming = true; } } } else { /* received unexpected response, terminate the session */ Terminate(); } } else { /* received unexpected response */ } } else if(pMrcpMessage->start_line.message_type == MRCP_MESSAGE_TYPE_EVENT) { if(pMrcpMessage->start_line.method_id == RECOGNIZER_RECOGNITION_COMPLETE) { ParseNLSMLResult(pMrcpMessage); if(pRecogChannel) { pRecogChannel->m_Streaming = false; } Terminate(); } else if(pMrcpMessage->start_line.method_id == RECOGNIZER_START_OF_INPUT) { /* received start-of-input, do whatever you need here */ } } return true; }
bool RecogSession::OnMessageReceive(mrcp_channel_t* pMrcpChannel, mrcp_message_t* pMrcpMessage) { if(!UmcSession::OnMessageReceive(pMrcpChannel,pMrcpMessage)) return false; RecogChannel* pRecogChannel = (RecogChannel*) mrcp_application_channel_object_get(pMrcpChannel); if(pMrcpMessage->start_line.message_type == MRCP_MESSAGE_TYPE_RESPONSE) { /* received MRCP response */ if(pMrcpMessage->start_line.method_id == RECOGNIZER_DEFINE_GRAMMAR) { /* received the response to DEFINE-GRAMMAR request */ if(pMrcpMessage->start_line.request_state == MRCP_REQUEST_STATE_COMPLETE) { OnDefineGrammar(pMrcpChannel); } else { /* received unexpected response, terminate the session */ Terminate(); } } else if(pMrcpMessage->start_line.method_id == RECOGNIZER_RECOGNIZE) { /* received the response to RECOGNIZE request */ if(pMrcpMessage->start_line.request_state == MRCP_REQUEST_STATE_INPROGRESS) { RecogChannel* pRecogChannel = (RecogChannel*) mrcp_application_channel_object_get(pMrcpChannel); if(pRecogChannel) pRecogChannel->m_pRecogRequest = GetMrcpMessage(); /* start to stream the speech to recognize */ if(pRecogChannel) pRecogChannel->m_Streaming = true; } else { /* received unexpected response, terminate the session */ Terminate(); } } else { /* received unexpected response */ } } else if(pMrcpMessage->start_line.message_type == MRCP_MESSAGE_TYPE_EVENT) { if(pMrcpMessage->start_line.method_id == RECOGNIZER_RECOGNITION_COMPLETE) { ParseNLSMLResult(pMrcpMessage); if(pRecogChannel) pRecogChannel->m_Streaming = false; RecogChannel* pRecogChannel = (RecogChannel*) mrcp_application_channel_object_get(pMrcpChannel); if(pRecogChannel) pRecogChannel->m_pRecogRequest = NULL; Terminate(); } else if(pMrcpMessage->start_line.method_id == RECOGNIZER_START_OF_INPUT) { /* received start-of-input, do whatever you need here */ } } return true; }