tcp_model.cpp 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. /*
  2. * tcp_model.cpp
  3. *
  4. * Created on: 2022年10月6日
  5. * Author: Allen
  6. */
  7. #include "tcp_model.h"
  8. #include "json/json.h"
  9. #include <utils/TimeHelper.h>
  10. #include "base/strings.hpp"
  11. std::string getTcpModelString(TcpModel model){
  12. Json::Value root;
  13. if (model.tid != ""){
  14. root["tid"] = model.tid;
  15. } else {
  16. root["tid"] = base::format("t%d",TimeHelper::getCurrentTime());
  17. }
  18. root["type"] = model.type;
  19. root["action"] = model.action;
  20. if (model.from_id>0){
  21. root["fromId"] = model.from_id;
  22. }
  23. if (model.to_id>0){
  24. root["toId"] = model.to_id;
  25. }
  26. //拼接data
  27. if (model.json != 0){
  28. root["data"] = model.json;
  29. } else if (model.data!=""){
  30. root["data"] = model.data;
  31. }
  32. Json::FastWriter writer;
  33. const std::string jsonStr = writer.write(root);
  34. //LOGD("string json = %s",jsonStr.c_str());
  35. return jsonStr;
  36. }
  37. TcpModel getTcpModel(byte* inBytes){
  38. //解析json
  39. Json::Reader reader;
  40. Json::Value root;
  41. TcpModel tcpModel;
  42. const char* str = reinterpret_cast<const char*>(inBytes);
  43. if (reader.parse(str, root, false)){
  44. if (root.isMember("tid")){
  45. tcpModel.tid = root["tid"].asString();
  46. }
  47. tcpModel.type = root["type"].asString();
  48. tcpModel.action = root["action"].asString();
  49. if (root.isMember("fromId")){
  50. tcpModel.from_id = root["fromId"].asInt();
  51. }
  52. if (root.isMember("toId")){
  53. tcpModel.to_id = root["toId"].asInt();
  54. }
  55. if (root.isMember("data")){
  56. if (root["data"].isInt()){
  57. std::string s = std::to_string(root["data"].asInt());
  58. tcpModel.data = s.c_str();
  59. } else {
  60. tcpModel.json = root["data"];
  61. }
  62. }
  63. } else {
  64. LOGD("can not parse json: %s", str);
  65. tcpModel.type = TcpType::OTHER;
  66. tcpModel.data = str;
  67. }
  68. return tcpModel;
  69. }