Linux实现远程通信——添加群聊(服务端)

添加群聊

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

if(cmd == "add_group"){
       server_add_group(bev,val);       //执行添加群聊对应的函数
}

 添加群聊总共有三种情况:1、群不存在。2、群存在且用户已经在群里。3、群存在且用户不在群里,则添加。


 首先是第一种情况,如果群不存在,就告诉客户端添加的群不存在即可。我们有两种判断群是否存在的方式,第一种:通过连接chatgroup库来搜索该群,第二种:通过群链表搜索该群。这里我们用群链表group_info来判断,因为链表是属于内存区的,而MYSQL库实际是存放在磁盘,也就是外存中,实z际调用起来开销会比链表大。具体判断由chatlist->info_group_exist实现:

for(list<Group>::iterator it=group_info->begin(); it!=group_info->end(); it++){
       if(it->name == group_name){
                return true;
        }
}
return false;                          

群不存在,服务端通过Json::Value创建Json对象,对其赋值,然后利用Json::FastWriter封装成string格式的文本信息即可实现Json数据的传输。返回的无格式Json数据如下:

{"cmd":"add_group_reply","result":"group_not_exist"}

 然后是第二种情况,如果群存在且用户已经在群里,那么就回复客户端用户已经在群里即可。这里我们用chatlist->info_user_in_group函数实现此次判断。因为群链表中,包括了群名以及群成员的信息,所以可以通过查找群链表中群成员的名字来判断当前用户是否已经在群里,其具体实现如下:

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;

群存在且用户已经在群里,服务端通过Json::Value创建Json对象,对其赋值,然后利用Json::FastWriter封装成string格式的文本信息即可实现Json数据的传输。返回的无格式Json数据如下:

{"cmd":"add_group_reply","result":"user_in_group"}

 然后是第三种情况,如果群存在且用户不在群里,那么就回复客户端添加成功,同时在用户的群信息中添加该群,以及在群信息的成员中添加该用户。通过my_database_user_add_groupmy_database_group_add_user函数实现,其中user_add_group函数是在user数据库中实现,而group_add_user函数是在chatgroup函数中实现,这两函数在之前有过介绍(group_add_user和user_add_group类似)。
 最后,服务端通过Json::Value创建Json对象,对其赋值,然后利用Json::FastWriter封装成string格式的文本信息即可实现Json数据的传输。返回的无格式Json数据如下:

{"cmd":"add_group_reply","result":"success","group":"学习"}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值