[问题] Map<int,set> 使用疑问

楼主: smartjay (高毛毛)   2018-03-31 11:32:16
开发平台(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>无效加入其成员
上来询问版友谢谢
作者: steve1012 (steve)   2018-03-31 11:42:00
m_NumOfClient好像一直都是0?写个unit test 吧 可以避掉很多这种bug
作者: djshen (djshen)   2018-03-31 12:46:00
跟新房间有关的code就那几行而已 自己试着debug一下吧
楼主: smartjay (高毛毛)   2018-03-31 18:12:00
谢谢提醒,已经debug

Links booklink

Contact Us: admin [ a t ] ucptt.com