diff --git a/src/slic3r/GUI/DeviceManager.cpp b/src/slic3r/GUI/DeviceManager.cpp index 661e1f1fe..45c7be24c 100644 --- a/src/slic3r/GUI/DeviceManager.cpp +++ b/src/slic3r/GUI/DeviceManager.cpp @@ -1505,6 +1505,8 @@ int MachineObject::command_request_push_all(bool request_now) json j; j["pushing"]["sequence_id"] = std::to_string(MachineObject::m_sequence_id++); j["pushing"]["command"] = "pushall"; + j["pushing"]["version"] = 1; + j["pushing"]["push_target"] = 1; return this->publish_json(j.dump()); } @@ -4348,8 +4350,27 @@ void DeviceManager::set_agent(NetworkAgent* agent) m_agent = agent; } +void DeviceManager::keep_alive() +{ + MachineObject* obj = this->get_selected_machine(); + if (obj) { + if (obj->keep_alive_count == 0) { + obj->last_keep_alive = std::chrono::system_clock::now(); + } + obj->keep_alive_count++; + std::chrono::system_clock::time_point start = std::chrono::system_clock::now(); + auto internal = std::chrono::duration_cast(start - obj->last_keep_alive); + if (internal.count() > TIMEOUT_FOR_KEEPALIVE && internal.count() < 1000 * 60 * 60 * 300) { + BOOST_LOG_TRIVIAL(info) << "keep alive = " << internal.count() << ", count = " << obj->keep_alive_count; + obj->command_request_push_all(); + obj->last_keep_alive = start; + } + } +} + void DeviceManager::check_pushing() { + keep_alive(); MachineObject* obj = this->get_selected_machine(); if (obj && !obj->is_support_mqtt_alive) { std::chrono::system_clock::time_point start = std::chrono::system_clock::now(); diff --git a/src/slic3r/GUI/DeviceManager.hpp b/src/slic3r/GUI/DeviceManager.hpp index e6d085f1e..fa901c348 100644 --- a/src/slic3r/GUI/DeviceManager.hpp +++ b/src/slic3r/GUI/DeviceManager.hpp @@ -19,6 +19,7 @@ #define DISCONNECT_TIMEOUT 30000.f // milliseconds #define PUSHINFO_TIMEOUT 15000.f // milliseconds #define TIMEOUT_FOR_STRAT 20000.f // milliseconds +#define TIMEOUT_FOR_KEEPALIVE 5* 60 * 1000.f // milliseconds #define REQUEST_PUSH_MIN_TIME 15000.f // milliseconds #define REQUEST_START_MIN_TIME 15000.f // milliseconds #define EXTRUSION_OMIT_TIME 20000.f // milliseconds @@ -460,7 +461,9 @@ public: void set_lan_mode_connection_state(bool state) {m_lan_mode_connection_state = state;}; bool get_lan_mode_connection_state() {return m_lan_mode_connection_state;}; int parse_msg_count = 0; + int keep_alive_count = 0; std::chrono::system_clock::time_point last_update_time; /* last received print data from machine */ + std::chrono::system_clock::time_point last_keep_alive; /* last received print data from machine */ std::chrono::system_clock::time_point last_push_time; /* last received print push from machine */ std::chrono::system_clock::time_point last_request_push; /* last received print push from machine */ std::chrono::system_clock::time_point last_request_start; /* last received print push from machine */ @@ -895,6 +898,7 @@ public: std::map localMachineList; /* dev_id -> MachineObject*, localMachine SSDP */ std::map userMachineList; /* dev_id -> MachineObject* cloudMachine of User */ + void keep_alive(); void check_pushing(); MachineObject* get_default_machine();