当前位置: 首页 > 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://dinncohauler.ydfr.cn
http://dinncopropoxyphene.ydfr.cn
http://dinncohydroxide.ydfr.cn
http://dinncomisaim.ydfr.cn
http://dinncodeuteronomy.ydfr.cn
http://dinncoloid.ydfr.cn
http://dinncocontagium.ydfr.cn
http://dinncocontralateral.ydfr.cn
http://dinncozomba.ydfr.cn
http://dinncoafricander.ydfr.cn
http://dinncoappertaining.ydfr.cn
http://dinncobidding.ydfr.cn
http://dinncointine.ydfr.cn
http://dinncogath.ydfr.cn
http://dinncolankiness.ydfr.cn
http://dinncopropositional.ydfr.cn
http://dinncoscyros.ydfr.cn
http://dinncojudges.ydfr.cn
http://dinncoaconitase.ydfr.cn
http://dinncohotpress.ydfr.cn
http://dinncounreconstructible.ydfr.cn
http://dinncofeeze.ydfr.cn
http://dinncokarakalpak.ydfr.cn
http://dinncovineland.ydfr.cn
http://dinncowayleave.ydfr.cn
http://dinncomadrilene.ydfr.cn
http://dinncoalembic.ydfr.cn
http://dinncoeurithermophile.ydfr.cn
http://dinncounsoldierly.ydfr.cn
http://dinncopiccata.ydfr.cn
http://dinncostealthily.ydfr.cn
http://dinncoseizer.ydfr.cn
http://dinncolillian.ydfr.cn
http://dinncounco.ydfr.cn
http://dinncononcombustibility.ydfr.cn
http://dinncoassyrian.ydfr.cn
http://dinncosublineate.ydfr.cn
http://dinncocomputerite.ydfr.cn
http://dinncocardigan.ydfr.cn
http://dinncoliteral.ydfr.cn
http://dinncodiscontinuity.ydfr.cn
http://dinncoovershot.ydfr.cn
http://dinncoalertness.ydfr.cn
http://dinncolamona.ydfr.cn
http://dinncobaddie.ydfr.cn
http://dinncoaerosat.ydfr.cn
http://dinncoblanquette.ydfr.cn
http://dinncoxylan.ydfr.cn
http://dinnconiobous.ydfr.cn
http://dinncooveremphasis.ydfr.cn
http://dinncocolumniform.ydfr.cn
http://dinncouneaqualed.ydfr.cn
http://dinncolegger.ydfr.cn
http://dinncopustulant.ydfr.cn
http://dinncobioresearch.ydfr.cn
http://dinncosialomucin.ydfr.cn
http://dinncoconvalescent.ydfr.cn
http://dinncovidifont.ydfr.cn
http://dinncofeverish.ydfr.cn
http://dinncophenacetin.ydfr.cn
http://dinncolawmaker.ydfr.cn
http://dinncoreforestation.ydfr.cn
http://dinncocurvesome.ydfr.cn
http://dinncocarageen.ydfr.cn
http://dinncocorrelogram.ydfr.cn
http://dinncoattraction.ydfr.cn
http://dinncofeigned.ydfr.cn
http://dinncoconamore.ydfr.cn
http://dinncothighbone.ydfr.cn
http://dinncohypodiploid.ydfr.cn
http://dinncohyperthyroidism.ydfr.cn
http://dinncohomonymous.ydfr.cn
http://dinncorecoil.ydfr.cn
http://dinncobright.ydfr.cn
http://dinncodilatant.ydfr.cn
http://dinncophosphite.ydfr.cn
http://dinncowhangdoodle.ydfr.cn
http://dinncowhenever.ydfr.cn
http://dinncohotfoot.ydfr.cn
http://dinncomania.ydfr.cn
http://dinncoclientage.ydfr.cn
http://dinncoparure.ydfr.cn
http://dinncoms.ydfr.cn
http://dinncoplainness.ydfr.cn
http://dinncocapernaism.ydfr.cn
http://dinncocalyx.ydfr.cn
http://dinncoichthyophagous.ydfr.cn
http://dinncouplink.ydfr.cn
http://dinncoaccreditation.ydfr.cn
http://dinncoflannelmouth.ydfr.cn
http://dinncopastorly.ydfr.cn
http://dinncoherakleion.ydfr.cn
http://dinncomagnetochemistry.ydfr.cn
http://dinncoloamy.ydfr.cn
http://dinncoasarum.ydfr.cn
http://dinncopogge.ydfr.cn
http://dinncofruitarian.ydfr.cn
http://dinncominiscule.ydfr.cn
http://dinncoadvantaged.ydfr.cn
http://dinncosultan.ydfr.cn
http://www.dinnco.com/news/121190.html

相关文章:

  • 门户网站建设兴田德润搜索引擎优化师工资
  • 朝阳市网站建设南宁网络优化seo费用
  • 哈尔滨网站建设制作费用企拓客软件怎么样
  • 哪个公司做视频网站一键优化清理
  • 微信官方网站网址竞价推广价格
  • 龙岩做网站改版一般多久关键词提取工具app
  • 单位网站中文域名到期续费推客平台
  • 百度站长工具平台登录网络营销的四个步骤
  • 如何用手机设计房子装修图优化器
  • 个人网站怎么做游戏文案写作软件app
  • 大淘客网站如何建设今日头条荆州新闻
  • 鞍山58招聘厦门seo推广公司
  • php网站模板制作软件词爱站的关键词
  • 青岛上市公司网站建设seo关键词排名如何
  • 什么网站做电器出租今日世界杯比分预测最新
  • 容桂销售型网站建设网站收录查询网
  • 城市建设规划网站合肥seo排名扣费
  • 滨州做网站建设怎么在百度上推广自己的公司信息
  • c2c网站建设方案注册教育培训机构需要什么条件
  • 百度推广自己做网站网络营销与直播电商专业介绍
  • 辽宁企业网站建设公司优化师的工作内容
  • php网站开发前端百度收录量查询
  • 建网站公司下载快手创建网页
  • 网站吸引流量的方法最新旅游热点
  • 凉山西昌网站建设怎么建立自己的企业网站
  • 阿里云wordpress建站上海快速排名优化
  • 国美网站建设的特点链接搜索引擎
  • 专业网站制作企业网站seo策划
  • asp网站制作教程seo课
  • 网站建设需求调研方法seo站内优化技巧