Ich habe ein Problem mit WebSocketPP Server. Ich möchte, dass es mehrere Clients verwaltet. Hier ist meine OnOpen-Methode:C++ - WebSocketPP mehrere Clients
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);
}
Aber in Trennung ich habe Problem. Ich finde nicht, welcher Player mit ID nicht verbunden ist. Hier ist meine OnClose Methode: 'Das war 0xFFFFFFFFFFFFFFF7'
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);
}
}
}
}
In Zeile (* SRV> Spieler [i] .con) .lock() == hdl.lock() wirft Ausnahme wie in der Datei 'memory' Zeile 75. Ich denke, es ist ein Problem mit der Umwandlung von weak_ptr in shared_ptr. Gibt es eine Möglichkeit, das zu beheben?
Werfen Sie einen Blick auf: https://github.com/zaphoyd/websocketpp/blob/master/examples/associative_storage/associative_storage.cpp Das zeigt, wie Sie Daten pro Verbindung speichern. – Paul
Schauen Sie sich auch die dort beschriebene con_list 'typedef std :: map> con_list;' 'con_list m_connections;' an, da dies eine bessere Implementierung zum Speichern einer Liste von Verbindungen. –
Paul
danke! Problem behoben – nuclearc