我有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