zxs 5 zile în urmă
părinte
comite
edc695219f
1 a modificat fișierele cu 48 adăugiri și 34 ștergeri
  1. 48 34
      robot/robotics/nexus_net_client.hpp

+ 48 - 34
robot/robotics/nexus_net_client.hpp

@@ -484,33 +484,6 @@ namespace robotics {
                 }
                 return *result;
             }
-            static void logger(bool success, bool is_out, nexus_net_message value) {
-                static std::map<std::uint8_t, std::string> g_msg_type = {
-                    {(std::uint8_t)nexus_net_msg_type_enum::AUTHENTICATE,     "身份认证"},
-                    {(std::uint8_t)nexus_net_msg_type_enum::REPAUTHENTICATE,  "身份认证响应"},
-                    {(std::uint8_t)nexus_net_msg_type_enum::SUBSCRIBE,        "订阅"},
-                    {(std::uint8_t)nexus_net_msg_type_enum::REPSUBSCRIBE,     "订阅响应"},
-                    {(std::uint8_t)nexus_net_msg_type_enum::REMOVESUBSCRIBE,  "删除订阅"},
-                    {(std::uint8_t)nexus_net_msg_type_enum::PUBLISHER,        "发布"},
-                    {(std::uint8_t)nexus_net_msg_type_enum::REPPUBLISHER,     "发布响应"},
-                    {(std::uint8_t)nexus_net_msg_type_enum::HEARTBEAT,        "心跳"},
-                    {(std::uint8_t)nexus_net_msg_type_enum::DETAILS,          "详情"},
-                    {(std::uint8_t)nexus_net_msg_type_enum::REPDETAILS,       "详情响应"},
-                    {(std::uint8_t)nexus_net_msg_type_enum::FOLLOW,           "关注"},
-                    {(std::uint8_t)nexus_net_msg_type_enum::REPFOLLOW,        "关注响应"}
-                };
-                auto config = read();
-                auto it = std::find_if(config.loggers.begin(), config.loggers.end(), [=](auto& it) {
-                    return it.type == value.msg_type && it.enable; });
-                if (it != config.loggers.end()) {
-                    if (success) {
-                        LOG_INFO << (is_out ? "接收成功" : "发送成功") << ",消息类型:" << g_msg_type[value.msg_type] << " 消息ID:" << value.msg_id << " 事件:" << value.route << " 路由:" << value.routes;
-                    }
-                    else {
-                        LOG_ERROR << (is_out ? "接收失败" : "发送失败") << ",消息类型:" << g_msg_type[value.msg_type] << " 消息ID:" << value.msg_id << " 事件:" << value.route << " 路由:" << value.routes;
-                    }
-                }
-            }
         };
         /**
          * @brief 客户端
@@ -859,6 +832,14 @@ namespace robotics {
 			 * @brief 关注事件
              */
             v3::delegates<std::vector<std::string>>                     follow_event;
+            /**
+             * @brief 错误
+             */
+            v3::delegates<std::string const&>                           error_event;
+            /**
+             * @brief 
+             */
+            v3::delegates<std::string const&>                           info_event;
         private:
             /**
              * @brief 构造
@@ -887,7 +868,7 @@ namespace robotics {
                     data.routes.pop_back();
                 }
                 client_.send(data, [=]() {
-                    nexus_net_config::logger(!asio2::get_last_error(), false, data); });
+                    logger(!asio2::get_last_error(), false, data); });
             }
             /**
              * @brief 身份认证
@@ -928,6 +909,40 @@ namespace robotics {
 				msg.args << follow_list_;
                 send(msg);
             }
+            /**
+             * @brief 日志
+             * @param success 
+             * @param is_out 
+             * @param value 
+             */
+            void logger(bool success, bool is_out, nexus_net_message value) {
+                static std::map<std::uint8_t, std::string> g_msg_type = {
+                    {(std::uint8_t)nexus_net_msg_type_enum::AUTHENTICATE,     "身份认证"},
+                    {(std::uint8_t)nexus_net_msg_type_enum::REPAUTHENTICATE,  "身份认证响应"},
+                    {(std::uint8_t)nexus_net_msg_type_enum::SUBSCRIBE,        "订阅"},
+                    {(std::uint8_t)nexus_net_msg_type_enum::REPSUBSCRIBE,     "订阅响应"},
+                    {(std::uint8_t)nexus_net_msg_type_enum::REMOVESUBSCRIBE,  "删除订阅"},
+                    {(std::uint8_t)nexus_net_msg_type_enum::PUBLISHER,        "发布"},
+                    {(std::uint8_t)nexus_net_msg_type_enum::REPPUBLISHER,     "发布响应"},
+                    {(std::uint8_t)nexus_net_msg_type_enum::HEARTBEAT,        "心跳"},
+                    {(std::uint8_t)nexus_net_msg_type_enum::DETAILS,          "详情"},
+                    {(std::uint8_t)nexus_net_msg_type_enum::REPDETAILS,       "详情响应"},
+                    {(std::uint8_t)nexus_net_msg_type_enum::FOLLOW,           "关注"},
+                    {(std::uint8_t)nexus_net_msg_type_enum::REPFOLLOW,        "关注响应"}
+                };
+                auto config = nexus_net_config::read();
+                auto it = std::find_if(config.loggers.begin(), config.loggers.end(), [=](auto& it) {
+                    return it.type == value.msg_type && it.enable; });
+                if (it != config.loggers.end()) {
+                    std::string text = fmt::format("{}{},消息类型:{},消息ID:{},事件:{},路由:{}", (is_out ? "接收" : "发送"), (success ? "成功" : "失败"), g_msg_type[value.msg_type], value.msg_id, value.route, v3::utils::join(value.routes, ","));
+                    if (success) {
+                        info_event(text);
+                    }
+                    else {
+                        error_event(text);
+                    }
+                }
+            }
         private:
             void on_connect(bool success, std::string const& msg) {
                 if (success) {
@@ -943,8 +958,7 @@ namespace robotics {
                 is_heartbeat_ = false;
             }
             void do_work_nexus_net_message(nexus_net_message data) {
-                nexus_net_config::logger(true, true, data);
-                
+                logger(true, true, data);
                 try {
                     switch ((nexus_net_msg_type_enum)data.msg_type) {
                     case nexus_net_msg_type_enum::REPAUTHENTICATE:  on_authenticate(data);  break;
@@ -955,7 +969,7 @@ namespace robotics {
                     }
                 }
                 catch (std::exception const& ec) {
-                    LOG_ERROR << ec;
+                    error_event(ec.what());
                 }
             }
             void on_timeout() {
@@ -966,11 +980,11 @@ namespace robotics {
                 bool success = false;
                 try {
                     data.args >> success;
+                    info_event(std::string("订阅状态:") + (success ? "成功" : "失败"));
                 }
                 catch (std::exception const& ec) {
-					LOG_ERROR << ec;
+                    error_event(std::string("订阅错误:") + ec.what());
                 }
-                LOG_INFO << "订阅状态:" << (success ? "成功" : "失败");
             }
             /**
              * @brief 授权响应
@@ -1033,7 +1047,7 @@ namespace robotics {
                     follow_event(follows);
                 }
                 catch (std::exception const& ec) {
-                    LOG_ERROR << "解析关注节点失败:" << ec;
+                    error_event(std::string("解析关注节点失败:") + ec.what());
                 }
 			}
         private: