Linux实现远程通信——创建群聊(服务端)

创建群聊

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

if(cmd == "create_group"){
       server_create_group(bev,val);       //执行创建群聊对应的函数
}

 在创建群聊的回调函数server_create_group中首先需要连接chatgroup数据库,来判断群是否已经创建过。这里我们通过my_database_group_exist函数来进行判断。创建群聊只有两种情况:1、群聊已经存在。2、群聊不存在,则创建。
 首先是第一种情况,如果群聊已经存在,就告诉客户端该群存在即可。my_database_group_exist的实现如下:主要通过show tables like xx来判断chatgroup库中是否有群的信息

char sql[128] = {0};
sprintf(sql,"show tables like '%s';",group_name.c_str());       //查看数据库中是否有group_name的信息
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);                           

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

{"cmd":"create_group_reply","result":"group_exist"}

 然后是第二种情况,如果群聊不存在,那么就创建群聊。这里我们用my_database_add_new_group函数实现MYSQL群聊创建,然后创建群聊后,创建者的信息中应该添加该群,所以此时需要转换到user数据库用my_database_user_add_group实现。
my_database_add_new_group主要实现如下:创建了群表,包含群主以及群成员的信息,然后将登录者的用户信息插入到群表中去

char sql[128] = {0};
sprintf(sql,"create table %s (owner varchar(16),member varchar(4096)) character set utf8;"
                ,group_name.c_str());         //创建对应的群信息,表的名字前面不需要引号
if(mysql_query(mysql,sql) != 0){
        cout << "mysql_query error" << endl;
}
memset(sql,0,sizeof(sql));                                      //清空sql信息,为下面sql输入群主作准备
sprintf(sql,"insert into %s values ('%s','%s');",group_name.c_str(),owner.c_str(),owner.c_str());     //创建对应的群主和成员
if(mysql_query(mysql,sql) != 0){
        cout << "mysql_query error" << endl;
}

my_database_user_add_group主要实现如下:通过获取user库中用户原有的群信息,在其后面添加创建的群信息即可

char sql[1024] = {0};
sprintf(sql,"select chatgroup from %s;",user_name.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);                           //获取chatgroup是否存在
string group_list;
if(row[0] == NULL){                                             //原来没有群
        group_list += group_name;                               //添加群
}else{
        group_list += row[0];                                   //在原有群的基础上添加新群
        group_list += '|';
        group_list += group_name;
}
memset(sql,0,sizeof(sql));                                      //清空sql信息,为下面sql更新群聊作准备
sprintf(sql,"update %s set chatgroup = '%s'",user_name.c_str(),group_list.c_str());     //更新群聊
if(mysql_query(mysql,sql) != 0){
        cout << "mysql_query error" << endl;
}

服务端返回客户端的无格式Json数据如下:

{"cmd":"create_group_reply","result":"success"}

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值