我有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);
}
但在斷開我有問題。我無法找到什麼與ID斷開連接的球員。這裏是我的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->玩家[I] .CON).lock()== hdl.lock()就拋出異常像 '這是0xFFFFFFFFFFFFFFF7。'在文件'內存'行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