tcp_model.cpp 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  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. #include "service/BusinessConfig.h"
  12. std::string getTcpModelString(TcpModel model){
  13. Json::Value root;
  14. if (model.tid != ""){
  15. root["tid"] = model.tid;
  16. }
  17. // else {
  18. // root["tid"] = base::format("t%d",TimeHelper::getCurrentTime());
  19. // }
  20. root["type"] = model.type;
  21. root["action"] = model.action;
  22. if (model.from_id>0){
  23. root["fromId"] = model.from_id;
  24. }
  25. if (model.to_id>0){
  26. root["toId"] = model.to_id;
  27. }
  28. //拼接data
  29. if (model.json != 0){
  30. root["data"] = model.json;
  31. } else if (model.data!=""){
  32. root["data"] = model.data;
  33. }
  34. Json::FastWriter writer;
  35. const std::string jsonStr = writer.write(root);
  36. //LOGD("string json = %s",jsonStr.c_str());
  37. return jsonStr;
  38. }
  39. TcpModel getTcpModel(byte* inBytes){
  40. //解析json
  41. Json::Reader reader(Json::Features::strictMode());
  42. Json::Value root;
  43. TcpModel tcpModel;
  44. const char* str = reinterpret_cast<const char*>(inBytes);
  45. if (reader.parse(str, root, false)){
  46. if (root.isMember("tid")){
  47. tcpModel.tid = root["tid"].asString();
  48. }
  49. tcpModel.type = root["type"].asString();
  50. tcpModel.action = root["action"].asString();
  51. if (root.isMember("fromId")){
  52. tcpModel.from_id = root["fromId"].asInt();
  53. }
  54. if (root.isMember("toId")){
  55. tcpModel.to_id = root["toId"].asInt();
  56. }
  57. if (root.isMember("data")){
  58. LOGD("tcp model str2 = %s", str);
  59. if (root["data"].isInt()){
  60. std::string s = std::to_string(root["data"].asInt());
  61. tcpModel.data = s.c_str();
  62. } else if (root["data"].isString()){
  63. std::string s = root["data"].asString();
  64. tcpModel.data = s.c_str();
  65. } else {
  66. tcpModel.json = root["data"];
  67. }
  68. }
  69. } else {
  70. LOGD("can not parse json: %s", str);
  71. tcpModel.type = TcpType::OTHER;
  72. tcpModel.data = str;
  73. }
  74. return tcpModel;
  75. }
  76. void sendTcpModel(TcpModel tcpModel) {
  77. std::string req = getTcpModelString(tcpModel);
  78. LOGD("TCP : %s",req.c_str());
  79. //回调注册
  80. TcpCallback callback;
  81. callback.tid = tcpModel.tid;
  82. callback.jsonStr = req;
  83. callback.onSuccess = [](Json::Value json){
  84. LOGD("event callback success");
  85. return 0;
  86. };
  87. callback.onFalied = [](Json::Value json){
  88. LOGD("event callback failed");
  89. return 0;
  90. };
  91. TcpClient::instance()->sendMsgWithCb(req.c_str(), callback);
  92. }