diff --git a/f8/utils.cc b/f8/utils.cc index 56e2cc3..3d3c9f8 100644 --- a/f8/utils.cc +++ b/f8/utils.cc @@ -18,362 +18,16 @@ namespace f8 { - bool ReadCsvMetaFile(const std::string& filename, - google::protobuf::Message* prototype, - std::function push_back_func) - { - const google::protobuf::Descriptor* descriptor = prototype->GetDescriptor(); - const google::protobuf::Reflection* reflection = prototype->GetReflection(); - - a8::CsvReader reader; - reader.Load(filename); - while (reader.NextLine()) { - google::protobuf::Message* msg = prototype->New(); - - for (int i = 0; i < descriptor->field_count(); ++i) { - const google::protobuf::FieldDescriptor* field_desc = descriptor->field(i); - const std::string& field_name = field_desc->name(); - if (field_name.empty() || field_name[0] == '_') { - continue; - } - if (!reader.KeyExists(field_name) && field_desc->is_optional()) { - continue; - } - - switch (field_desc->cpp_type()) { - case google::protobuf::FieldDescriptor::CPPTYPE_STRING: - { - reflection->SetString(msg, field_desc, reader.GetValue(field_name)); - } - break; - case google::protobuf::FieldDescriptor::CPPTYPE_INT32: - { - reflection->SetInt32(msg, field_desc, reader.GetValue(field_name)); - } - break; - case google::protobuf::FieldDescriptor::CPPTYPE_UINT32: - { - reflection->SetUInt32(msg, field_desc, reader.GetValue(field_name)); - } - break; - case google::protobuf::FieldDescriptor::CPPTYPE_INT64: - { - reflection->SetInt64(msg, field_desc, reader.GetValue(field_name)); - } - break; - case google::protobuf::FieldDescriptor::CPPTYPE_UINT64: - { - reflection->SetUInt64(msg, field_desc, reader.GetValue(field_name)); - } - break; - case google::protobuf::FieldDescriptor::CPPTYPE_FLOAT: - { - reflection->SetFloat(msg, field_desc, (double)reader.GetValue(field_name)); - } - break; - case google::protobuf::FieldDescriptor::CPPTYPE_DOUBLE: - { - reflection->SetDouble(msg, field_desc, reader.GetValue(field_name)); - } - break; - default: - { - abort(); - } - break; - }//end switch - }//end for - push_back_func(msg); - delete msg; - } - - return true; - } - - static bool JsonToMessage(a8::XObject& jsonobj, google::protobuf::Message* msg) - { - const google::protobuf::Descriptor* descriptor = msg->GetDescriptor(); - const google::protobuf::Reflection* reflection = msg->GetReflection(); - - for (int i = 0; i < descriptor->field_count(); ++i) { - const google::protobuf::FieldDescriptor* field_desc = descriptor->field(i); - const std::string& field_name = field_desc->name(); - if (field_name.empty() || field_name[0] == '_') { - continue; - } - if (!jsonobj.HasKey(field_name) && field_desc->is_optional()) { - continue; - } - - if (field_desc->is_repeated()) { - std::shared_ptr repeated_field = jsonobj.At(field_name); - if (!repeated_field) { - continue; - } - for (int i = 0; i < repeated_field->Size(); ++i) { - auto field_value = repeated_field->At(i); - switch (field_desc->cpp_type()) { - case google::protobuf::FieldDescriptor::CPPTYPE_STRING: - { - reflection->AddString(msg, field_desc, field_value->AsXValue()); - } - break; - case google::protobuf::FieldDescriptor::CPPTYPE_INT32: - { - reflection->AddInt32(msg, field_desc, field_value->AsXValue()); - } - break; - case google::protobuf::FieldDescriptor::CPPTYPE_UINT32: - { - reflection->AddUInt32(msg, field_desc, field_value->AsXValue()); - } - break; - case google::protobuf::FieldDescriptor::CPPTYPE_INT64: - { - reflection->AddInt64(msg, field_desc, field_value->AsXValue()); - } - break; - case google::protobuf::FieldDescriptor::CPPTYPE_UINT64: - { - reflection->AddUInt64(msg, field_desc, field_value->AsXValue()); - } - break; - case google::protobuf::FieldDescriptor::CPPTYPE_FLOAT: - { - reflection->AddFloat(msg, field_desc, (double)field_value->AsXValue()); - } - break; - case google::protobuf::FieldDescriptor::CPPTYPE_DOUBLE: - { - reflection->AddDouble(msg, field_desc, field_value->AsXValue()); - } - break; - case google::protobuf::FieldDescriptor::CPPTYPE_MESSAGE: - { - google::protobuf::Message* p = reflection->AddMessage(msg, field_desc); - JsonToMessage(*field_value, p); - } - break; - default: - { - abort(); - } - break; - }//end switch - } - } else { - switch (field_desc->cpp_type()) { - case google::protobuf::FieldDescriptor::CPPTYPE_STRING: - { - reflection->SetString(msg, field_desc, jsonobj.At(field_name)->AsXValue()); - } - break; - case google::protobuf::FieldDescriptor::CPPTYPE_INT32: - { - reflection->SetInt32(msg, field_desc, jsonobj.At(field_name)->AsXValue()); } - break; - case google::protobuf::FieldDescriptor::CPPTYPE_UINT32: - { - reflection->SetUInt32(msg, field_desc, jsonobj.At(field_name)->AsXValue()); - } - break; - case google::protobuf::FieldDescriptor::CPPTYPE_INT64: - { - reflection->SetInt64(msg, field_desc, jsonobj.At(field_name)->AsXValue()); - } - break; - case google::protobuf::FieldDescriptor::CPPTYPE_UINT64: - { - reflection->SetUInt64(msg, field_desc, jsonobj.At(field_name)->AsXValue()); - } - break; - case google::protobuf::FieldDescriptor::CPPTYPE_FLOAT: - { - reflection->SetFloat(msg, field_desc, (double)jsonobj.At(field_name)->AsXValue()); - } - break; - case google::protobuf::FieldDescriptor::CPPTYPE_DOUBLE: - { - reflection->SetDouble(msg, field_desc, jsonobj.At(field_name)->AsXValue()); - } - break; - case google::protobuf::FieldDescriptor::CPPTYPE_MESSAGE: - { - google::protobuf::Message* p = reflection->MutableMessage(msg, field_desc); - JsonToMessage(*jsonobj.At(field_name), p); - } - break; - default: - { - abort(); - } - break; - }//end switch - } - } - return true; - } - - static bool MessageToJson(const google::protobuf::Message* msg, a8::MutableXObject& jsonobj) - { - const google::protobuf::Descriptor* descriptor = msg->GetDescriptor(); - const google::protobuf::Reflection* reflection = msg->GetReflection(); - - for (int i = 0; i < descriptor->field_count(); ++i) { - const google::protobuf::FieldDescriptor* field_desc = descriptor->field(i); - const std::string& field_name = field_desc->name(); - - if (field_desc->is_repeated()) { - a8::MutableXObject* array_obj = a8::MutableXObject::NewArray(); - std::shared_ptr repeated_field = jsonobj.At(field_name); - continue; - for (int i = 0; i < reflection->FieldSize(*msg, field_desc); ++i) { - switch (field_desc->cpp_type()) { - case google::protobuf::FieldDescriptor::CPPTYPE_BOOL: - { - array_obj->Push(reflection->GetRepeatedBool(*msg, field_desc, i)); - } - break; - case google::protobuf::FieldDescriptor::CPPTYPE_STRING: - { - array_obj->Push(reflection->GetRepeatedString(*msg, field_desc, i)); - } - break; - case google::protobuf::FieldDescriptor::CPPTYPE_INT32: - { - array_obj->Push(reflection->GetRepeatedInt32(*msg, field_desc, i)); - } - break; - case google::protobuf::FieldDescriptor::CPPTYPE_UINT32: - { - array_obj->Push(reflection->GetRepeatedUInt32(*msg, field_desc, i)); - } - break; - case google::protobuf::FieldDescriptor::CPPTYPE_INT64: - { - array_obj->Push(reflection->GetRepeatedInt64(*msg, field_desc, i)); - } - break; - case google::protobuf::FieldDescriptor::CPPTYPE_UINT64: - { - array_obj->Push(reflection->GetRepeatedUInt64(*msg, field_desc, i)); - } - break; - case google::protobuf::FieldDescriptor::CPPTYPE_FLOAT: - { - array_obj->Push(reflection->GetRepeatedFloat(*msg, field_desc, i)); - } - break; - case google::protobuf::FieldDescriptor::CPPTYPE_DOUBLE: - { - array_obj->Push(reflection->GetRepeatedDouble(*msg, field_desc, i)); - } - break; - case google::protobuf::FieldDescriptor::CPPTYPE_MESSAGE: - { - a8::MutableXObject* p = a8::MutableXObject::NewObject(); - MessageToJson(&reflection->GetRepeatedMessage(*msg, field_desc, i), - *p - ); - array_obj->Push(*p); - delete p; - } - break; - default: - { - abort(); - } - break; - }//end switch - } - jsonobj.SetVal(field_name, *array_obj); - delete array_obj; - } else { - switch (field_desc->cpp_type()) { - case google::protobuf::FieldDescriptor::CPPTYPE_BOOL: - { - jsonobj.SetVal(field_name, reflection->GetBool(*msg, field_desc)); - } - break; - case google::protobuf::FieldDescriptor::CPPTYPE_STRING: - { - jsonobj.SetVal(field_name, reflection->GetString(*msg, field_desc)); - } - break; - case google::protobuf::FieldDescriptor::CPPTYPE_INT32: - { - jsonobj.SetVal(field_name, reflection->GetInt32(*msg, field_desc)); - } - break; - case google::protobuf::FieldDescriptor::CPPTYPE_UINT32: - { - jsonobj.SetVal(field_name, reflection->GetUInt32(*msg, field_desc)); - } - break; - case google::protobuf::FieldDescriptor::CPPTYPE_INT64: - { - jsonobj.SetVal(field_name, reflection->GetInt64(*msg, field_desc)); - } - break; - case google::protobuf::FieldDescriptor::CPPTYPE_UINT64: - { - jsonobj.SetVal(field_name, reflection->GetUInt64(*msg, field_desc)); - } - break; - case google::protobuf::FieldDescriptor::CPPTYPE_FLOAT: - { - jsonobj.SetVal(field_name, reflection->GetFloat(*msg, field_desc)); - } - break; - case google::protobuf::FieldDescriptor::CPPTYPE_DOUBLE: - { - jsonobj.SetVal(field_name, reflection->GetDouble(*msg, field_desc)); - } - break; - case google::protobuf::FieldDescriptor::CPPTYPE_MESSAGE: - { - a8::MutableXObject* p = a8::MutableXObject::NewObject(); - MessageToJson(&reflection->GetMessage(*msg, field_desc), - *p - ); - jsonobj.SetVal(field_name, *p); - } - break; - default: - { - abort(); - } - break; - }//end switch - } - } - return true; - } - - bool ReadJsonMetaFile(const std::string& filename, - google::protobuf::Message* prototype, - std::function push_back_func) - { - a8::XObject json_reader; - json_reader.ReadFromJsonFile(filename); - for (int i = 0; i < json_reader.Size(); ++i) { - std::shared_ptr p = json_reader.At(i); - google::protobuf::Message* msg = prototype->New(); - JsonToMessage(*p, msg); - push_back_func(msg); - delete msg; - } - return true; - } std::string PbToJson(const google::protobuf::Message* msg) { - std::string data; - a8::MutableXObject* p = a8::MutableXObject::NewObject(); - MessageToJson(msg, *p); - p->ToJsonStr(data); - delete p; - return data; + std::string json; + google::protobuf::util::JsonPrintOptions options; + options.add_whitespace = true; + options.always_print_primitive_fields = true; + options.preserve_proto_field_names = true; + MessageToJsonString(*msg, &json, options).ok(); + return json; } void InitMysqlConnection(a8::mysql::Query* query) @@ -464,22 +118,6 @@ namespace f8 return true; } - bool LoginCheck(const std::string& accountid, const std::string& sessionid) - { - std::vector strings; - a8::Split(sessionid, strings, '_'); - if (strings.size() < 4) { - return false; - } - if (IsOnlineEnv()) { - //session_createtime account_registertime md51 md52 - std::string md5_str = accountid + "f3a6a9a5-217a-4079-ab99-b5d69b8212be" + - strings[1] + strings[0]; - return a8::openssl::md5(md5_str) == strings[2]; - } - return true; - } - int ExtractGameIdFromAccountId(const std::string& accountid) { std::vector strings; @@ -535,15 +173,4 @@ namespace f8 return true; } - std::string PbToJson(google::protobuf::Message* pbmsg) - { - std::string json; - google::protobuf::util::JsonPrintOptions options; - options.add_whitespace = true; - options.always_print_primitive_fields = true; - options.preserve_proto_field_names = true; - MessageToJsonString(*pbmsg, &json, options).ok(); - return json; - } - } diff --git a/f8/utils.h b/f8/utils.h index 87bed9c..ddf2890 100644 --- a/f8/utils.h +++ b/f8/utils.h @@ -4,15 +4,6 @@ #include #include -namespace google -{ - namespace protobuf - { - class Descriptor; - class Message; - } -} - namespace a8 { namespace mysql @@ -24,29 +15,6 @@ namespace a8 namespace f8 { - typedef void (*ReadCsvMetaFileCallback)(const std::string&); - - bool ReadCsvMetaFile(const std::string& filename, - google::protobuf::Message* prototype, - std::function push_back_func); - - template - bool ReadCsvMetaFile(const std::string& filename, std::list& meta_list, - ReadCsvMetaFileCallback callback_func = nullptr) - { - if (callback_func) { - callback_func(filename); - } - T dummy; - return ReadCsvMetaFile(filename, - &dummy, - [&meta_list] (google::protobuf::Message* msg) - { - T t; - t.CopyFrom(*msg); - meta_list.emplace_back(t); - }); - } template bool ReadCsvMetaFile(const std::string& filename, std::vector& meta_list) @@ -105,68 +73,11 @@ namespace f8 } meta_list.push_back(obj); } - } - - bool ReadJsonMetaFile(const std::string& filename, - google::protobuf::Message* prototype, - std::function push_back_func); - - template - bool ReadJsonMetaFile(const std::string& filename, std::list& meta_list) - { - T dummy; - return ReadJsonMetaFile(filename, - &dummy, - [&meta_list] (google::protobuf::Message* msg) - { - T t; - t.CopyFrom(*msg); - meta_list.emplace_back(t); - }); + return true; } std::string PbToJson(const google::protobuf::Message* msg); - template - static void RepeatedFieldToVector(const T1& t1, T2& t2) - { - t2.clear(); - for (auto& val : t1) { - t2.push_back(val); - } - } - - template - static void RepeatedFieldToSet(const T1& t1, T2& t2) - { - t2.clear(); - for (auto& val : t1) { - t2.insert(val); - } - } - - template - static void VectorToRepeatedField(const T1& t1, T2& t2) - { - t2.Clear(); - for (auto& val : t1) { - *t2.Add() = val; - } - } - - template - static void SetToRepeatedField(const T1& t1, T2& t2) - { - t2.Clear(); - for (auto& val : t1) { - *t2.Add() = val; - } - } - void InitMysqlConnection(a8::mysql::Query* query); void CheckMysqlConnection(a8::mysql::Connection* conn, a8::mysql::Query* query, std::string dbhost, int port, std::string dbuser, std::string dbpasswd, std::string gamedb); @@ -174,7 +85,6 @@ namespace f8 bool CheckRegisterTimeInSessionId(const std::string& accountid, const std::string& sessionid); time_t ExtractRegisterTimeFromSessionId(const std::string& sessionid); bool IsValidSessionId(const std::string& accountid, const std::string& sessionid); - bool LoginCheck(const std::string& accountid, const std::string& sessionid); int ExtractGameIdFromAccountId(const std::string& accountid); int ExtractChannelIdFromAccountId(const std::string& accountid); @@ -182,5 +92,4 @@ namespace f8 bool IsTestEnv(); bool IsValidNormalConfig(a8::XObject& conf, std::vector fields); - std::string PbToJson(google::protobuf::Message* pbmsg); }