Я пытаюсь реализовать клиент Websocket с использованием Cpprest SDK (Касабланка). Я успешно установил соединение через Web Socket и могу отправлять / получать сообщения. Ответ получен как экземпляр websocket_incoming_message, у которого есть метод extract_string (), определение которого
_ASYNCRTIMP pplx::task<std::string> web::websockets::client::websocket_incoming_message::extract_string ( ) const
Следовательно, он возвращает константную строку.
Я пытаюсь назначить это строка в переменную локальной строки функции, чтобы я мог вернуть ее вызывающему методу. Тем не менее, я получаю следующую ошибку,
error: passing ‘const string {aka const std::basic_string<char>}’ as ‘this’ argument of ‘std::basic_string<_CharT, _Traits, _Alloc>& std::basic_string<_CharT, _Traits, _Alloc>::operator=(const std::basic_string<_CharT, _Traits, _Alloc>&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]’ discards qualifiers [-fpermissive]
Ниже мой блок кода,
std::string WebSocketUtility::send_command(const char* command){
websocket_outgoing_message o_msg;
std::string ws_response;
o_msg.set_utf8_message(command);
client->send(o_msg).then([](){
log("Message Sent!!!\n");
});
client->receive().then([ws_response](websocket_incoming_message i_msg){
return i_msg.extract_string();
}).then([ws_response](std::string ws_body){
ws_response = ws_body;
});
log("WS_RESPONSE:%s:\n",ws_response.c_str());
return ws_response;
}
Я попытался
1.Объявление ws_response в качестве ссылки
2. Захват ws_response в качестве ссылки в лямбде
3.Объявление ws_response как cpprest json и присвоение ответа в виде поля json (ws_response [U ("output")] = json :: value :: string (ws_body.c_str ()))
без удачи.
У меня нет большого опыта программирования на C ++ и я с этим борюсь.
Может кто-нибудь помочь мне с тем, как перехватить этот ответ вне лямбды, чтобы я мог вернуть значение вызывающему методу?
Спасибо и С уважением,
Свати Десаи