protocol_def.h 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219
  1. #pragma once
  2. #include <cstdint>
  3. namespace im {
  4. // Client / Server 共用的协议常量。编解码、JSON、网络实现仍各放各工程。
  5. enum class Type : uint16_t {
  6. System = 1, // 心跳、被踢等
  7. Account = 2, // 登录/注册/密码/隐私
  8. Friend = 3, // 好友
  9. Message = 4, // 会话与聊天
  10. Sticker = 5, // 表情包
  11. Favorite = 6, // 收藏夹
  12. Group = 7, // 群聊
  13. };
  14. enum class Cmd : uint16_t {
  15. Heartbeat = 1,
  16. Login = 2,
  17. Logout = 3,
  18. Chat = 4,
  19. Register = 5,
  20. SendCode = 6,
  21. ResetPassword = 7,
  22. ChangePassword = 8,
  23. FriendList = 9,
  24. ConvList = 10,
  25. MsgHistory = 11,
  26. AddFriend = 12,
  27. SetConfig = 13,
  28. SearchUser = 14,
  29. FriendRequestList = 15,
  30. HandleFriendRequest = 16,
  31. GetPrivacy = 17,
  32. SetPrivacy = 18,
  33. StickerPackList = 19,
  34. StickerPack = 20,
  35. GetSticker = 21,
  36. DeleteConv = 22,
  37. SetUnread = 23,
  38. DeleteFriend = 24,
  39. SetRemark = 25,
  40. GetProfile = 26,
  41. SetProfile = 27,
  42. GetAvatar = 28,
  43. PutFile = 29,
  44. GetFile = 30,
  45. FavoriteAdd = 31,
  46. FavoriteList = 32,
  47. FavoriteGet = 33,
  48. FavoriteUpdate = 34,
  49. FavoriteDelete = 35,
  50. DeleteMsg = 36,
  51. GroupCreate = 37,
  52. GroupInfo = 38,
  53. GroupMembers = 39,
  54. GroupUpdate = 40,
  55. GroupInvite = 41,
  56. GroupSearch = 42,
  57. GroupJoin = 43,
  58. GroupLeave = 44,
  59. GroupDismiss = 45,
  60. GroupKick = 46,
  61. GroupSetAdmin = 47,
  62. GroupTransfer = 48,
  63. GroupRequestList = 49,
  64. GroupHandleRequest = 50,
  65. GroupList = 51,
  66. ChatNotify = 100,
  67. Kicked = 101,
  68. FriendRequestNotify = 102,
  69. FriendAcceptedNotify = 103,
  70. PresenceNotify = 104,
  71. GroupRequestNotify = 105,
  72. GroupChangeNotify = 106,
  73. };
  74. namespace Err {
  75. constexpr int Ok = 0;
  76. constexpr int BadParam = 1;
  77. constexpr int NotLogin = 2;
  78. constexpr int AuthFail = 3;
  79. constexpr int NotFound = 4;
  80. constexpr int Exists = 5;
  81. constexpr int PhoneExists = 6;
  82. constexpr int BadSms = 7;
  83. constexpr int WeakPass = 8;
  84. constexpr int Forbidden = 9;
  85. constexpr int DbError = 10;
  86. constexpr int BadAccount = 11;
  87. constexpr int RateLimit = 12;
  88. constexpr int Disabled = 13;
  89. } // namespace Err
  90. namespace MsgType {
  91. constexpr int Text = 1;
  92. constexpr int Sticker = 2;
  93. constexpr int File = 3;
  94. constexpr int Card = 4;
  95. constexpr int Sys = 5;
  96. }
  97. namespace FavKind {
  98. constexpr int Text = 1;
  99. constexpr int Image = 2;
  100. constexpr int File = 3;
  101. constexpr int Card = 4;
  102. constexpr int Note = 5;
  103. }
  104. namespace FriendRel {
  105. constexpr int None = 0; // 非好友
  106. constexpr int Pending = 1; // 已发出申请,待对方同意
  107. constexpr int Friend = 2; // 已是好友
  108. constexpr int Incoming = 3; // 对方已申请加我
  109. }
  110. namespace ConvType {
  111. constexpr int Direct = 0;
  112. constexpr int Group = 1;
  113. }
  114. namespace GroupRole {
  115. constexpr int Member = 0;
  116. constexpr int Admin = 1;
  117. constexpr int Owner = 2;
  118. }
  119. namespace JoinMode {
  120. constexpr int Open = 0; // 无需审核
  121. constexpr int Approve = 1; // 群主或管理员审核
  122. constexpr int Closed = 2; // 外人不可申请
  123. }
  124. constexpr uint32_t kHeaderSize = 12;
  125. constexpr int64_t kFileHelperUid = 1;
  126. inline const char* type_name(uint16_t type)
  127. {
  128. switch (static_cast<Type>(type)) {
  129. case Type::System: return "System";
  130. case Type::Account: return "Account";
  131. case Type::Friend: return "Friend";
  132. case Type::Message: return "Message";
  133. case Type::Sticker: return "Sticker";
  134. case Type::Favorite: return "Favorite";
  135. case Type::Group: return "Group";
  136. }
  137. return "?";
  138. }
  139. inline const char* cmd_name(uint16_t cmd)
  140. {
  141. switch (static_cast<Cmd>(cmd)) {
  142. case Cmd::Heartbeat: return "Heartbeat";
  143. case Cmd::Login: return "Login";
  144. case Cmd::Logout: return "Logout";
  145. case Cmd::Chat: return "Chat";
  146. case Cmd::Register: return "Register";
  147. case Cmd::SendCode: return "SendCode";
  148. case Cmd::ResetPassword: return "ResetPassword";
  149. case Cmd::ChangePassword: return "ChangePassword";
  150. case Cmd::FriendList: return "FriendList";
  151. case Cmd::ConvList: return "ConvList";
  152. case Cmd::MsgHistory: return "MsgHistory";
  153. case Cmd::AddFriend: return "AddFriend";
  154. case Cmd::SetConfig: return "SetConfig";
  155. case Cmd::SearchUser: return "SearchUser";
  156. case Cmd::FriendRequestList: return "FriendRequestList";
  157. case Cmd::HandleFriendRequest: return "HandleFriendRequest";
  158. case Cmd::GetPrivacy: return "GetPrivacy";
  159. case Cmd::SetPrivacy: return "SetPrivacy";
  160. case Cmd::StickerPackList: return "StickerPackList";
  161. case Cmd::StickerPack: return "StickerPack";
  162. case Cmd::GetSticker: return "GetSticker";
  163. case Cmd::DeleteConv: return "DeleteConv";
  164. case Cmd::SetUnread: return "SetUnread";
  165. case Cmd::DeleteFriend: return "DeleteFriend";
  166. case Cmd::SetRemark: return "SetRemark";
  167. case Cmd::GetProfile: return "GetProfile";
  168. case Cmd::SetProfile: return "SetProfile";
  169. case Cmd::GetAvatar: return "GetAvatar";
  170. case Cmd::PutFile: return "PutFile";
  171. case Cmd::GetFile: return "GetFile";
  172. case Cmd::FavoriteAdd: return "FavoriteAdd";
  173. case Cmd::FavoriteList: return "FavoriteList";
  174. case Cmd::FavoriteGet: return "FavoriteGet";
  175. case Cmd::FavoriteUpdate: return "FavoriteUpdate";
  176. case Cmd::FavoriteDelete: return "FavoriteDelete";
  177. case Cmd::DeleteMsg: return "DeleteMsg";
  178. case Cmd::GroupCreate: return "GroupCreate";
  179. case Cmd::GroupInfo: return "GroupInfo";
  180. case Cmd::GroupMembers: return "GroupMembers";
  181. case Cmd::GroupUpdate: return "GroupUpdate";
  182. case Cmd::GroupInvite: return "GroupInvite";
  183. case Cmd::GroupSearch: return "GroupSearch";
  184. case Cmd::GroupJoin: return "GroupJoin";
  185. case Cmd::GroupLeave: return "GroupLeave";
  186. case Cmd::GroupDismiss: return "GroupDismiss";
  187. case Cmd::GroupKick: return "GroupKick";
  188. case Cmd::GroupSetAdmin: return "GroupSetAdmin";
  189. case Cmd::GroupTransfer: return "GroupTransfer";
  190. case Cmd::GroupRequestList: return "GroupRequestList";
  191. case Cmd::GroupHandleRequest: return "GroupHandleRequest";
  192. case Cmd::GroupList: return "GroupList";
  193. case Cmd::ChatNotify: return "ChatNotify";
  194. case Cmd::Kicked: return "Kicked";
  195. case Cmd::FriendRequestNotify: return "FriendRequestNotify";
  196. case Cmd::FriendAcceptedNotify: return "FriendAcceptedNotify";
  197. case Cmd::PresenceNotify: return "PresenceNotify";
  198. case Cmd::GroupRequestNotify: return "GroupRequestNotify";
  199. case Cmd::GroupChangeNotify: return "GroupChangeNotify";
  200. }
  201. return "?";
  202. }
  203. } // namespace im