用户私聊
在创建Json对象的数据后,客户端和服务端就可以依据这个类型的数据进行通信了。我们通过解析Json对象val中的cmd指令,也就是命令,来判断客户端是想要进行什么操作(用户注册?登录?聊天?),从而执行对应的函数操作。
if(cmd == "private_chat"){
server_private_chat(bev,val); //执行用户私聊对应的函数
}
既然用户可以私聊,说明双方已经是好友关系。那么用户私聊就只有两种情况:1、用户不在线。2、用户在线,则发送信息。
首先是第一种情况,要判断用户在不在线,那么直接判断在线用户链表chatlist->online_user中是否有发送的好友信息,如果没有,那么就说明好友不在线。那么服务端通过Json::Value创建Json对象,对其赋值,然后利用Json::FastWriter封装成string格式的文本信息即可实现Json数据的传输。返回的无格式Json数据如下:
{"cmd":"private_chat_reply","result":"offline"}
然后是第二种情况,如果用户在线,那么就向好友用户发送信息,服务端要做的就是把当前登录者发送的信息转发给好友用户。要转发给好友用户,就需要他的bev,这里我们通过chatlist->info_group_add_user
函数,也就是在线用户链表来获取好友的bev,函数具体实现如下:
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);
}
}
转发信息后,服务端告诉客户端私聊成功,通过Json::Value创建Json对象,对其赋值,然后利用Json::FastWriter封装成string格式的文本信息即可实现Json数据的传输。返回的无格式Json数据如下:
{"cmd":"private_chat_reply","result":"success"}
由于这里没有用到MYSQL数据库,所以就不用断开数据库连接。