Сервер не ждет подключения от клиента(С++/IXWebsocket)
#include <ixwebsocket/IXWebSocketServer.h>
#include <ixwebsocket/IXNetSystem.h>
#include <ixwebsocket/IXWebSocket.h>
#include <iostream>
#include <string>
using namespace std;
string GetToken() {
ix::WebSocketServer GetTokenServer(9001);
GetTokenServer.setOnConnectionCallback([](std::weak_ptr<ix::WebSocket> wsWeak,
std::shared_ptr<ix::ConnectionState> state)
{
std::cout << "Client here..." << std::endl;
});
GetTokenServer.start();
return "";
}
int main() {
ix::initNetSystem();
string token = GetToken();
}
Как зделать так чтоб сервер ждал пока подключиться кліент, а не завершал прогогрмау сразу?
Ответы (1 шт):
Автор решения: Swift - Friday Pie
→ Ссылка
Сервер GetTokenServer "умрет" на выходе из функции GetToken(), т.к. это локальная переменная. Логичнее создавать сервер на боле высоком уровне и работать с ним.
Нужно получить сокет и поставить обработчик сообщений для того как определить когда же у нас завершилось подключение, а далее по вкусу. У них вроде есть полный рабочий пример, ws.cpp
#include <ixwebsocket/IXWebSocketServer.h>
#include <ixwebsocket/IXNetSystem.h>
#include <ixwebsocket/IXWebSocket.h>
#include <iostream>
#include <memory>
#include <atomic>
std::atomic<bool> doExit = false;
void startTokenServer(ix::WebSocketServer& srv )
{
srv.setOnConnectionCallback([&](std::weak_ptr<ix::WebSocket> wsWeak,
std::shared_ptr<ix::ConnectionState> state)
{
std::cout << "Client here..." << state->remoteIP << std::endl;
auto ws = wsWeak.lock();
if (ws) {
ws->setOnMessageCallback(
[&](const ix::WebSocketMessagePtr msg)
{
if (msg->type == ix::WebSocketMessageType::Open)
{
std::cout << "New connection" << std::endl;
// установить состояние
doExit = true;
};
});
}
});
srv.start();
}
int main() {
ix::initNetSystem();
ix::WebSocketServer GetTokenServer(9001);
startTokenServer(srv);
// цикл ожидания
while(!doExit) {
}
std::cin.get(); // подождем ввода пользователя?
server.stop(); // Stop the server
}