Linux实现远程通信——添加好友(服务端)

添加好友

 在创建Json对象的数据后,客户端和服务端就可以依据这个类型的数据进行通信了。我们通过解析Json对象val中的cmd指令,也就是命令,来判断客户端是想要进行什么操作(用户注册?登录?聊天?),从而执行对应的函数操作。

if(cmd == "add"){
       server_add_friend(bev,val);       //执行添加好友对应的函数
}

 在添加好友的回调函数server_add_friend中首先需要连接user数据库,来判断当前用户是否已经注册过,因为不可能添加不存在的用户。这里我们通过my_database_user_exist函数来进行判断。添加好友总共有三种情况:1、好友用户不存在。2、好友存在,但已经是好友关系。3、添加好友成功。
 首先是第一种情况,如果搜索的好友不存在,就告诉客户端该好友不存在即可。通过Json::Value创建Json对象,对其赋值,然后利用Json::FastWriter封装成string格式的文本信息即可实现Json数据的传输。返回的无格式Json数据如下:

{"cmd":"add_reply","result":"user_not_exist"}

 然后是第二种情况,如果搜索的用户存在,但已经是好友关系,那么就告诉客户端已经是好友关系。这里我们用my_database_is_friend函数进行判断,首先通过select friend from xx,从MYSQL中找出登录者的好友信息,然后对好友进行分析,如果存在,就返回true,否则返回false。my_database_is_friend详细实现代码以及服务端返回客户端的无格式Json数据如下:

char sql[128] = {0};
sprintf(sql,"select friend from %s;",name1.c_str());             //查找用户名对应的好友列表
if(mysql_query(mysql,sql) != 0){
        cout << "mysql_query error" << endl;
}
MYSQL_RES *res = mysql_store_result(mysql);                     
MYSQL_ROW row = mysql_fetch_row(res);
string friend_list;
if(row[0] == NULL){                                             //如果好友不存在                                                
        return false;
}else{
        friend_list.append(row[0]);                             //将查到的好友列表放入friend_list中
        int start = 0, end = 0;
        while(1){
                end = friend_list.find('|',start);              //查找s第一次出现位置,从start开始查找
                if(end == -1){break;}                           //当字符串找到最后时
                if(name2 == friend_list.substr(start,end - start)){
                        return true;
                }
                start = end + 1;                    //从丨后开始
        }
        if(name2 == friend_list.substr(start,friend_list.size()-start)){
                return true;
        }
}
return false;
{"cmd":"add_reply","result":"already_friend"}

 最后是第三种情况,当添加好友成功时,就需要双方互相添加为好友,这里我们通过my_database_add_new_friend函数来实现,在用户末尾添加好友名即可,具体实现如下:

char sql[1024] = {0};
sprintf(sql,"select friend from %s;",name1.c_str());            //查找用户名对应的好友列表
if(mysql_query(mysql,sql) != 0){
        cout << "mysql_query error" << endl;
}
MYSQL_RES *res = mysql_store_result(mysql);                     //获取上述命令结果到客户端
MYSQL_ROW row = mysql_fetch_row(res);
string friend_list;
if(row[0]==NULL){                                       //如果原来没有好友
        friend_list.append(name2);                      //那么添加该好友
}else{
        friend_list.append(row[0]);                     //如果有别的好友
        friend_list += '|';
        friend_list += name2;                           //那么在好友列表末尾增添 |name2
}

memset(sql,0,sizeof(sql));                              //清空sql信息,为下面sql添加好友作准备
sprintf(sql,"update %s set friend='%s';",name1.c_str(),friend_list.c_str());            //更新添加完好友的friend列表
if(mysql_query(mysql,sql) != 0){
        cout << "mysql_query error" << endl;
}

并且回复客户端的无格式Json数据如下:

{"cmd":"add_reply","result":"success","friend":"小华"}

最后,用完数据库记得用mysql_close断开数据库连接!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值