From f66340dcc0b7121b32239b949263ac662c9322da Mon Sep 17 00:00:00 2001 From: dongl <2725096176@qq.com> Date: Tue, 16 May 2023 17:12:05 +0800 Subject: [PATCH] =?UTF-8?q?smtp=20=E5=90=88=E5=B9=B6=E5=88=B0=20MS=20?= =?UTF-8?q?=E4=B8=AD=20=E6=B7=BB=E5=8A=A0=E5=A5=BD=E5=8F=8B=20=E5=8F=96?= =?UTF-8?q?=E5=A5=BD=E5=8F=8B=E5=88=97=E8=A1=A8=20=E7=95=A5=E6=9C=89?= =?UTF-8?q?=E4=BF=AE=E6=94=B9=20=E6=8E=A5=E4=B8=8B=E5=86=8D=E6=9D=A5=20?= =?UTF-8?q?=E8=A6=81=E8=AF=A5=E5=8C=85=E7=B1=BB=E5=9E=8B=E5=AE=8F=20=20?= =?UTF-8?q?=E5=A4=87=E4=BB=BD=E4=B8=80=E4=B8=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- MP/proto/mp.mph.pb.cc | 45 ++++----- MP/proto/mp.mph.pb.h | 2 + MP/proto/mp.sri.pb.cc | 70 +++++++++++--- MP/proto/mp.sri.pb.h | 108 ++++++++++++++++++++++ MP/protohuf/mp.mph.proto | 2 + MP/protohuf/mp.sri.proto | 1 + MS/CMakeLists.txt | 2 + MS/mmm/mapping.cpp | 1 + {include => MS}/smtp/send_email.h | 0 {include => MS}/smtp/smtp.h | 0 MS/works/controller/IMProveController.cpp | 11 ++- MS/works/db/UserDB.cpp | 18 ++-- MS/works/db/UserFriendsDB.cpp | 52 ++++++++--- MS/works/db/UserFriendsDB.h | 10 +- MS/works/db/linkDB.cpp | 24 ++--- MS/works/service/Service.h | 9 ++ MS/works/service/UserFriendsService.cpp | 23 ++++- MS/works/service/UserFriendsService.h | 3 +- MS/works/service/UserService.cpp | 5 +- TEST/main.cpp | 14 ++- 20 files changed, 319 insertions(+), 81 deletions(-) rename {include => MS}/smtp/send_email.h (100%) rename {include => MS}/smtp/smtp.h (100%) diff --git a/MP/proto/mp.mph.pb.cc b/MP/proto/mp.mph.pb.cc index 55daa97..b25a7b5 100644 --- a/MP/proto/mp.mph.pb.cc +++ b/MP/proto/mp.mph.pb.cc @@ -61,27 +61,28 @@ static ::PROTOBUF_NAMESPACE_ID::Message const * const file_default_instances[] = const char descriptor_table_protodef_mp_2emph_2eproto[] PROTOBUF_SECTION_VARIABLE(protodesc_cold) = "\n\014mp.mph.proto\022\002mp\"b\n\003mph\022\020\n\010mpb_size\030\001 " "\001(\r\022\r\n\005mp_id\030\002 \001(\004\022\016\n\006mp_sum\030\003 \001(\r\022\034\n\007mp" - "_type\030\004 \001(\0162\013.mp.MP_TYPE\022\014\n\004path\030\005 \001(\t*\370" - "\001\n\007MP_TYPE\022\024\n\020MP_REQUEST_LOGIN\020\000\022\025\n\021MP_R" + "_type\030\004 \001(\0162\013.mp.MP_TYPE\022\014\n\004path\030\005 \001(\t*\263" + "\002\n\007MP_TYPE\022\024\n\020MP_REQUEST_LOGIN\020\000\022\025\n\021MP_R" "EQUEST_LOGOUT\020\001\022\027\n\023MP_REQUEST_REGISTER\020\002" - "\022\025\n\021MP_RESPONSE_LOGIN\020\024\022\026\n\022MP_RESPONSE_L" - "OGOUT\020\025\022\030\n\024MP_RESPONSE_REGISTER\020\026\022\026\n\022MP_" - "REQUEST_PE_CODE\020(\022\027\n\023MP_RESPONSE_PE_CODE" - "\020<\022\025\n\021MP_REQUEST_IM_ADD\020d\022\026\n\022MP_RESPONSE" - "_IM_ADD\020x*\204\004\n\013MP_SUB_TYPE\022\032\n\026MP_REQUEST_" - "LOGIN_EMAIL\020\000\022\032\n\026MP_REQUEST_LOGIN_PHONE\020" - "\001\022\034\n\030MP_REQUEST_LOGIN_ACCOUNT\020\002\022\035\n\031MP_RE" - "QUEST_REGISTER_EMAIL\020\003\022\035\n\031MP_REQUEST_REG" - "ISTER_PHONE\020\004\022\034\n\030MP_REQUEST_PE_CODE_EMAI" - "L\020\005\022\035\n\031MP_RESPONSE_PE_CODE_EMAIL\020\006\022\034\n\030MP" - "_REQUEST_PE_CODE_PHONE\020\007\022\035\n\031MP_RESPONSE_" - "PE_CODE_PHONE\020\010\022!\n\035MP_REQUEST_ADD_CONTAC" - "T_PERSON\020\024\022$\n MP_REQUEST_REMOVE_CONTACT_" - "PERSON\020\025\022(\n$MP_REQUEST_BLACK_LIST_CONTAC" - "T_PERSON\020\026\022\"\n\036MP_RESPONSE_ADD_CONTACT_PE" - "RSON\020(\022%\n!MP_RESPONSE_REMOVE_CONTACT_PER" - "SON\020)\022)\n%MP_RESPONSE_BLACK_LIST_CONTACT_" - "PERSON\020*b\006proto3" + "\022\033\n\027MP_REQUEST_USER_FRIENDS\020\003\022\025\n\021MP_RESP" + "ONSE_LOGIN\020\024\022\026\n\022MP_RESPONSE_LOGOUT\020\025\022\030\n\024" + "MP_RESPONSE_REGISTER\020\026\022\034\n\030MP_RESPONSE_US" + "ER_FRIENDS\020\027\022\026\n\022MP_REQUEST_PE_CODE\020(\022\027\n\023" + "MP_RESPONSE_PE_CODE\020<\022\025\n\021MP_REQUEST_IM_A" + "DD\020d\022\026\n\022MP_RESPONSE_IM_ADD\020x*\204\004\n\013MP_SUB_" + "TYPE\022\032\n\026MP_REQUEST_LOGIN_EMAIL\020\000\022\032\n\026MP_R" + "EQUEST_LOGIN_PHONE\020\001\022\034\n\030MP_REQUEST_LOGIN" + "_ACCOUNT\020\002\022\035\n\031MP_REQUEST_REGISTER_EMAIL\020" + "\003\022\035\n\031MP_REQUEST_REGISTER_PHONE\020\004\022\034\n\030MP_R" + "EQUEST_PE_CODE_EMAIL\020\005\022\035\n\031MP_RESPONSE_PE" + "_CODE_EMAIL\020\006\022\034\n\030MP_REQUEST_PE_CODE_PHON" + "E\020\007\022\035\n\031MP_RESPONSE_PE_CODE_PHONE\020\010\022!\n\035MP" + "_REQUEST_ADD_CONTACT_PERSON\020\024\022$\n MP_REQU" + "EST_REMOVE_CONTACT_PERSON\020\025\022(\n$MP_REQUES" + "T_BLACK_LIST_CONTACT_PERSON\020\026\022\"\n\036MP_RESP" + "ONSE_ADD_CONTACT_PERSON\020(\022%\n!MP_RESPONSE" + "_REMOVE_CONTACT_PERSON\020)\022)\n%MP_RESPONSE_" + "BLACK_LIST_CONTACT_PERSON\020*b\006proto3" ; static const ::PROTOBUF_NAMESPACE_ID::internal::DescriptorTable*const descriptor_table_mp_2emph_2eproto_deps[1] = { }; @@ -90,7 +91,7 @@ static ::PROTOBUF_NAMESPACE_ID::internal::SCCInfoBase*const descriptor_table_mp_ }; static ::PROTOBUF_NAMESPACE_ID::internal::once_flag descriptor_table_mp_2emph_2eproto_once; const ::PROTOBUF_NAMESPACE_ID::internal::DescriptorTable descriptor_table_mp_2emph_2eproto = { - false, false, descriptor_table_protodef_mp_2emph_2eproto, "mp.mph.proto", 896, + false, false, descriptor_table_protodef_mp_2emph_2eproto, "mp.mph.proto", 955, &descriptor_table_mp_2emph_2eproto_once, descriptor_table_mp_2emph_2eproto_sccs, descriptor_table_mp_2emph_2eproto_deps, 1, 0, schemas, file_default_instances, TableStruct_mp_2emph_2eproto::offsets, file_level_metadata_mp_2emph_2eproto, 1, file_level_enum_descriptors_mp_2emph_2eproto, file_level_service_descriptors_mp_2emph_2eproto, @@ -108,9 +109,11 @@ bool MP_TYPE_IsValid(int value) { case 0: case 1: case 2: + case 3: case 20: case 21: case 22: + case 23: case 40: case 60: case 100: diff --git a/MP/proto/mp.mph.pb.h b/MP/proto/mp.mph.pb.h index 19ecc39..aafcfd4 100644 --- a/MP/proto/mp.mph.pb.h +++ b/MP/proto/mp.mph.pb.h @@ -69,9 +69,11 @@ enum MP_TYPE : int { MP_REQUEST_LOGIN = 0, MP_REQUEST_LOGOUT = 1, MP_REQUEST_REGISTER = 2, + MP_REQUEST_USER_FRIENDS = 3, MP_RESPONSE_LOGIN = 20, MP_RESPONSE_LOGOUT = 21, MP_RESPONSE_REGISTER = 22, + MP_RESPONSE_USER_FRIENDS = 23, MP_REQUEST_PE_CODE = 40, MP_RESPONSE_PE_CODE = 60, MP_REQUEST_IM_ADD = 100, diff --git a/MP/proto/mp.sri.pb.cc b/MP/proto/mp.sri.pb.cc index 330ba17..a43f81a 100644 --- a/MP/proto/mp.sri.pb.cc +++ b/MP/proto/mp.sri.pb.cc @@ -51,6 +51,7 @@ const ::PROTOBUF_NAMESPACE_ID::uint32 TableStruct_mp_2esri_2eproto::offsets[] PR PROTOBUF_FIELD_OFFSET(::mp::sri, sri_phone_), PROTOBUF_FIELD_OFFSET(::mp::sri, sri_msg_), PROTOBUF_FIELD_OFFSET(::mp::sri, sri_token_), + PROTOBUF_FIELD_OFFSET(::mp::sri, data_), }; static const ::PROTOBUF_NAMESPACE_ID::internal::MigrationSchema schemas[] PROTOBUF_SECTION_VARIABLE(protodesc_cold) = { { 0, -1, sizeof(::mp::sri)}, @@ -61,23 +62,24 @@ static ::PROTOBUF_NAMESPACE_ID::Message const * const file_default_instances[] = }; const char descriptor_table_protodef_mp_2esri_2eproto[] PROTOBUF_SECTION_VARIABLE(protodesc_cold) = - "\n\014mp.sri.proto\022\002mp\"\230\001\n\003sri\022\034\n\010sri_code\030\001" + "\n\014mp.sri.proto\022\002mp\"\246\001\n\003sri\022\034\n\010sri_code\030\001" " \001(\0162\n.mp.MP_SRI\022\024\n\014sri_username\030\002 \001(\t\022\023" "\n\013sri_account\030\003 \001(\004\022\021\n\tsri_email\030\004 \001(\t\022\021" "\n\tsri_phone\030\005 \001(\004\022\017\n\007sri_msg\030\006 \001(\t\022\021\n\tsr" - "i_token\030\007 \001(\t*\360\003\n\006MP_SRI\022\030\n\024MP_LOGIN_ACC" - "OUNT_NOT\020\000\022\024\n\020MP_LOGIN_SUCCESS\020\001\022\021\n\rMP_L" - "OGIN_FAIL\020\002\022\027\n\023MP_REGISTER_SUCCESS\020\n\022\035\n\031" - "MP_REGISTER_SUCCESS_PHONE\020\013\022\035\n\031MP_REGIST" - "ER_SUCCESS_EMAIL\020\014\022\025\n\021MP_REGISTER_EXIST\020" - "\r\022\027\n\023MP_REGISTER_SQL_ERR\020\016\022\025\n\021MP_LOGOUT_" - "SUCCESS\020\024\022\022\n\016MP_LOGOUT_FAIL\020\025\022\022\n\016MP_ADD_" - "FRIENDS\020\036\022\024\n\020MP_ADD_FRIENDS_0\020\037\022\024\n\020MP_AD" - "D_FRIENDS_1\020 \022\024\n\020MP_ADD_FRIENDS_2\020!\022\026\n\022M" - "P_ADD_FRIENDS_ERR\020\"\022\033\n\027MP_ADD_FRIENDS_NO" - "T_TYPE\020#\022\032\n\026MP_ADD_FRIENDS_SQL_ERR\020$\022\035\n\031" - "MP_ADD_FRIENDS_ANSWER_ERR\020%\022\026\n\022MP_PE_COD" - "E_SUCCESS\0202\022\023\n\017MP_PE_CODE_FAIL\0203b\006proto3" + "i_token\030\007 \001(\t\022\014\n\004data\030\010 \001(\t*\360\003\n\006MP_SRI\022\030" + "\n\024MP_LOGIN_ACCOUNT_NOT\020\000\022\024\n\020MP_LOGIN_SUC" + "CESS\020\001\022\021\n\rMP_LOGIN_FAIL\020\002\022\027\n\023MP_REGISTER" + "_SUCCESS\020\n\022\035\n\031MP_REGISTER_SUCCESS_PHONE\020" + "\013\022\035\n\031MP_REGISTER_SUCCESS_EMAIL\020\014\022\025\n\021MP_R" + "EGISTER_EXIST\020\r\022\027\n\023MP_REGISTER_SQL_ERR\020\016" + "\022\025\n\021MP_LOGOUT_SUCCESS\020\024\022\022\n\016MP_LOGOUT_FAI" + "L\020\025\022\022\n\016MP_ADD_FRIENDS\020\036\022\024\n\020MP_ADD_FRIEND" + "S_0\020\037\022\024\n\020MP_ADD_FRIENDS_1\020 \022\024\n\020MP_ADD_FR" + "IENDS_2\020!\022\026\n\022MP_ADD_FRIENDS_ERR\020\"\022\033\n\027MP_" + "ADD_FRIENDS_NOT_TYPE\020#\022\032\n\026MP_ADD_FRIENDS" + "_SQL_ERR\020$\022\035\n\031MP_ADD_FRIENDS_ANSWER_ERR\020" + "%\022\026\n\022MP_PE_CODE_SUCCESS\0202\022\023\n\017MP_PE_CODE_" + "FAIL\0203b\006proto3" ; static const ::PROTOBUF_NAMESPACE_ID::internal::DescriptorTable*const descriptor_table_mp_2esri_2eproto_deps[1] = { }; @@ -86,7 +88,7 @@ static ::PROTOBUF_NAMESPACE_ID::internal::SCCInfoBase*const descriptor_table_mp_ }; static ::PROTOBUF_NAMESPACE_ID::internal::once_flag descriptor_table_mp_2esri_2eproto_once; const ::PROTOBUF_NAMESPACE_ID::internal::DescriptorTable descriptor_table_mp_2esri_2eproto = { - false, false, descriptor_table_protodef_mp_2esri_2eproto, "mp.sri.proto", 680, + false, false, descriptor_table_protodef_mp_2esri_2eproto, "mp.sri.proto", 694, &descriptor_table_mp_2esri_2eproto_once, descriptor_table_mp_2esri_2eproto_sccs, descriptor_table_mp_2esri_2eproto_deps, 1, 0, schemas, file_default_instances, TableStruct_mp_2esri_2eproto::offsets, file_level_metadata_mp_2esri_2eproto, 1, file_level_enum_descriptors_mp_2esri_2eproto, file_level_service_descriptors_mp_2esri_2eproto, @@ -165,6 +167,11 @@ sri::sri(const sri& from) sri_token_.Set(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), from._internal_sri_token(), GetArena()); } + data_.UnsafeSetDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited()); + if (!from._internal_data().empty()) { + data_.Set(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), from._internal_data(), + GetArena()); + } ::memcpy(&sri_account_, &from.sri_account_, static_cast(reinterpret_cast(&sri_code_) - reinterpret_cast(&sri_account_)) + sizeof(sri_code_)); @@ -177,6 +184,7 @@ void sri::SharedCtor() { sri_email_.UnsafeSetDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited()); sri_msg_.UnsafeSetDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited()); sri_token_.UnsafeSetDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited()); + data_.UnsafeSetDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited()); ::memset(&sri_account_, 0, static_cast( reinterpret_cast(&sri_code_) - reinterpret_cast(&sri_account_)) + sizeof(sri_code_)); @@ -194,6 +202,7 @@ void sri::SharedDtor() { sri_email_.DestroyNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited()); sri_msg_.DestroyNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited()); sri_token_.DestroyNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited()); + data_.DestroyNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited()); } void sri::ArenaDtor(void* object) { @@ -221,6 +230,7 @@ void sri::Clear() { sri_email_.ClearToEmpty(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), GetArena()); sri_msg_.ClearToEmpty(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), GetArena()); sri_token_.ClearToEmpty(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), GetArena()); + data_.ClearToEmpty(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), GetArena()); ::memset(&sri_account_, 0, static_cast( reinterpret_cast(&sri_code_) - reinterpret_cast(&sri_account_)) + sizeof(sri_code_)); @@ -293,6 +303,15 @@ const char* sri::_InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::intern CHK_(ptr); } else goto handle_unusual; continue; + // string data = 8; + case 8: + if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 66)) { + auto str = _internal_mutable_data(); + ptr = ::PROTOBUF_NAMESPACE_ID::internal::InlineGreedyStringParser(str, ptr, ctx); + CHK_(::PROTOBUF_NAMESPACE_ID::internal::VerifyUTF8(str, "mp.sri.data")); + CHK_(ptr); + } else goto handle_unusual; + continue; default: { handle_unusual: if ((tag & 7) == 4 || tag == 0) { @@ -380,6 +399,16 @@ failure: 7, this->_internal_sri_token(), target); } + // string data = 8; + if (this->data().size() > 0) { + ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::VerifyUtf8String( + this->_internal_data().data(), static_cast(this->_internal_data().length()), + ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::SERIALIZE, + "mp.sri.data"); + target = stream->WriteStringMaybeAliased( + 8, this->_internal_data(), target); + } + if (PROTOBUF_PREDICT_FALSE(_internal_metadata_.have_unknown_fields())) { target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormat::InternalSerializeUnknownFieldsToArray( _internal_metadata_.unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(::PROTOBUF_NAMESPACE_ID::UnknownFieldSet::default_instance), target, stream); @@ -424,6 +453,13 @@ size_t sri::ByteSizeLong() const { this->_internal_sri_token()); } + // string data = 8; + if (this->data().size() > 0) { + total_size += 1 + + ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::StringSize( + this->_internal_data()); + } + // uint64 sri_account = 3; if (this->sri_account() != 0) { total_size += 1 + @@ -487,6 +523,9 @@ void sri::MergeFrom(const sri& from) { if (from.sri_token().size() > 0) { _internal_set_sri_token(from._internal_sri_token()); } + if (from.data().size() > 0) { + _internal_set_data(from._internal_data()); + } if (from.sri_account() != 0) { _internal_set_sri_account(from._internal_sri_account()); } @@ -523,6 +562,7 @@ void sri::InternalSwap(sri* other) { sri_email_.Swap(&other->sri_email_, &::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), GetArena()); sri_msg_.Swap(&other->sri_msg_, &::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), GetArena()); sri_token_.Swap(&other->sri_token_, &::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), GetArena()); + data_.Swap(&other->data_, &::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), GetArena()); ::PROTOBUF_NAMESPACE_ID::internal::memswap< PROTOBUF_FIELD_OFFSET(sri, sri_code_) + sizeof(sri::sri_code_) diff --git a/MP/proto/mp.sri.pb.h b/MP/proto/mp.sri.pb.h index 85f01e9..74c8701 100644 --- a/MP/proto/mp.sri.pb.h +++ b/MP/proto/mp.sri.pb.h @@ -227,6 +227,7 @@ class sri PROTOBUF_FINAL : kSriEmailFieldNumber = 4, kSriMsgFieldNumber = 6, kSriTokenFieldNumber = 7, + kDataFieldNumber = 8, kSriAccountFieldNumber = 3, kSriPhoneFieldNumber = 5, kSriCodeFieldNumber = 1, @@ -331,6 +332,31 @@ class sri PROTOBUF_FINAL : std::string* _internal_mutable_sri_token(); public: + // string data = 8; + void clear_data(); + const std::string& data() const; + void set_data(const std::string& value); + void set_data(std::string&& value); + void set_data(const char* value); + void set_data(const char* value, size_t size); + std::string* mutable_data(); + std::string* release_data(); + void set_allocated_data(std::string* data); + GOOGLE_PROTOBUF_RUNTIME_DEPRECATED("The unsafe_arena_ accessors for" + " string fields are deprecated and will be removed in a" + " future release.") + std::string* unsafe_arena_release_data(); + GOOGLE_PROTOBUF_RUNTIME_DEPRECATED("The unsafe_arena_ accessors for" + " string fields are deprecated and will be removed in a" + " future release.") + void unsafe_arena_set_allocated_data( + std::string* data); + private: + const std::string& _internal_data() const; + void _internal_set_data(const std::string& value); + std::string* _internal_mutable_data(); + public: + // uint64 sri_account = 3; void clear_sri_account(); ::PROTOBUF_NAMESPACE_ID::uint64 sri_account() const; @@ -369,6 +395,7 @@ class sri PROTOBUF_FINAL : ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr sri_email_; ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr sri_msg_; ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr sri_token_; + ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr data_; ::PROTOBUF_NAMESPACE_ID::uint64 sri_account_; ::PROTOBUF_NAMESPACE_ID::uint64 sri_phone_; int sri_code_; @@ -770,6 +797,87 @@ inline void sri::unsafe_arena_set_allocated_sri_token( // @@protoc_insertion_point(field_unsafe_arena_set_allocated:mp.sri.sri_token) } +// string data = 8; +inline void sri::clear_data() { + data_.ClearToEmpty(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), GetArena()); +} +inline const std::string& sri::data() const { + // @@protoc_insertion_point(field_get:mp.sri.data) + return _internal_data(); +} +inline void sri::set_data(const std::string& value) { + _internal_set_data(value); + // @@protoc_insertion_point(field_set:mp.sri.data) +} +inline std::string* sri::mutable_data() { + // @@protoc_insertion_point(field_mutable:mp.sri.data) + return _internal_mutable_data(); +} +inline const std::string& sri::_internal_data() const { + return data_.Get(); +} +inline void sri::_internal_set_data(const std::string& value) { + + data_.Set(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), value, GetArena()); +} +inline void sri::set_data(std::string&& value) { + + data_.Set( + &::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), ::std::move(value), GetArena()); + // @@protoc_insertion_point(field_set_rvalue:mp.sri.data) +} +inline void sri::set_data(const char* value) { + GOOGLE_DCHECK(value != nullptr); + + data_.Set(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), ::std::string(value), + GetArena()); + // @@protoc_insertion_point(field_set_char:mp.sri.data) +} +inline void sri::set_data(const char* value, + size_t size) { + + data_.Set(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), ::std::string( + reinterpret_cast(value), size), GetArena()); + // @@protoc_insertion_point(field_set_pointer:mp.sri.data) +} +inline std::string* sri::_internal_mutable_data() { + + return data_.Mutable(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), GetArena()); +} +inline std::string* sri::release_data() { + // @@protoc_insertion_point(field_release:mp.sri.data) + return data_.Release(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), GetArena()); +} +inline void sri::set_allocated_data(std::string* data) { + if (data != nullptr) { + + } else { + + } + data_.SetAllocated(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), data, + GetArena()); + // @@protoc_insertion_point(field_set_allocated:mp.sri.data) +} +inline std::string* sri::unsafe_arena_release_data() { + // @@protoc_insertion_point(field_unsafe_arena_release:mp.sri.data) + GOOGLE_DCHECK(GetArena() != nullptr); + + return data_.UnsafeArenaRelease(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), + GetArena()); +} +inline void sri::unsafe_arena_set_allocated_data( + std::string* data) { + GOOGLE_DCHECK(GetArena() != nullptr); + if (data != nullptr) { + + } else { + + } + data_.UnsafeArenaSetAllocated(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), + data, GetArena()); + // @@protoc_insertion_point(field_unsafe_arena_set_allocated:mp.sri.data) +} + #ifdef __GNUC__ #pragma GCC diagnostic pop #endif // __GNUC__ diff --git a/MP/protohuf/mp.mph.proto b/MP/protohuf/mp.mph.proto index 2f68882..876a730 100644 --- a/MP/protohuf/mp.mph.proto +++ b/MP/protohuf/mp.mph.proto @@ -6,11 +6,13 @@ enum MP_TYPE { MP_REQUEST_LOGIN = 0; MP_REQUEST_LOGOUT = 1; MP_REQUEST_REGISTER = 2; + MP_REQUEST_USER_FRIENDS = 3; // 20 - 39 MP_RESPONSE_LOGIN = 20; MP_RESPONSE_LOGOUT = 21; MP_RESPONSE_REGISTER = 22; + MP_RESPONSE_USER_FRIENDS = 23; // 40 - 59 MP_REQUEST_PE_CODE = 40; // 请求验证码 diff --git a/MP/protohuf/mp.sri.proto b/MP/protohuf/mp.sri.proto index 48248b5..1aef78e 100644 --- a/MP/protohuf/mp.sri.proto +++ b/MP/protohuf/mp.sri.proto @@ -36,4 +36,5 @@ message sri { uint64 sri_phone = 5; string sri_msg = 6; string sri_token = 7; + string data = 8; } \ No newline at end of file diff --git a/MS/CMakeLists.txt b/MS/CMakeLists.txt index ee9b741..1a49714 100644 --- a/MS/CMakeLists.txt +++ b/MS/CMakeLists.txt @@ -14,9 +14,11 @@ include_directories(${CMAKE_SOURCE_DIR}/include/rapidjson) include_directories(${CMAKE_SOURCE_DIR}/include/mysql++) include_directories(${CMAKE_SOURCE_DIR}/include/mysql++/mysql) include_directories(${CMAKE_SOURCE_DIR}/include/smtp) + include_directories(${CMAKE_SOURCE_DIR}/MDB/imm_mysqldb) include_directories(${CMAKE_SOURCE_DIR}/MP) include_directories(${CMAKE_SOURCE_DIR}/MS/works) +include_directories(${CMAKE_SOURCE_DIR}/MS/smtp) message("CMAKE_SOURCE_DIR ${CMAKE_SOURCE_DIR}/include/libevent") link_directories(${CMAKE_SOURCE_DIR}/lib/libevent) diff --git a/MS/mmm/mapping.cpp b/MS/mmm/mapping.cpp index 116d18d..e43e218 100644 --- a/MS/mmm/mapping.cpp +++ b/MS/mmm/mapping.cpp @@ -28,6 +28,7 @@ mapping::mapping() { // 用户添加好友群组类操作 auto improve = new IMProveController(); map.insert({mp::MP_REQUEST_IM_ADD, improve}); + map.insert({mp::MP_REQUEST_USER_FRIENDS, improve}); } } diff --git a/include/smtp/send_email.h b/MS/smtp/send_email.h similarity index 100% rename from include/smtp/send_email.h rename to MS/smtp/send_email.h diff --git a/include/smtp/smtp.h b/MS/smtp/smtp.h similarity index 100% rename from include/smtp/smtp.h rename to MS/smtp/smtp.h diff --git a/MS/works/controller/IMProveController.cpp b/MS/works/controller/IMProveController.cpp index d5ea6ac..0be25c1 100644 --- a/MS/works/controller/IMProveController.cpp +++ b/MS/works/controller/IMProveController.cpp @@ -5,6 +5,13 @@ #include "IMProveController.h" void IMProveController::run(std::shared_ptr request, std::shared_ptr response) { - auto sri = service.imProve(&request->m_body); - response->set(sri, request->m_bev); + // 添加好友 + if (request->m_mph->mp_type() == mp::MP_REQUEST_IM_ADD) { + auto sri = service.addFriendImProve(&request->m_body); + response->set(sri, request->m_bev); + } + // 取用户好友列表 + else if(request->m_mph->mp_type() == mp::MP_REQUEST_USER_FRIENDS) { + + } } diff --git a/MS/works/db/UserDB.cpp b/MS/works/db/UserDB.cpp index 65a8fa0..7531d0c 100644 --- a/MS/works/db/UserDB.cpp +++ b/MS/works/db/UserDB.cpp @@ -20,7 +20,7 @@ std::tuple UserDB::select_user(uint64_t account, const std::string query.storein(user); // 放回链接 -// LinkDB::release(conn); + LinkDB::release(conn); return {!user.empty(), user.empty() ? PoUser() : PoUser(user[0].account, user[0].phone, user[0].email, @@ -45,7 +45,7 @@ bool UserDB::insert_user(uint64_t account, const std::string &password, const st auto ret = query.exec(); // 放回链接 -// LinkDB::release(conn); + LinkDB::release(conn); return ret; } @@ -65,7 +65,7 @@ bool UserDB::insert_user_friends(uint64_t account, uint64_t friends) { auto ret = q.exec(); // 放回链接 -// LinkDB::release(conn); + LinkDB::release(conn); return ret; } @@ -79,7 +79,7 @@ bool UserDB::remove_user(uint64_t account) { auto ret = query.exec(); // 放回链接 -// LinkDB::release(conn); + LinkDB::release(conn); return ret; } @@ -99,7 +99,7 @@ bool UserDB::test(uint64_t account) { auto ret = q.exec(); // 放回链接 -// LinkDB::release(conn); + LinkDB::release(conn); return ret; } @@ -117,7 +117,7 @@ std::optional UserDB::fetch_account() { // 放回链接 -// LinkDB::release(conn); + LinkDB::release(conn); return std::strtol(ret[0][0], nullptr,0); } @@ -131,7 +131,7 @@ bool UserDB::remove_pool_account(uint64_t account) { auto ret = query.exec(); // 放回链接 -// LinkDB::release(conn); + LinkDB::release(conn); return ret; } @@ -146,7 +146,7 @@ bool UserDB::bind_email(uint64_t account, const std::string &email) { auto ret = query.exec(); // 放回链接 -// LinkDB::release(conn); + LinkDB::release(conn); return ret; } @@ -160,7 +160,7 @@ bool UserDB::bind_phone(uint64_t account, const std::string &phone) { auto ret = query.exec(); // 放回链接 -// LinkDB::release(conn); + LinkDB::release(conn); return ret; } diff --git a/MS/works/db/UserFriendsDB.cpp b/MS/works/db/UserFriendsDB.cpp index b0b4d6c..f91debb 100644 --- a/MS/works/db/UserFriendsDB.cpp +++ b/MS/works/db/UserFriendsDB.cpp @@ -16,7 +16,7 @@ char UserFriendsDB::select_add_type(uint64_t account) { auto ret = query.store(account)[0][0][0]; // 因为 account 唯一 所以结果 至多一个 // 放回链接 -// LinkDB::release(conn); + LinkDB::release(conn); return ret; } @@ -24,23 +24,34 @@ char UserFriendsDB::select_add_type(uint64_t account) { /// friends :{ /// uid :info { } /// } -bool UserFriendsDB::add_friends(uint64_t account, uint64_t friends) { +std::tuple UserFriendsDB::add_friends(uint64_t account, uint64_t friends) { conn = LinkDB::safe_grab(); - auto query = conn->query("update im_user_friends set friends=" + auto q = conn->query("select username from im_user where account=%1:account"); + q.template_defaults[1] = friends; + q.parse(); + auto username = q.store(); + if (username.num_rows() < 1) { + LinkDB::release(conn); + return {false, "未查询到账户"}; + } + std::string name = username[0][0].c_str(); + + auto query = conn->query("update im_user_friends set friends =" "JSON_SET(friends, '$.\"%2:friends\"', " - "JSON_OBJECT('belong_grouping', 1, 'add_time', 10000, 'add_source', 1)" + "JSON_OBJECT('username', '%3:username', 'belong_grouping', 1, 'add_time', 10000, 'add_source', 1)" ")" "where account=%1:account"); query.template_defaults[1] = account; query.template_defaults[2] = friends; + query.template_defaults[3] = name.c_str(); query.parse(); auto ret = query.exec(); // 放回链接 -// LinkDB::release(conn); - return ret; + LinkDB::release(conn); + return {ret, "添加失败"}; } void UserFriendsDB::insert_friends_to_be_added(uint64_t account, uint64_t friends) { @@ -48,10 +59,10 @@ void UserFriendsDB::insert_friends_to_be_added(uint64_t account, uint64_t friend // 放回链接 -// LinkDB::release(conn); + LinkDB::release(conn); } -std::optional UserFriendsDB::select_friends_all(uint64_t account) { +std::optional UserFriendsDB::select_friends_all(uint64_t account) { conn = LinkDB::safe_grab(); auto q = conn->query("select friends from im_user_friends where account=%0:account"); q.parse(); @@ -64,14 +75,28 @@ std::optional UserFriendsDB::select_friends_all(uint64_t ac std::string friends; ret[0][0].to_string(friends); - rapidjson::Document document; - document.Parse(friends.c_str()); +// for (auto mem = document.MemberBegin(); mem != document.MemberEnd(); ++mem) { +// mem->name; +// } + // 放回链接 -// LinkDB::release(conn); - return document; + LinkDB::release(conn); + return friends; } +std::optional UserFriendsDB::select_friends_all_json(uint64_t account) { + auto temp = select_friends_all(account); + rapidjson::Document document; + if (temp.has_value()) { + document.Parse(temp.value().c_str()); + return document; + } else { + return std::nullopt; + } +} + + std::optional UserFriendsDB::select_friends_info(uint64_t account, uint64_t friends) { conn = LinkDB::safe_grab(); @@ -101,7 +126,7 @@ UserFriendsDB::select_friends_info(uint64_t account, uint64_t friends) { // 放回链接 -// LinkDB::release(conn); + LinkDB::release(conn); return document; } @@ -114,3 +139,4 @@ UserFriendsDB::select_friends_info(uint64_t account, uint64_t friends) { + diff --git a/MS/works/db/UserFriendsDB.h b/MS/works/db/UserFriendsDB.h index 811b836..1a305da 100644 --- a/MS/works/db/UserFriendsDB.h +++ b/MS/works/db/UserFriendsDB.h @@ -14,10 +14,16 @@ class UserFriendsDB : public DB { public: + // 查询添加类型 char select_add_type(uint64_t account); - bool add_friends(uint64_t source, uint64_t target); - std::optional select_friends_all(uint64_t account); + // 添加好友 + std::tuple add_friends(uint64_t source, uint64_t target); + // 查询全部好友 好友列表 + std::optional select_friends_all(uint64_t account); + std::optional select_friends_all_json(uint64_t account); + // 查询好友信息 std::optional select_friends_info(uint64_t account, uint64_t friends); + // 添加待审核好友列表 void insert_friends_to_be_added(uint64_t account, uint64_t friends); }; diff --git a/MS/works/db/linkDB.cpp b/MS/works/db/linkDB.cpp index a956da1..bc336f6 100644 --- a/MS/works/db/linkDB.cpp +++ b/MS/works/db/linkDB.cpp @@ -14,21 +14,23 @@ LinkDB::~LinkDB() { ConnectionPool* LinkDB::pool = nullptr; mysqlpp::Connection* LinkDB::safe_grab() { - static std::vector link; - static std::atomic index; +// static std::vector link; + +// static std::atomic index; if (pool == nullptr) { pool = new ConnectionPool("124.221.152.192", "ims", "IMS", "WimTFC8N58kznx2k"); - index = -1; - for (int i = 0; i < 30; ++i) { - link.push_back(pool->safe_grab()); - } +// index = -1; +// for (int i = 0; i < 30; ++i) { +// link.push_back(pool->safe_grab()); +// } } - ++index; - if (index >= link.size()) { - index = 0; - } - return link[index]; +// ++index; +// if (index >= link.size()) { +// index = 0; +// } +// return link[index]; + return pool->safe_grab(); } void LinkDB::release(mysqlpp::Connection *connection) { diff --git a/MS/works/service/Service.h b/MS/works/service/Service.h index 2574750..4957ae0 100644 --- a/MS/works/service/Service.h +++ b/MS/works/service/Service.h @@ -8,6 +8,7 @@ #include #include "proto/mp.sri.pb.h" #include "db/UserDB.h" +#include "document.h" class Service { public: @@ -29,6 +30,14 @@ protected: sri->clear_sri_token(); sri->clear_sri_username(); } + + + std::string SerializationVector(rapidjson::Document* document) { + uint64_t account; + for (auto mem = document->MemberBegin(); mem != document->MemberEnd(); ++mem) { + mem->name; + } + } }; #endif //IM2_SERVICE_H diff --git a/MS/works/service/UserFriendsService.cpp b/MS/works/service/UserFriendsService.cpp index 251d6e2..4476211 100644 --- a/MS/works/service/UserFriendsService.cpp +++ b/MS/works/service/UserFriendsService.cpp @@ -7,7 +7,7 @@ UserFriendsService::~UserFriendsService() {} // 好友群组 添加删除 任务组 决策接口 -mp::sri *UserFriendsService::imProve(mp::body* body) { +mp::sri *UserFriendsService::addFriendImProve(mp::body* body) { sri_clear(); if (body->target() == 0 || body->source() == 0) { printf("请求数据有缺\n"); @@ -34,8 +34,8 @@ mp::sri *UserFriendsService::imProve(mp::body* body) { } void UserFriendsService::add_friends(mp::body *body) { - bool state1 = userFriendsDb.add_friends(body->source(), body->target()); - bool state2 = userFriendsDb.add_friends(body->target(), body->source()); + auto [state1, msg1] = userFriendsDb.add_friends(body->source(), body->target()); + auto [state2, msg2] = userFriendsDb.add_friends(body->target(), body->source()); if (state1 && state2) { sri->set_sri_code((mp::MP_SRI)(mp::MP_ADD_FRIENDS | mp::MP_ADD_FRIENDS_0)); sri->set_sri_msg("添加成功"); @@ -71,6 +71,23 @@ mp::sri* UserFriendsService::add_contact_person(mp::body *body) { return sri; } +mp::sri *UserFriendsService::FetchUserFriend(uint64_t account, const std::string &data) { + sri_clear(); + uint8_t page_begin = data.c_str()[0]; + uint8_t page_end = data.c_str()[1]; + + auto friends = userFriendsDb.select_friends_all(account); + if (friends.has_value()) + sri->set_data(friends.value()); + sri->set_sri_msg("好友获取成功"); + sri->set_sri_code(mp::); + + return sri; +} + + + + diff --git a/MS/works/service/UserFriendsService.h b/MS/works/service/UserFriendsService.h index 4a892b5..ef88d43 100644 --- a/MS/works/service/UserFriendsService.h +++ b/MS/works/service/UserFriendsService.h @@ -15,7 +15,8 @@ public: public: // 唯一对开接口 - mp::sri* imProve(mp::body* body); + mp::sri* addFriendImProve(mp::body* body); + mp::sri* FetchUserFriend(uint64_t account, const std::string& data); private: mp::sri* add_contact_person(mp::body* body); diff --git a/MS/works/service/UserService.cpp b/MS/works/service/UserService.cpp index 116dc83..cf05dad 100644 --- a/MS/works/service/UserService.cpp +++ b/MS/works/service/UserService.cpp @@ -58,7 +58,6 @@ void UserService::login_fun(const std::string& account, const std::string& passw printf("登陆失败\n"); sri->set_sri_msg("登陆失败!"); sri->set_sri_code(mp::MP_LOGIN_FAIL); - } } @@ -97,14 +96,12 @@ mp::sri *UserService::register_(mp::MP_SUB_TYPE subType, const std::string &phon if (subType == mp::MP_REQUEST_REGISTER_EMAIL) { // 将邮箱绑定到帐号上 state1 = userDb.bind_email(account.value(), phone_email); - sri->set_sri_email(phone_email); sri->set_sri_code(mp::MP_REGISTER_SUCCESS_EMAIL); } // 手机号方式 else { // 将手机绑定到帐号上 state1 = userDb.bind_phone(account.value(), phone_email); - sri->set_sri_phone(strtol(phone_email.c_str(), nullptr, 0)); sri->set_sri_code(mp::MP_REGISTER_SUCCESS_PHONE); } @@ -115,6 +112,8 @@ mp::sri *UserService::register_(mp::MP_SUB_TYPE subType, const std::string &phon // 注册成功就将取出的号在号池内删除 userDb.remove_pool_account(account.value()); } + + sri->set_sri_account(account.value()); } } diff --git a/TEST/main.cpp b/TEST/main.cpp index c02b3aa..53db633 100644 --- a/TEST/main.cpp +++ b/TEST/main.cpp @@ -27,6 +27,8 @@ TEST(JSON, MYSQL_TYPE_JSON) { TEST(add_friends, add_friends__Test) { auto i = UserFriendsDB(); i.add_friends(2725096176, 783556037); + i.add_friends(2725096176, 2725096176); + i.add_friends(783556037, 783556037); i.add_friends(783556037, 2725096176); } @@ -43,7 +45,7 @@ TEST(select_friends, select_friends_Test) { TEST(select_friends_all, select_friends_Test) { auto i = UserFriendsDB(); - auto doc = i.select_friends_all(2725096176); + auto doc = i.select_friends_all_json(2725096176); if (doc.has_value()) for (auto member = doc.value().MemberBegin(); member != doc.value().MemberEnd(); ++member) { auto belong_grouping = member->value.GetObject().FindMember("belong_grouping"); @@ -98,3 +100,13 @@ TEST(UserDB_select_user, UserDB_Ues_Test) { TEST(email_send, email_send__Test) { send_email_def("2725096176@qq.com", "AAKXT4"); } + +TEST(fecth_frinds, fecth_frinds_Test) { + auto i = UserFriendsDB(); + auto document = i.select_friends_all_json(783556037); + + if (document.has_value()) + for (auto mem = document->MemberBegin(); mem != document->MemberEnd(); ++mem) { + printf("%s", mem->name.GetString()); + } +}