This commit is contained in:
aozhiwei 2020-05-14 15:51:51 +08:00
parent f5b1f1271e
commit bf91b066fc
6 changed files with 113 additions and 2 deletions

View File

@ -63,3 +63,25 @@ a8::XObject DBEngine::GetConnInfo(long long data)
a8::XObject conn_info;
return conn_info;
}
void DBEngine::UpdateFriendApplyIdx(long long crc32_code, long long new_idx)
{
friend_apply_idx_hash_[crc32_code] = new_idx;
}
long long DBEngine::GetFriendApplyCurrIdx(long long crc32_code)
{
auto itr = friend_apply_idx_hash_.find(crc32_code);
return itr != friend_apply_idx_hash_.end() ? itr->second : 0;
}
void DBEngine::UpdateGroupApplyIdx(long long crc32_code, long long new_idx)
{
group_apply_idx_hash_[crc32_code] = new_idx;
}
long long DBEngine::GetGroupApplyCurrIdx(long long crc32_code)
{
auto itr = group_apply_idx_hash_.find(crc32_code);
return itr != group_apply_idx_hash_.end() ? itr->second : 0;
}

View File

@ -31,4 +31,16 @@ class DBEngine : public a8::Singleton<DBEngine>
a8::XObject GetConnInfo(const std::string& data);
a8::XObject GetConnInfo(long long data);
long long GetFriendApplyCurrIdx(long long crc32_code);
long long GetGroupApplyCurrIdx(long long crc32_code);
private:
void UpdateFriendApplyIdx(long long crc32_code, long long new_idx);
void UpdateGroupApplyIdx(long long crc32_code, long long new_idx);
private:
std::map<long long, long long> friend_apply_idx_hash_;
std::map<long long, long long> group_apply_idx_hash_;
};

View File

@ -66,12 +66,87 @@ void Player::_CMFriendList(f8::MsgHdr& hdr, const cs::CMFriendList& msg)
void Player::_CMFriendApply(f8::MsgHdr& hdr, const cs::CMFriendApply& msg)
{
cs::SMFriendApply respmsg;
if (GetFriendById(msg.friend_id())) {
respmsg.set_error_code(1);
respmsg.set_error_msg("已经是好友");
}
SendMsg(respmsg);
{
auto on_ok =
[] (a8::XParams& param, const f8::DataSet* data_set)
{
};
auto on_error =
[] (a8::XParams& param, int error_code, const std::string& error_msg)
{
};
long long friend_crc32_code = a8::openssl::Crc32(
(unsigned char*)msg.friend_id().data(),
msg.friend_id().size()
);
a8::XObject conn_info = DBEngine::Instance()->GetConnInfo(friend_crc32_code);
DBEngine::Instance()->
ExecAsyncScript(
conn_info,
"INSERT INTO `friend_apply`(applyid, target_id, sender_id, sender_nickmake, "
" sender_avatar_url, sender_sex, sender_group_id, sender_data_version1, "
" createtime)"
"VALUES(%d, '%s', '%s', '%s', '%s', %d, %d, %d, %d);",
{
App::Instance()->NewUUID(),
msg.friend_id(),
account_id,
nickname,
avatar_url,
sex,
group_id,
data_version1,
App::Instance()->nowtime
},
a8::XParams(),
on_ok,
on_error,
friend_crc32_code
);
}
}
void Player::_CMFriendApplyList(f8::MsgHdr& hdr, const cs::CMFriendApplyList& msg)
{
if (last_apply_idx_ > 0 &&
last_apply_idx_ >= DBEngine::Instance()->GetFriendApplyCurrIdx(crc32_code)) {
}
auto on_ok =
[] (a8::XParams& param, const f8::DataSet* data_set)
{
};
auto on_error =
[] (a8::XParams& param, int error_code, const std::string& error_msg)
{
};
a8::XObject conn_info = DBEngine::Instance()->GetConnInfo(crc32_code);
DBEngine::Instance()->
ExecAsyncScript(
conn_info,
"SELECT idx, applyid, target_id, sender_id, sender_nickname, "
" sender_avatar_url, sender_sex, sender_group_id, sender_data_version1 "
"FROM friend_apply WHERE %d > idx AND target_id='%s';",
{
last_apply_idx_,
account_id
},
a8::XParams(),
on_ok,
on_error,
crc32_code
);
}
void Player::_CMFriendIgnore(f8::MsgHdr& hdr, const cs::CMFriendIgnore& msg)

View File

@ -70,6 +70,7 @@ private:
private:
bool dirty_ = false;
timer_list* dirty_timer_ = nullptr;
long long last_apply_idx_ = 0;
std::map<std::string, Friend> friend_hash_;
};

View File

@ -90,7 +90,7 @@ message CMFriendApply
//
message SMFriendApply
{
optional int32 error_code = 1; //
optional int32 error_code = 1; //1:
optional string error_msg = 2; //
}

View File

@ -92,11 +92,12 @@ CREATE TABLE `friend_apply` (
`sender_avatar_url` varchar(256) CHARACTER SET utf8 NOT NULL DEFAULT '' COMMENT '',
`sender_sex` int(11) NOT NULL DEFAULT '0' COMMENT 'sex',
`sender_group_id` bigint NOT NULL COMMENT 'group_id',
`sender_data_version1` int(11) NOT NULL DEFAULT '0' COMMENT 'data_version1',
`createtime` int(11) NOT NULL DEFAULT '0' COMMENT '创建时间',
PRIMARY KEY (`idx`),
UNIQUE KEY `applyid` (`applyid`),
KEY `target_id` (`target_id`),
KEY `target_sender` (`target_id`, `sender_id`)
KEY `target_sender` (`sender_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 */;