nlsCppSdk/framework/feature/da/dialogAssistantRequest.cpp (283 lines of code) (raw):
/*
* Copyright 2021 Alibaba Group Holding Limited
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#include "dialogAssistantRequest.h"
#include "connectNode.h"
#include "dialogAssistantListener.h"
#include "dialogAssistantParam.h"
#include "iNlsRequestListener.h"
#include "nlog.h"
#include "utility.h"
namespace AlibabaNls {
DialogAssistantCallback::DialogAssistantCallback() {
this->_onTaskFailed = NULL;
this->_onRecognitionStarted = NULL;
this->_onRecognitionCompleted = NULL;
this->_onDialogResultGenerated = NULL;
this->_onRecognitionResultChanged = NULL;
this->_onChannelClosed = NULL;
}
DialogAssistantCallback::~DialogAssistantCallback() {
this->_onTaskFailed = NULL;
this->_onRecognitionStarted = NULL;
this->_onRecognitionCompleted = NULL;
this->_onDialogResultGenerated = NULL;
this->_onRecognitionResultChanged = NULL;
this->_onChannelClosed = NULL;
std::map<NlsEvent::EventType, void*>::iterator iter;
for (iter = _paramap.begin(); iter != _paramap.end();) {
_paramap.erase(iter++);
}
_paramap.clear();
}
void DialogAssistantCallback::setOnTaskFailed(NlsCallbackMethod _event,
void* para) {
// LOG_DEBUG("setOnTaskFailed callback");
this->_onTaskFailed = _event;
if (this->_paramap.find(NlsEvent::TaskFailed) != _paramap.end()) {
_paramap[NlsEvent::TaskFailed] = para;
} else {
_paramap.insert(std::make_pair(NlsEvent::TaskFailed, para));
}
}
void DialogAssistantCallback::setOnRecognitionStarted(NlsCallbackMethod _event,
void* para) {
LOG_DEBUG("setOnRecognitionStarted callback");
this->_onRecognitionStarted = _event;
if (this->_paramap.find(NlsEvent::RecognitionStarted) != _paramap.end()) {
_paramap[NlsEvent::RecognitionStarted] = para;
} else {
_paramap.insert(std::make_pair(NlsEvent::RecognitionStarted, para));
}
}
void DialogAssistantCallback::setOnRecognitionCompleted(
NlsCallbackMethod _event, void* para) {
LOG_DEBUG("setOnRecognitionCompleted callback");
this->_onRecognitionCompleted = _event;
if (this->_paramap.find(NlsEvent::RecognitionCompleted) != _paramap.end()) {
_paramap[NlsEvent::RecognitionCompleted] = para;
} else {
_paramap.insert(std::make_pair(NlsEvent::RecognitionCompleted, para));
}
}
void DialogAssistantCallback::setOnDialogResultGenerated(
NlsCallbackMethod _event, void* para) {
LOG_DEBUG("setOnDialogResultGenerated callback");
this->_onDialogResultGenerated = _event;
if (this->_paramap.find(NlsEvent::DialogResultGenerated) != _paramap.end()) {
_paramap[NlsEvent::DialogResultGenerated] = para;
} else {
_paramap.insert(std::make_pair(NlsEvent::DialogResultGenerated, para));
}
}
void DialogAssistantCallback::setOnWakeWordVerificationCompleted(
NlsCallbackMethod _event, void* para) {
LOG_DEBUG("setOnWakeWordVerificationCompleted callback");
this->_onWakeWordVerificationCompleted = _event;
if (this->_paramap.find(NlsEvent::WakeWordVerificationCompleted) !=
_paramap.end()) {
_paramap[NlsEvent::WakeWordVerificationCompleted] = para;
} else {
_paramap.insert(
std::make_pair(NlsEvent::WakeWordVerificationCompleted, para));
}
}
void DialogAssistantCallback::setOnRecognitionResultChanged(
NlsCallbackMethod _event, void* para) {
LOG_DEBUG("setOnRecognitionResultChanged callback");
this->_onRecognitionResultChanged = _event;
if (this->_paramap.find(NlsEvent::RecognitionResultChanged) !=
_paramap.end()) {
_paramap[NlsEvent::RecognitionResultChanged] = para;
} else {
_paramap.insert(std::make_pair(NlsEvent::RecognitionResultChanged, para));
}
}
void DialogAssistantCallback::setOnChannelClosed(NlsCallbackMethod _event,
void* para) {
LOG_DEBUG("setOnChannelClosed callback");
this->_onChannelClosed = _event;
if (this->_paramap.find(NlsEvent::Close) != _paramap.end()) {
_paramap[NlsEvent::Close] = para;
} else {
_paramap.insert(std::make_pair(NlsEvent::Close, para));
}
}
DialogAssistantRequest::DialogAssistantRequest(int version, const char* sdkName,
bool isLongConnection) {
_callback = new DialogAssistantCallback();
// init request param
_dialogAssistantParam = new DialogAssistantParam(version, sdkName);
_requestParam = _dialogAssistantParam;
// init listener
_listener = new DialogAssistantListener(_callback);
// init connect node
_node = new ConnectNode(this, _listener, isLongConnection);
LOG_INFO("Request(%p) Node(%p) create DialogAssistantRequest Done.", this,
_node);
}
DialogAssistantRequest::~DialogAssistantRequest() {
// delete _dialogAssistantParam;
// _dialogAssistantParam = NULL;
delete _listener;
_listener = NULL;
delete _callback;
_callback = NULL;
delete _node;
_node = NULL;
delete _dialogAssistantParam;
_dialogAssistantParam = NULL;
_requestParam = NULL;
LOG_INFO("Request(%p) Destroy DialogAssistantRequest.", this);
}
int DialogAssistantRequest::start() {
INPUT_REQUEST_PARAM_CHECK(_dialogAssistantParam);
if (_dialogAssistantParam->_enableWakeWord) {
_dialogAssistantParam->setNlsRequestType(SpeechWakeWordDialog);
} else {
_dialogAssistantParam->setNlsRequestType(SpeechExecuteDialog);
}
return INlsRequest::start(this);
}
int DialogAssistantRequest::stop() { return INlsRequest::stop(this); }
int DialogAssistantRequest::cancel() { return INlsRequest::cancel(this); }
int DialogAssistantRequest::StopWakeWordVerification() {
// return INlsRequest::stop(this, 2);
return Success;
}
int DialogAssistantRequest::queryText() {
INPUT_REQUEST_PARAM_CHECK(_dialogAssistantParam);
_dialogAssistantParam->setNlsRequestType(SpeechTextDialog);
return INlsRequest::start(this);
}
int DialogAssistantRequest::sendAudio(const uint8_t* data, size_t dataSize,
ENCODER_TYPE type) {
return INlsRequest::sendAudio(this, data, dataSize, type);
}
const char* DialogAssistantRequest::dumpAllInfo() {
return INlsRequest::dumpAllInfo(this);
}
int DialogAssistantRequest::setPayloadParam(const char* value) {
INPUT_PARAM_STRING_CHECK(value);
INPUT_REQUEST_PARAM_CHECK(_dialogAssistantParam);
return _dialogAssistantParam->setPayloadParam(value);
}
int DialogAssistantRequest::setContextParam(const char* value) {
INPUT_PARAM_STRING_CHECK(value);
INPUT_REQUEST_PARAM_CHECK(_dialogAssistantParam);
return _dialogAssistantParam->setContextParam(value);
}
int DialogAssistantRequest::setToken(const char* value) {
INPUT_PARAM_STRING_CHECK(value);
INPUT_REQUEST_PARAM_CHECK(_dialogAssistantParam);
_dialogAssistantParam->setToken(value);
return 0;
}
int DialogAssistantRequest::setTokenExpirationTime(uint64_t value) {
INPUT_REQUEST_PARAM_CHECK(_dialogAssistantParam);
_dialogAssistantParam->setTokenExpirationTime(value);
return 0;
}
int DialogAssistantRequest::setUrl(const char* value) {
INPUT_PARAM_STRING_CHECK(value);
INPUT_REQUEST_PARAM_CHECK(_dialogAssistantParam);
_dialogAssistantParam->setUrl(value);
return 0;
}
int DialogAssistantRequest::setAppKey(const char* value) {
INPUT_PARAM_STRING_CHECK(value);
INPUT_REQUEST_PARAM_CHECK(_dialogAssistantParam);
_dialogAssistantParam->setAppKey(value);
return 0;
}
int DialogAssistantRequest::setFormat(const char* value) {
INPUT_PARAM_STRING_CHECK(value);
INPUT_REQUEST_PARAM_CHECK(_dialogAssistantParam);
_dialogAssistantParam->setFormat(value);
return 0;
}
int DialogAssistantRequest::setSampleRate(int value) {
INPUT_REQUEST_PARAM_CHECK(_dialogAssistantParam);
_dialogAssistantParam->setSampleRate(value);
return 0;
}
int DialogAssistantRequest::setTimeout(int value) {
INPUT_REQUEST_PARAM_CHECK(_dialogAssistantParam);
_dialogAssistantParam->setTimeout(value);
return 0;
}
int DialogAssistantRequest::setRecvTimeout(int value) {
INPUT_REQUEST_PARAM_CHECK(_dialogAssistantParam);
_dialogAssistantParam->setRecvTimeout(value);
return 0;
}
int DialogAssistantRequest::setSendTimeout(int value) {
INPUT_REQUEST_PARAM_CHECK(_dialogAssistantParam);
_dialogAssistantParam->setSendTimeout(value);
return 0;
}
int DialogAssistantRequest::setOutputFormat(const char* value) {
INPUT_PARAM_STRING_CHECK(value);
INPUT_REQUEST_PARAM_CHECK(_dialogAssistantParam);
_dialogAssistantParam->setOutputFormat(value);
return 0;
}
int DialogAssistantRequest::setSessionId(const char* sessionId) {
INPUT_REQUEST_PARAM_CHECK(_dialogAssistantParam);
return _dialogAssistantParam->setSessionId(sessionId);
}
int DialogAssistantRequest::setQueryContext(const char* value) {
INPUT_REQUEST_PARAM_CHECK(_dialogAssistantParam);
return _dialogAssistantParam->setQueryContext(value);
}
int DialogAssistantRequest::setQuery(const char* value) {
INPUT_REQUEST_PARAM_CHECK(_dialogAssistantParam);
return _dialogAssistantParam->setQuery(value);
}
int DialogAssistantRequest::setQueryParams(const char* value) {
INPUT_REQUEST_PARAM_CHECK(_dialogAssistantParam);
return _dialogAssistantParam->setQueryParams(value);
}
int DialogAssistantRequest::AppendHttpHeaderParam(const char* key,
const char* value) {
INPUT_REQUEST_PARAM_CHECK(_dialogAssistantParam);
return _dialogAssistantParam->AppendHttpHeader(key, value);
}
int DialogAssistantRequest::setWakeWordModel(const char* value) {
INPUT_REQUEST_PARAM_CHECK(_dialogAssistantParam);
return _dialogAssistantParam->setWakeWordModel(value);
}
int DialogAssistantRequest::setWakeWord(const char* value) {
INPUT_REQUEST_PARAM_CHECK(_dialogAssistantParam);
return _dialogAssistantParam->setWakeWord(value);
}
int DialogAssistantRequest::setEnableWakeWordVerification(bool value) {
INPUT_REQUEST_PARAM_CHECK(_dialogAssistantParam);
return _dialogAssistantParam->setEnableWakeWordVerification(value);
}
void DialogAssistantRequest::setOnTaskFailed(NlsCallbackMethod _event,
void* para) {
_callback->setOnTaskFailed(_event, para);
}
void DialogAssistantRequest::setOnRecognitionStarted(NlsCallbackMethod _event,
void* para) {
_callback->setOnRecognitionStarted(_event, para);
}
void DialogAssistantRequest::setOnRecognitionCompleted(NlsCallbackMethod _event,
void* para) {
_callback->setOnRecognitionCompleted(_event, para);
}
void DialogAssistantRequest::setOnDialogResultGenerated(
NlsCallbackMethod _event, void* para) {
_callback->setOnDialogResultGenerated(_event, para);
}
void DialogAssistantRequest::setOnWakeWordVerificationCompleted(
NlsCallbackMethod _event, void* para) {
_callback->setOnWakeWordVerificationCompleted(_event, para);
}
void DialogAssistantRequest::setOnRecognitionResultChanged(
NlsCallbackMethod _event, void* para) {
_callback->setOnRecognitionResultChanged(_event, para);
}
void DialogAssistantRequest::setOnChannelClosed(NlsCallbackMethod _event,
void* para) {
_callback->setOnChannelClosed(_event, para);
}
void DialogAssistantRequest::setEnableMultiGroup(bool value) {
if (_dialogAssistantParam == NULL) {
LOG_ERROR("Input request param is empty.");
return;
}
_dialogAssistantParam->setEnableMultiGroup(value);
}
} // namespace AlibabaNls