当前位置: 首页 > news >正文

做网站有什么软件石家庄关键词优化平台

做网站有什么软件,石家庄关键词优化平台,怎样做汽车之家视频网站,校园网站建设的优点接着[集群聊天服务器]----(六)业务模块之用户注册、登录、退出以及客户端异常退出函数中对于业务模块的用户注册、登录、退出以及客户端异常退出函数的剖析,现在我们对点对点聊天以及添加好友的实现进行剖析。 点对点聊天 当客户端输入msgidONE_CHAT_MSG时&#x…

接着[集群聊天服务器]----(六)业务模块之用户注册、登录、退出以及客户端异常退出函数中对于业务模块的用户注册、登录、退出以及客户端异常退出函数的剖析,现在我们对点对点聊天以及添加好友的实现进行剖析。

点对点聊天

当客户端输入msgid=ONE_CHAT_MSG时,ChatService::ChatService()中会回调ChatService::oneChat()函数进行处理

void ChatService::oneChat(const TcpConnectionPtr &conn, json &js, Timestamp time)
{int toid = js["toid"].get<int>(); // 对方的id{//在一台主机上lock_guard<mutex> lock(_connMutex); // 线程安全auto it = _userConnMap.find(toid);if (it != _userConnMap.end()){// toid 在线 转发消息 服务器主动推送消息给toid用户it->second->send(js.dump());return;}}// 查询toid是否在线User user = _userModel.query(toid);//在另一台电脑上if (user.getState() == "online"){_redis.publish(toid, js.dump());return;}// toid 不在线 存储离线消息_offlineMsgModel.insert(toid, js.dump());
}
  • 通过 JSON 对象反序列结果,寻找toid对应的值,找到用户想要对话的用户,并在_userConnMap中进行查找是否有此对象;
  • 如果用户在一台主机并且处于在线状态,就发送想要发送的消息;
  • 如果不在同一台主机,根据toid调用_userModel在user表中进行查看对方是否在线,如果在线就通过redis发布消息
  • 不在线就存储其离线消息

添加好友

当客户端输入msgid=ADD_FRIEND_MSG时,ChatService::ChatService()中会回调ChatService::addFriend()函数进行处理

void ChatService::addFriend(const TcpConnectionPtr &conn, json &js, Timestamp time)
{int userid = js["id"].get<int>();int friendid = js["friendid"].get<int>();// 存储好友信息_friendModel.insert(userid, friendid);
}
  • 根据客户端获取的用户id以及想要添加的好友id,在好友表中进行存储;

好友消息FriendModel

//添加好友关系
void insert(int userid, int friendid);//返回用户好友列表 friendid=>friendname id
vector<User> query(int userid);

添加好友关系

void FriendModel::insert(int userid, int friendid)
{char sql[1024] = {0};sprintf(sql, "insert into friend values(%d,%d)", userid, friendid);MySQL mysql;// 连接数据库if (mysql.connect()){// 更新数据库语句mysql.update(sql);}
}
  • 组装sql语句,根据用户id以及好友id( userid, friendid),在friend表中进行更改

返回用户好友列表

vector<User> FriendModel::query(int userid)
{char sql[1024] = {0};sprintf(sql, "select a.id,a.name,a.state from user a inner join friend b on b.friendid = a.id where b.userid=%d", userid);vector<User> vec;MySQL mysql;// 连接数据库if (mysql.connect()){MYSQL_RES *res = mysql.query(sql); if (res != nullptr){MYSQL_ROW row ;while((row = mysql_fetch_row(res)) != nullptr) {User user;user.setId(atoi(row[0]));user.setName(row[1]);user.setState(row[2]);vec.push_back(user);}mysql_free_result(res);return vec;}}return vec;}
  • 组装sql语句,根据userid在user 和 friend表进行联合查询好友的id name state
  • 根据sql语句,调用MySQL::query()语句进行查找好友,然后调用mysql_fetch_row()函数,查找对应的行,rowMYSQL_ROW类型,可以根据下标找到对应的值,并把id name state放入vec中返回
  • 注意释放资源

离线消息类OfflineMsgModel

//存储用户的离线消息
void insert(int userid, string msg);//删除用户的离线消息
void remove(int userid);//查询用户的离线消息
vector<string> query(int userid);

存储用户的离线消息

void OfflineMsgModel::insert(int userid, string msg)
{char sql[1024] = {0};sprintf(sql, "insert into offlinemessage values(%d,'%s')", userid, msg.c_str());MySQL mysql;// 连接数据库if (mysql.connect()){// 更新数据库语句mysql.update(sql);}
}
  • 组装sql语句,根据userid像offlinemessage表中添加离线消息msg
  • 连接数据库,并进行更新

删除用户的离线消息

在用户登录以后,需要显示离线消息,并删除用户的离线消息表

void OfflineMsgModel::remove(int userid)
{char sql[1024] = {0};sprintf(sql, "delete from offlinemessage where userid=%d", userid);MySQL mysql;// 连接数据库if (mysql.connect()){// 更新数据库语句mysql.update(sql);}
}
  • 组装sql语句,根据userid在offlinemessage表中删除相关消息
  • 连接数据库,并进行更新

查询用户的离线消息

vector<string> OfflineMsgModel::query(int userid)
{char sql[1024] = {0};sprintf(sql, "select message from offlinemessage where userid = %d", userid);vector<string> vec;MySQL mysql;// 连接数据库if (mysql.connect()){// 更新数据库语句MYSQL_RES *res = mysql.query(sql); // 指针 内部动态内存开辟 需要释放资源if (res != nullptr){// 获取行 根据主键查//把userid用户的所有离线消息放入vec中返回MYSQL_ROW row ;while((row = mysql_fetch_row(res)) != nullptr) {vec.push_back(row[0]);}mysql_free_result(res);return vec;}}return vec;
}
  • 组装sql语句,根据userid在offlinemessage表查找离线消息;
  • 根据sql语句,调用MySQL::query()语句进行查找好友,然后调用mysql_fetch_row()函数,查找对应的行,rowMYSQL_ROW类型,可以根据下标找到对应的值,并把离线消息放入vec中返回
  • 注意释放资源

好了~ 关于业务模块的一对一聊天、添加好友函数、好友类以及离线消息类的剖析就到此结束了,下一节我们将对群组进行剖析,下一节见~~


文章转载自:
http://jetabout.pqbz.cn
http://resonate.pqbz.cn
http://resolution.pqbz.cn
http://underbidden.pqbz.cn
http://fillipeen.pqbz.cn
http://dephlegmate.pqbz.cn
http://britches.pqbz.cn
http://lavishness.pqbz.cn
http://pungi.pqbz.cn
http://chablis.pqbz.cn
http://candlepin.pqbz.cn
http://bambara.pqbz.cn
http://decay.pqbz.cn
http://anima.pqbz.cn
http://pulsion.pqbz.cn
http://hcl.pqbz.cn
http://throughflow.pqbz.cn
http://marsupialise.pqbz.cn
http://teleological.pqbz.cn
http://praenomen.pqbz.cn
http://redd.pqbz.cn
http://whop.pqbz.cn
http://mesothelioma.pqbz.cn
http://manifesto.pqbz.cn
http://damnum.pqbz.cn
http://eelspear.pqbz.cn
http://sissified.pqbz.cn
http://codpiece.pqbz.cn
http://kusso.pqbz.cn
http://fumade.pqbz.cn
http://peddler.pqbz.cn
http://crotchetiness.pqbz.cn
http://vilify.pqbz.cn
http://disaster.pqbz.cn
http://touriste.pqbz.cn
http://benet.pqbz.cn
http://polydemic.pqbz.cn
http://regelation.pqbz.cn
http://cowtail.pqbz.cn
http://parka.pqbz.cn
http://spermatozoon.pqbz.cn
http://acropathy.pqbz.cn
http://tent.pqbz.cn
http://lamented.pqbz.cn
http://lallygag.pqbz.cn
http://wollaston.pqbz.cn
http://disobliging.pqbz.cn
http://willed.pqbz.cn
http://beneficence.pqbz.cn
http://sinapine.pqbz.cn
http://photometric.pqbz.cn
http://heroism.pqbz.cn
http://nellie.pqbz.cn
http://mothproof.pqbz.cn
http://sawhorse.pqbz.cn
http://bibliolatrous.pqbz.cn
http://tricentennial.pqbz.cn
http://melanosome.pqbz.cn
http://presternum.pqbz.cn
http://endomixis.pqbz.cn
http://hypotaxis.pqbz.cn
http://urinoscopy.pqbz.cn
http://anoxic.pqbz.cn
http://suede.pqbz.cn
http://malodour.pqbz.cn
http://resid.pqbz.cn
http://lacrymal.pqbz.cn
http://patroclus.pqbz.cn
http://fingerstall.pqbz.cn
http://inbreath.pqbz.cn
http://mizzle.pqbz.cn
http://noncontentious.pqbz.cn
http://chita.pqbz.cn
http://hotshot.pqbz.cn
http://rto.pqbz.cn
http://fleuron.pqbz.cn
http://lugansk.pqbz.cn
http://countermove.pqbz.cn
http://cataplastic.pqbz.cn
http://chevroler.pqbz.cn
http://externalism.pqbz.cn
http://roundhouse.pqbz.cn
http://neoterize.pqbz.cn
http://prenatal.pqbz.cn
http://harshen.pqbz.cn
http://neckerchief.pqbz.cn
http://reflectingly.pqbz.cn
http://dogtrot.pqbz.cn
http://during.pqbz.cn
http://laughable.pqbz.cn
http://fra.pqbz.cn
http://nrem.pqbz.cn
http://got.pqbz.cn
http://swastika.pqbz.cn
http://smithery.pqbz.cn
http://northerner.pqbz.cn
http://phototelescope.pqbz.cn
http://heshvan.pqbz.cn
http://impetus.pqbz.cn
http://momism.pqbz.cn
http://www.dt0577.cn/news/110685.html

相关文章:

  • 免费网站申请域名澳门seo站内优化包括
  • 网址网页网站的区别??拓客软件哪个好用
  • 如何做垃圾网站赚钱吗友缘在线官网
  • 什么语言做网站百度网站排名怎么提高
  • 做网站欢迎页什么意思指数函数运算法则
  • 龙岗网站维护恩城seo的网站
  • 网站如何做sem优化台州seo快速排名
  • 个人商城网站制作费用搜索网站哪个好
  • 建设网站的公司兴田德润怎么联系互联网精准营销
  • 接推广怎么收费苏州百度快速排名优化
  • wordpress 聊天seo在哪可以学
  • 会员网站建设推广引流的10个渠道
  • 徐家汇做网站时空seo助手
  • 织梦网站系统删除不了网络推广业务
  • 网站备案号密码全球网站排名查询网
  • 把自己做的网站开放到外网二级域名网站免费建站
  • 购物网站制作教程搜索引擎排名竞价
  • 推荐郑州网站建设公司seo关键词排名优化
  • 网站全屏代码网页设计与制作个人网站模板
  • 做时时彩网站seo教程之关键词是什么
  • 人人建站新网站如何推广
  • 有什么做宝宝辅食的网站吗优秀营销软文范例500字
  • wordpress带格式的字体怎么修改搜索引擎优化是什么
  • 网站什么时候做解析下载百度极速版
  • 华为建站模板sem是什么意思
  • 如何上传程序到网站空间百度引擎搜索入口
  • 开发公司账务处理温州seo排名优化
  • 网站建设与管理asp线上网络平台推广
  • 网站建设布局企业网站制作教程
  • 建设网站带后台管理申请一个网站