Это мой первый вопрос по stackoverflow, и я новичок в C ++. Я надеюсь, что вы все простите мое невежество в отношении, вероятно, очевидной проблемы здесь, но я в растерянности.
По сути, я просто пытаюсь перехватить события, генерируемые сервером nodejs в моем клиенте C ++. Я успешно скомпилировал свой бинарный файл (импортированные boost и socketio) и много хардчака. Я пытаюсь отправить событие через соединение через веб-сокет, но сначала мне нужно убедиться, что соединение успешно. Я в основном следовал учебному пособию по этой ссылке: https://socket.io/blog/socket-io-cpp/. Я также следил за исходным кодом, который можно найти здесь: https://github.com/socketio/socket.io-client-cpp/tree/master/examples/QT
По какой-то причине у меня возникает ошибка, когда я получаю доступ к своему указателю _io в моей связанной функции (в функции onConnected класса SocketHandler).
Я уверен, что делаю что-то глупое, но любая помощь приветствуется. Может быть, я неправильно понимаю использование функции std :: bind? Я из мира преимущественно JavaScript.
main.cpp
#include "sockethandler.h"
int main()
{
SocketHandler sh;
}
sockethandler.cpp
#include <iostream>
#include "sockethandler.h"
const char name[13] = "raspberry_pi";
SocketHandler::SocketHandler() :
_io(new client())
{
using std::placeholders::_1;
_io->set_socket_open_listener(std::bind(&SocketHandler::OnConnected,this,_1));
_io->connect("http://127.0.0.1:3000");
_io->socket()->on("bot-command", [&](sio::event& ev) {
std::cout << "GOT IT!" << "\n";
//handle login message
//post to UI thread if any UI updating.
});
}
void SocketHandler::OnConnected(std::string const& nsp)
{
std::cout << "CONNECTED" << "\n";
// I can access a private class variable such as _a as a string
// here
_io->socket()->emit("join");
}
sockethandler.h
#ifndef SOCKETHANDLER_H
#define SOCKETHANDLER_H
#include <sio_client.h>
using namespace sio;
class SocketHandler {
public:
explicit SocketHandler();
private:
void OnConnected(std::string const& nsp);
std::unique_ptr<client> _io;
};
#endif // SOCKETHANDLER_H