tcp_model.cpp 2.1 KB

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