diff --git a/server/imserver/asynctaskmgr.cc b/server/imserver/asynctaskmgr.cc index d11439b..49a8075 100644 --- a/server/imserver/asynctaskmgr.cc +++ b/server/imserver/asynctaskmgr.cc @@ -1,12 +1,14 @@ #include "precompile.h" #include +#include #include "asynctaskmgr.h" #include "app.h" #include "player.h" #include "playermgr.h" #include "dbhelper.h" +#include "dbengine.h" #include "cs_proto.pb.h" #include "ss_proto.pb.h" @@ -116,6 +118,13 @@ struct RecommandFriendTask } }; +struct CreateGuildTask +{ + long long seqid = 0; + ss::MFIMMsgConext context; + cs::CMGuildCreate msg; +}; + void AsyncTaskMgr::Init() { @@ -193,6 +202,33 @@ void AsyncTaskMgr::CreateRecommandFriendTask(Player* hum) ); } +void AsyncTaskMgr::CreateNewGuildTask(const ss::MFIMMsgConext& context, const cs::CMGuildCreate& msg) +{ + CreateGuildTask* task = new CreateGuildTask(); + { + task->seqid = App::Instance()->NewSeqId(); + task->context = context; + task->msg = msg; + } + std::string guild_id = a8::XValue(context.user_info().base_data().guild_id()).GetString(); + long long crc32_code = a8::openssl::Crc32( + (unsigned char*)guild_id.data(), + guild_id.size() + ); + a8::XObject conn_info = DBEngine::Instance()->GetConnInfo(crc32_code); + DBEngine::Instance()->ExecAsyncScript + ( + conn_info, + "UPDATE `friend_apply` SET status=%d WHERE target_id='%s' AND sender_id='%s';", + { + }, + a8::XParams(), + nullptr, + nullptr, + crc32_code + ); +} + void AsyncTaskMgr::_SS_IM_PushUserOnlineState(f8::MsgHdr& hdr, const ss::SS_IM_PushUserOnlineState& msg) { QueryUserStatusTask* task = GetQueryUserStatusTask(msg.context().seqid()); diff --git a/server/imserver/asynctaskmgr.h b/server/imserver/asynctaskmgr.h index 96306f1..6389702 100644 --- a/server/imserver/asynctaskmgr.h +++ b/server/imserver/asynctaskmgr.h @@ -1,13 +1,20 @@ #pragma once +namespace cs +{ + class CMGuildCreate; +} + namespace ss { + class MFIMMsgConext; class SS_IM_PushUserOnlineState; class SS_IM_RandomUsersResponse; } struct QueryUserStatusTask; struct RecommandFriendTask; +struct CreateGuildTask; struct AsyncTaskContext; class Player; class AsyncTaskMgr : public a8::Singleton @@ -22,6 +29,7 @@ public: void CreateQueryUserStatusTask(Player* hum, std::vector& account_ids); void CreateRecommandFriendTask(Player* hum); + void CreateNewGuildTask(const ss::MFIMMsgConext& context, const cs::CMGuildCreate& msg); void _SS_IM_PushUserOnlineState(f8::MsgHdr& hdr, const ss::SS_IM_PushUserOnlineState& msg); void _SS_IM_RandomUsersResponse(f8::MsgHdr& hdr, const ss::SS_IM_RandomUsersResponse& msg); @@ -36,4 +44,5 @@ private: private: std::map query_user_status_tasks_; std::map recommand_friend_tasks_; + std::map create_guild_tasks_; }; diff --git a/server/imserver/guildmgr.cc b/server/imserver/guildmgr.cc index f3b439c..ac37ace 100644 --- a/server/imserver/guildmgr.cc +++ b/server/imserver/guildmgr.cc @@ -6,6 +6,7 @@ #include "cs_proto.pb.h" #include "ss_proto.pb.h" #include "MSConnMgr.h" +#include "asynctaskmgr.h" void GuildMgr::Init() { @@ -93,6 +94,7 @@ void GuildMgr::_CMGuildCreate(const ss::MFIMMsgConext& context, const cs::CMGuil ForwardGuildSMMsg(context, respmsg); return; } + AsyncTaskMgr::Instance()->CreateNewGuildTask(context, msg); } void GuildMgr::_CMGuildJoin(const ss::MFIMMsgConext& context, const cs::CMGuildJoin& msg) diff --git a/sql/relationdb_n.sql b/sql/relationdb_n.sql index e60c3c3..689bee3 100644 --- a/sql/relationdb_n.sql +++ b/sql/relationdb_n.sql @@ -88,10 +88,18 @@ DROP TABLE IF EXISTS `guild`; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `guild` ( `idx` bigint NOT NULL AUTO_INCREMENT COMMENT '自增id', - `guild_id` bigint NOT NULL COMMENT 'guild_id', - `guild_name` tinyblob COMMENT 'guild_name', - `owner_id` varchar(60) CHARACTER SET utf8 NOT NULL COMMENT '公会主', - `creator_id` varchar(60) CHARACTER SET utf8 NOT NULL COMMENT '公会创建者', + `guild_id` bigint NOT NULL COMMENT '公会id', + `guild_name` tinyblob COMMENT '公会名字', + `guild_lv` int(11) NOT NULL DEFAULT '0' COMMENT '公会等级', + `guild_exp` int(11) NOT NULL DEFAULT '0' COMMENT '公会经验', + `guild_badge` int(11) NOT NULL DEFAULT '0' COMMENT '公会徽章', + `guild_apply_num` int(11) NOT NULL DEFAULT '0' COMMENT '申请人数', + `guld_administers` varchar(255) CHARACTER SET utf8 NOT NULL COMMENT '公会管理员', + `guld_notice` varchar(255) CHARACTER SET utf8 NOT NULL COMMENT '公会公告', + `guld_declaration` varchar(255) CHARACTER SET utf8 NOT NULL COMMENT '公会宣言', + `guild_log` mediumblob COMMENT '公会日志', + `owner_id` varchar(255) CHARACTER SET utf8 NOT NULL COMMENT '公会主', + `creator_id` varchar(255) CHARACTER SET utf8 NOT NULL COMMENT '公会创建者', `guild_data` mediumblob COMMENT '公会数据', `createtime` int(11) NOT NULL DEFAULT '0' COMMENT '创建时间', `modifytime` int(11) NOT NULL DEFAULT '0' COMMENT '修改时间',