C++搭建集群聊天室(十五):客户端

js[“password”] = pwd;

string request = js.dump();

g_isLoginSuccess = false;

int len = send(clientfd, request.c_str(), strlen(request.c_str()) + 1, 0);

if (len == -1)

{

cerr << “send login msg error:” << request << endl;

}

sem_wait(&rwsem); // 等待信号量,由子线程处理完登录的响应消息后,通知这里

if (g_isLoginSuccess)

{

// 进入聊天主菜单页面

isMainMenuRunning = true;

mainMenu(clientfd);

}

}

break;

case 2: // register业务

{

char name[50] = {0};

char pwd[50] = {0};

cout << “username:”;

cin.getline(name, 50);

cout << “userpassword:”;

cin.getline(pwd, 50);

json js;

js[“msgid”] = REG_TYPE;

js[“name”] = name;

js[“password”] = pwd;

string request = js.dump();

int len = send(clientfd, request.c_str(), strlen(request.c_str()) + 1, 0);

if (len == -1)

{

cerr << “send reg msg error:” << request << endl;

}

sem_wait(&rwsem); // 等待信号量,子线程处理完注册消息会通知

}

break;

case 3: // quit业务

close(clientfd);

sem_destroy(&rwsem);

exit(0);

default:

cerr << “invalid input!” << endl;

break;

}

}

return 0;

}

// 处理注册的响应逻辑

void doRegResponse(json &responsejs)

{

if (0 != responsejs[“errno”].get()) // 注册失败

{

cerr << “name is already exist, register error!” << endl;

}

else // 注册成功

{

cout << "name register success, userid is " << responsejs[“id”]

<< “, do not forget it!” << endl;

}

}

// 处理登录的响应逻辑

void doLoginResponse(json &responsejs)

{

if (0 != responsejs[“errno”].get()) // 登录失败

{

cerr << responsejs[“errmsg”] << endl;

g_isLoginSuccess = false;

}

else // 登录成功

{

// 记录当前用户的id和name

g_currentUser.setID(responsejs[“id”].get());

g_currentUser.setname(responsejs[“name”]);

// 记录当前用户的好友列表信息

if (responsejs.contains(“friends”)) //如果有,贸然解析有崩溃的风险,JSON模块可脆弱

{

// 初始化

g_currentUserFriendList.clear();

vector vec = responsejs[“friends”];

for (string &str : vec)

{

json js = json::parse(str);

User user;

user.setID(js[“id”].get());

user.setname(js[“name”]);

user.setstate(js[“state”]);

g_currentUserFriendList.push_back(user);

}

}

// 记录当前用户的群组列表信息

if (responsejs.contains(“groups”))

{

// 初始化

g_currentUserGroupList.clear();

vector vec1 = responsejs[“groups”];

for (string &groupstr : vec1)

{

json grpjs = json::parse(groupstr);

Group group;

group.setId(grpjs[“id”].get());</

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值