diff --git a/server/imserver/guildmgr.cc b/server/imserver/guildmgr.cc index 0b0ae39..1faeb1b 100644 --- a/server/imserver/guildmgr.cc +++ b/server/imserver/guildmgr.cc @@ -14,6 +14,10 @@ public: long long watch_guild_id = 0; time_t time = 0; ss::SS_IM_ForwardGuildCMMsg forward_msg; + + virtual ~AsyncGuildTask() {} + virtual void Execute() {} + virtual void OnError() {} }; class CMGuildInfoTask : public AsyncGuildTask @@ -204,6 +208,23 @@ void GuildMgr::_CMGuildRank(const ss::MFIMMsgConext& context, const cs::CMGuildR } void GuildMgr::AddAsyncTask(long long guild_id, AsyncGuildTask* task) +{ + Guild* guild = GetGuild(guild_id); + if (guild) { + task->Execute(); + delete task; + return; + } + auto itr = task_hash_.find(guild_id); + if (itr != task_hash_.end()) { + itr->second.push_back(task); + } else { + task_hash_[guild_id] = std::list({task}); + LoadGuild(guild_id); + } +} + +void GuildMgr::LoadGuild(long long guild_id) { } diff --git a/server/imserver/guildmgr.h b/server/imserver/guildmgr.h index be2a85d..d1079d6 100644 --- a/server/imserver/guildmgr.h +++ b/server/imserver/guildmgr.h @@ -13,14 +13,6 @@ namespace ss class SS_IM_ForwardGuildCMMsg; } -namespace google -{ - namespace protobuf - { - class Message; - } -} - class Guild; class AsyncGuildTask; class GuildMgr : public a8::Singleton @@ -44,6 +36,7 @@ class GuildMgr : public a8::Singleton void _CMGuildRank(const ss::MFIMMsgConext& context, const cs::CMGuildRank& msg); void AddAsyncTask(long long guild_id, AsyncGuildTask* task); + void LoadGuild(long long guild_id); bool IsValidGuildId(long long guild_id); Guild* GetGuild(long long group_id); template