作者smartjay (高毛毛)
看板C_and_CPP
标题[问题] Map<int,set> 使用疑问
时间Sat Mar 31 11:32:16 2018
开发平台(Platform): (Ex: Win10, Linux, ...)
Win 10
编译器(Ex: GCC, clang, VC++...)+目标环境(跟开发平台不同的话需列出)
VC2017
额外使用到的函数库(Library Used): (Ex: OpenGL, ...)
Boost
问题(Question):
Map底下以Key对应的Set无法有效分割
喂入的资料(Input):
两人进Server,在同一个set 内进行foor回圈广播
预期的正确结果(Expected Output):
根据演算法,每个房间最多容纳两人,
以Map实现多房多人聊天
错误结果(Wrong Output):
房间切割不完整Map
程式码(Code):(请善用置底文网页, 记得排版,禁止使用图档)
https://pastebin.com/N6dnFC7g 完整程式码
typedef std::set<connection_hdl,std::owner_less<connection_hdl> > con_list;
typedef std::map<int , con_list> HubToCon_list; // 房号,客户列表
//
HubToCon_list m_HubTo_list ; // 建立一个多通道(房) 聊天
int m_iKey = 0; //第0号房开始
int m_NumOfClient = 0; //房间人数
//
//当有人连进进入 server
if (a.type == SUBSCRIBE) {
lock_guard<mutex> guard(m_connection_lock);
//m_connections.insert(a.hdl);//原来范例使用set 更改为以下方式
if (m_NumOfClient > 2) { // 若房间大於2人
m_iKey = m_iKey + 1; // 开新房
m_NumOfClient = 0; // clean
}
m_HubTo_list[m_iKey].insert(a.hdl); //在Map<m_iKey,Set> 加入使用者
补充说明(Supplement):
参照Websocket开源
https://pastebin.com/y1ir8WbM
想做一个多人聊天室
卡在Map<int,set>无效加入其成员
上来询问版友谢谢
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 60.248.167.253
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1522467140.A.E58.html
1F:推 steve1012: m_NumOfClient好像一直都是0? 03/31 11:42
2F:→ steve1012: 写个unit test 吧 可以避掉很多这种bug 03/31 11:43
3F:→ djshen: 跟新房间有关的code就那几行而已 自己试着debug一下吧 03/31 12:46
4F:→ smartjay: 谢谢提醒,已经debug 03/31 18:12