У меня проблема с сервером WebSocketPP. Я хочу, чтобы он обрабатывал несколько клиентов. Вот мой OnOpen метод:C++ - несколько клиентов WebSocketPP
void Server::onOpen(
Server* srv,
WSServer* ws,
websocketpp::connection_hdl& hdl)
{
ServerPlayerTracker con;
con.con = &hdl;
con.protocolVersion = 0;
con.verified = false;
con.playerID = srv->playerCount++;
con.roomID = 0;
srv->players.push_back(con);
}
Но разъединение у меня есть проблемы. Я не могу найти, какой игрок с идентификатором отключен. Вот мой OnClose метод:
void Server::onClose(
Server* srv,
WSServer* ws,
websocketpp::connection_hdl& hdl)
{
for (int i = 0; i < srv->players.size(); i++)
{
if (srv->players[i].connected)
{
if ((*srv->players[i].con).lock() == hdl.lock())
{
printf("[!] Player disconnected with ID: %d\n",
srv->players[i].playerID);
srv->players.erase(srv->players.begin() + i);
}
}
}
}
В строке (* srv-> игроки [я] .CON) .lock() == hdl.lock() он бросает исключение, как "это было 0xFFFFFFFFFFFFFFF7. в файле 'memory' line 75. Я думаю, что это проблема с преобразованием weak_ptr в shared_ptr. Есть ли способ исправить это?
Взгляните: https://github.com/zaphoyd/websocketpp/blob/master/examples/associative_storage/associative_storage.cpp Это показывает, как вы можете хранить данные на соединение. – Paul
Также ознакомьтесь с описанием в файле con_list 'typedef std :: map> con_list;' 'con_list m_connections;' поскольку это может быть лучшая реализация для сохранения списка соединения. –
Paul
спасибо! проблема исправлена – nuclearc