diff --git a/server/imserver/player.cc b/server/imserver/player.cc index 2658820..6172e6d 100644 --- a/server/imserver/player.cc +++ b/server/imserver/player.cc @@ -26,6 +26,16 @@ void Player::UnInit() timer_attacher.ClearTimerList(); } +void Player::Deserialize(const cs::MFUserDB& user_db) +{ + +} + +void Player::Serialize(cs::MFUserDB& user_db) +{ + +} + void Player::_CMFriendList(f8::MsgHdr& hdr, const cs::CMFriendList& msg) { cs::SMFriendList respmsg; @@ -229,17 +239,12 @@ void Player::MarkDirty() } } -void Player::FillFriendDB(cs::MFFriendDB& friend_db) -{ - -} - void Player::SaveToDB() { - cs::MFFriendDB friend_db; - FillFriendDB(friend_db); + cs::MFUserDB user_db; + Serialize(user_db); std::string friend_data; - friend_db.SerializeToString(&friend_data); + user_db.SerializeToString(&friend_data); auto on_ok = [] (a8::XParams& param, const f8::DataSet* data_set) @@ -256,17 +261,12 @@ void Player::SaveToDB() DBEngine::Instance()-> ExecAsyncScript( conn_info, - "INSERT `friend`(account_id, friend_data, createtime, modifytime) " - "VALUES('%s', '%s', %d, %d) " - "ON DUPLICATE KEY UPDATE friend_data='%s', modifytime=%d; ", + "UPDATE `user` SET friend_data='%s', modifytime=%d " + "WHERE account_id='%s';", { - account_id, friend_data, App::Instance()->nowtime, - App::Instance()->nowtime, - - friend_data, - App::Instance()->nowtime + account_id }, a8::XParams(), on_ok, diff --git a/server/imserver/player.h b/server/imserver/player.h index d8bc57f..42914e8 100644 --- a/server/imserver/player.h +++ b/server/imserver/player.h @@ -28,6 +28,9 @@ class Player void Init(); void UnInit(); + void Deserialize(const cs::MFUserDB& friend_db); + void Serialize(cs::MFUserDB& friend_db); + template void SendMsg(T& msg) { @@ -58,7 +61,6 @@ private: void FillFriendList(::google::protobuf::RepeatedPtrField< ::cs::MFUserInfo >* friend_list); void FillIMMsgConext(f8::MsgHdr& hdr, ss::MFIMMsgConext* conext); void ForwardGroupCMMsg(f8::MsgHdr& hdr, long long hash_code); - void FillFriendDB(cs::MFFriendDB& friend_db); void SaveToDB(); private: diff --git a/server/imserver/playermgr.cc b/server/imserver/playermgr.cc index 26c1167..8f8d4a2 100644 --- a/server/imserver/playermgr.cc +++ b/server/imserver/playermgr.cc @@ -160,8 +160,8 @@ void PlayerMgr::AsyncLogin1(const cs::CMLogin& msg) a8::XObject conn_info = DBEngine::Instance()->GetConnInfo(msg.account_id()); DBEngine::Instance()->ExecAsyncScript(conn_info, "INSERT INTO `user`(account_id, nickname, avatar_url," - " sex, createtime, modifytime, registertime)" - "VALUES ('%s', '%s', '%s', %d, %d, %d, %d)" + " sex, friend_data, createtime, modifytime, registertime)" + "VALUES ('%s', '%s', '%s', %d, '', %d, %d, %d)" "ON DUPLICATE KEY UPDATE nickname='%s', avatar_url='%s'," " sex=%d, last_logintime=%d;", { @@ -206,6 +206,7 @@ void PlayerMgr::AsyncLogin2(const cs::CMLogin& msg) data_set->at(0).at(2), a8::XValue(data_set->at(0).at(3)), a8::XValue(data_set->at(0).at(4)), + a8::XValue(data_set->at(0).at(6)), a8::XValue(data_set->at(0).at(5)) ); } @@ -228,7 +229,7 @@ void PlayerMgr::AsyncLogin2(const cs::CMLogin& msg) a8::XObject conn_info = DBEngine::Instance()->GetConnInfo(msg.account_id()); DBEngine::Instance()->ExecAsyncQuery(conn_info, "SELECT account_id, nickname, avatar_url, sex, group_id, " - " data_version1 " + " data_version1, user_db " "FROM `user` WHERE account_id='%s';", { msg.account_id(), @@ -247,6 +248,7 @@ void PlayerMgr::AsyncLoginOnOk(const std::string& account_id, const std::string& avatar_url, int sex, long long group_id, + const std::string& friend_data, int data_version1) { f8::MsgHdr* hdr = GetHdrByAccountId(account_id); @@ -269,6 +271,11 @@ void PlayerMgr::AsyncLoginOnOk(const std::string& account_id, hum->group_id = group_id; hum->data_version1 = data_version1; hum->Init(); + { + cs::MFUserDB user_db; + user_db.ParseFromString(friend_data); + hum->Deserialize(user_db); + } socket_hash_[hdr->socket_handle] = hum; accountid_hash_[account_id] = hum; } diff --git a/server/imserver/playermgr.h b/server/imserver/playermgr.h index f10c4ee..f44e886 100644 --- a/server/imserver/playermgr.h +++ b/server/imserver/playermgr.h @@ -50,6 +50,7 @@ class PlayerMgr : public a8::Singleton const std::string& avatar_url, int sex, long long group_id, + const std::string& friend_data, int data_version1); void AsyncLoginOnError(const std::string& account_id, int step, diff --git a/server/tools/protobuild/cs_proto.proto b/server/tools/protobuild/cs_proto.proto index c85b3d9..b0032b9 100644 --- a/server/tools/protobuild/cs_proto.proto +++ b/server/tools/protobuild/cs_proto.proto @@ -39,7 +39,12 @@ message MFGroupDB repeated MFGroupMemberDB members = 1; } -message MFFriendDB +message MFFriendDB1 +{ + +} + +message MFUserDB { } diff --git a/sql/relationdb_n.sql b/sql/relationdb_n.sql index ae1a09d..a81e733 100644 --- a/sql/relationdb_n.sql +++ b/sql/relationdb_n.sql @@ -43,6 +43,7 @@ CREATE TABLE `user` ( `avatar_url` varchar(256) CHARACTER SET utf8 NOT NULL DEFAULT '' COMMENT '', `sex` int(11) NOT NULL DEFAULT '0' COMMENT 'sex', `group_id` bigint NOT NULL COMMENT 'group_id', + `friend_data` mediumblob COMMENT '好友数据', `data_version1` int(11) NOT NULL DEFAULT '0' COMMENT 'data_version1', `createtime` int(11) NOT NULL DEFAULT '0' COMMENT '创建时间', `modifytime` int(11) NOT NULL DEFAULT '0' COMMENT '修改时间', @@ -76,24 +77,6 @@ CREATE TABLE `group` ( /*!40101 SET character_set_client = @saved_cs_client */; /*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; --- Table structure for table `friend` --- - -DROP TABLE IF EXISTS `friend`; -/*!40101 SET @saved_cs_client = @@character_set_client */; -/*!40101 SET character_set_client = utf8 */; -CREATE TABLE `friend` ( - `idx` bigint NOT NULL AUTO_INCREMENT COMMENT '自增id', - `account_id` varchar(60) CHARACTER SET utf8 NOT NULL COMMENT 'account_id', - `friend_data` mediumblob COMMENT '群数据', - `createtime` int(11) NOT NULL DEFAULT '0' COMMENT '创建时间', - `modifytime` int(11) NOT NULL DEFAULT '0' COMMENT '修改时间', - PRIMARY KEY (`idx`), - KEY `account_id` (`account_id`) -) ENGINE=InnoDB AUTO_INCREMENT=10000 DEFAULT CHARSET=utf8 COLLATE=utf8_bin; -/*!40101 SET character_set_client = @saved_cs_client */; -/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; - -- Table structure for table `friend_apply` --