forked from kuzsen/chat-software
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathchatlist.cpp
More file actions
152 lines (132 loc) · 4.11 KB
/
Copy pathchatlist.cpp
File metadata and controls
152 lines (132 loc) · 4.11 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
#include "chatlist.h"
ChatInfo::ChatInfo()
{
online_user = new list<User>; // 初始化链表
group_info = new list<Group>;
//往group_info链表中添加群信息
mydatabase = new ChatDataBase; // 创建一个数据库对象
mydatabase->my_database_connect("chatgroup"); // 连接上chatgroup群聊数据库
string group_name[MAXNUM];
int group_num = mydatabase->my_database_get_group_name(group_name);// 获取上一步连接上的chatgroup数据库中的群聊的个数group_num和每个群聊的名字数组group_name
for (int i = 0; i < group_num; i++)//将chatgroup数据库中所有群聊信息插入到群信息链表中
{
Group g; //创建一个群聊对象
g.name = group_name[i];
g.l = new list<GroupUser>; //保存群中所有用户————————链表形式
group_info->push_back(g);
string member; //保存群里所有用户
mydatabase->my_database_get_group_member(group_name[i], member); // group_name[i]某一群聊名字,将该群聊中的群成员放到字符串member中
if (member.size() == 0) //string member = 小明|小李|小张
{
continue;
}
int start = 0, end = 0;
GroupUser u; // 群成员类创建一个群成员对象(只有一个name)
while (1)
{
end = member.find('|', start);
if (-1 == end)
{
break;
}
u.name = member.substr(start, end - start);
g.l->push_back(u);// 将截取到的某一群聊成员插入到群聊成员链表中
start = end + 1;
u.name.clear();
}
u.name = member.substr(start, member.size() - start);//将member中最后一个群聊成员“小张”也插入到链表中
g.l->push_back(u);
}
/*for (list<Group>::iterator it = group_info->begin(); it != group_info->end(); it++)
{
cout << "群名字 " << it->name << endl;
for (list<GroupUser>::iterator i = it->l->begin(); i != it->l->end(); i++)
{
cout << i->name << endl;
}
}*/
mydatabase->my_database_disconnect(); // 使用完当前数据库后断开连接,方便下一次连接
cout << "初始化链表成功" << endl;
}
bool ChatInfo::info_group_exist(string group_name)
{
for (list<Group>::iterator it = group_info->begin(); it != group_info->end(); it++)
{
if (it->name == group_name)
{
return true;
}
}
return false;
}
// 判断用户是否已经在该群聊里
bool ChatInfo::info_user_in_group(string group_name, string user_name)
{
for (list<Group>::iterator it = group_info->begin(); it != group_info->end(); it++)
{
if (it->name == group_name) // 找到该群聊
{
// 遍历该群聊的群成员链表,与该用户姓名一一比对
for (list<GroupUser>::iterator i = it->l->begin(); i != it->l->end(); i++)
{
if (i->name == user_name)
{
return true;
}
}
}
}
return false;
}
// 将用户string2加入到该群聊节点的群成员链表中
void ChatInfo::info_group_add_user(string group_name, string user_name)
{
for (list<Group>::iterator it = group_info->begin(); it != group_info->end(); it++)
{
if (it->name == group_name)
{
GroupUser u; // 新建一个群成员节点
u.name = user_name;
it->l->push_back(u);
}
}
}
struct bufferevent* ChatInfo::info_get_friend_bev(string name)
{
for (list<User>::iterator it = online_user->begin(); it != online_user->end(); it++)
{
if (it->name == name)
{
return it->bev;
}
}
return NULL;
}
// 获取群聊group的群成员,返回给string1
string ChatInfo::info_get_group_member(string group)
{
string member;
for (list<Group>::iterator it = group_info->begin(); it != group_info->end(); it++)
{
if (group == it->name)
{
for (list<GroupUser>::iterator i = it->l->begin(); i != it->l->end(); i++)
{
member += i->name;
member += "|";
}
}
}
return member;
}
// 将新建群聊(群名为string1,群成员为string2)加入到群信息链表中
void ChatInfo::info_add_new_group(string group_name, string user_name)
{
Group g; // 群聊类节点
g.name = group_name;
g.l = new list<GroupUser>; // 群成员链表
group_info->push_back(g); // 将该新建群聊节点加入群信息链表中
GroupUser u;
u.name = user_name;
g.l->push_back(u); // 将群主加到群成员链表中
}