#pragma once #include namespace im { // Client / Server 共用的协议常量。编解码、JSON、网络实现仍各放各工程。 enum class Type : uint16_t { System = 1, // 心跳、被踢等 Account = 2, // 登录/注册/密码/隐私 Friend = 3, // 好友 Message = 4, // 会话与聊天 Sticker = 5, // 表情包 Favorite = 6, // 收藏夹 Group = 7, // 群聊 }; enum class Cmd : uint16_t { Heartbeat = 1, Login = 2, Logout = 3, Chat = 4, Register = 5, SendCode = 6, ResetPassword = 7, ChangePassword = 8, FriendList = 9, ConvList = 10, MsgHistory = 11, AddFriend = 12, SetConfig = 13, SearchUser = 14, FriendRequestList = 15, HandleFriendRequest = 16, GetPrivacy = 17, SetPrivacy = 18, StickerPackList = 19, StickerPack = 20, GetSticker = 21, DeleteConv = 22, SetUnread = 23, DeleteFriend = 24, SetRemark = 25, GetProfile = 26, SetProfile = 27, GetAvatar = 28, PutFile = 29, GetFile = 30, FavoriteAdd = 31, FavoriteList = 32, FavoriteGet = 33, FavoriteUpdate = 34, FavoriteDelete = 35, DeleteMsg = 36, GroupCreate = 37, GroupInfo = 38, GroupMembers = 39, GroupUpdate = 40, GroupInvite = 41, GroupSearch = 42, GroupJoin = 43, GroupLeave = 44, GroupDismiss = 45, GroupKick = 46, GroupSetAdmin = 47, GroupTransfer = 48, GroupRequestList = 49, GroupHandleRequest = 50, GroupList = 51, ChatNotify = 100, Kicked = 101, FriendRequestNotify = 102, FriendAcceptedNotify = 103, PresenceNotify = 104, GroupRequestNotify = 105, GroupChangeNotify = 106, }; namespace Err { constexpr int Ok = 0; constexpr int BadParam = 1; constexpr int NotLogin = 2; constexpr int AuthFail = 3; constexpr int NotFound = 4; constexpr int Exists = 5; constexpr int PhoneExists = 6; constexpr int BadSms = 7; constexpr int WeakPass = 8; constexpr int Forbidden = 9; constexpr int DbError = 10; constexpr int BadAccount = 11; constexpr int RateLimit = 12; constexpr int Disabled = 13; } // namespace Err namespace MsgType { constexpr int Text = 1; constexpr int Sticker = 2; constexpr int File = 3; constexpr int Card = 4; constexpr int Sys = 5; } namespace FavKind { constexpr int Text = 1; constexpr int Image = 2; constexpr int File = 3; constexpr int Card = 4; constexpr int Note = 5; } namespace FriendRel { constexpr int None = 0; // 非好友 constexpr int Pending = 1; // 已发出申请,待对方同意 constexpr int Friend = 2; // 已是好友 constexpr int Incoming = 3; // 对方已申请加我 } namespace ConvType { constexpr int Direct = 0; constexpr int Group = 1; } namespace GroupRole { constexpr int Member = 0; constexpr int Admin = 1; constexpr int Owner = 2; } namespace JoinMode { constexpr int Open = 0; // 无需审核 constexpr int Approve = 1; // 群主或管理员审核 constexpr int Closed = 2; // 外人不可申请 } constexpr uint32_t kHeaderSize = 12; constexpr int64_t kFileHelperUid = 1; inline const char* type_name(uint16_t type) { switch (static_cast(type)) { case Type::System: return "System"; case Type::Account: return "Account"; case Type::Friend: return "Friend"; case Type::Message: return "Message"; case Type::Sticker: return "Sticker"; case Type::Favorite: return "Favorite"; case Type::Group: return "Group"; } return "?"; } inline const char* cmd_name(uint16_t cmd) { switch (static_cast(cmd)) { case Cmd::Heartbeat: return "Heartbeat"; case Cmd::Login: return "Login"; case Cmd::Logout: return "Logout"; case Cmd::Chat: return "Chat"; case Cmd::Register: return "Register"; case Cmd::SendCode: return "SendCode"; case Cmd::ResetPassword: return "ResetPassword"; case Cmd::ChangePassword: return "ChangePassword"; case Cmd::FriendList: return "FriendList"; case Cmd::ConvList: return "ConvList"; case Cmd::MsgHistory: return "MsgHistory"; case Cmd::AddFriend: return "AddFriend"; case Cmd::SetConfig: return "SetConfig"; case Cmd::SearchUser: return "SearchUser"; case Cmd::FriendRequestList: return "FriendRequestList"; case Cmd::HandleFriendRequest: return "HandleFriendRequest"; case Cmd::GetPrivacy: return "GetPrivacy"; case Cmd::SetPrivacy: return "SetPrivacy"; case Cmd::StickerPackList: return "StickerPackList"; case Cmd::StickerPack: return "StickerPack"; case Cmd::GetSticker: return "GetSticker"; case Cmd::DeleteConv: return "DeleteConv"; case Cmd::SetUnread: return "SetUnread"; case Cmd::DeleteFriend: return "DeleteFriend"; case Cmd::SetRemark: return "SetRemark"; case Cmd::GetProfile: return "GetProfile"; case Cmd::SetProfile: return "SetProfile"; case Cmd::GetAvatar: return "GetAvatar"; case Cmd::PutFile: return "PutFile"; case Cmd::GetFile: return "GetFile"; case Cmd::FavoriteAdd: return "FavoriteAdd"; case Cmd::FavoriteList: return "FavoriteList"; case Cmd::FavoriteGet: return "FavoriteGet"; case Cmd::FavoriteUpdate: return "FavoriteUpdate"; case Cmd::FavoriteDelete: return "FavoriteDelete"; case Cmd::DeleteMsg: return "DeleteMsg"; case Cmd::GroupCreate: return "GroupCreate"; case Cmd::GroupInfo: return "GroupInfo"; case Cmd::GroupMembers: return "GroupMembers"; case Cmd::GroupUpdate: return "GroupUpdate"; case Cmd::GroupInvite: return "GroupInvite"; case Cmd::GroupSearch: return "GroupSearch"; case Cmd::GroupJoin: return "GroupJoin"; case Cmd::GroupLeave: return "GroupLeave"; case Cmd::GroupDismiss: return "GroupDismiss"; case Cmd::GroupKick: return "GroupKick"; case Cmd::GroupSetAdmin: return "GroupSetAdmin"; case Cmd::GroupTransfer: return "GroupTransfer"; case Cmd::GroupRequestList: return "GroupRequestList"; case Cmd::GroupHandleRequest: return "GroupHandleRequest"; case Cmd::GroupList: return "GroupList"; case Cmd::ChatNotify: return "ChatNotify"; case Cmd::Kicked: return "Kicked"; case Cmd::FriendRequestNotify: return "FriendRequestNotify"; case Cmd::FriendAcceptedNotify: return "FriendAcceptedNotify"; case Cmd::PresenceNotify: return "PresenceNotify"; case Cmd::GroupRequestNotify: return "GroupRequestNotify"; case Cmd::GroupChangeNotify: return "GroupChangeNotify"; } return "?"; } } // namespace im