ENH: add keep alive logic

Change-Id: I6e6916d22e32983cc885586e2716b52b5ed1086f
Signed-off-by: Stone Li <stone.li@bambulab.com>
This commit is contained in:
Stone Li 2023-07-07 11:52:31 +08:00 committed by Lane.Wei
parent f525785338
commit 94c4ef6105
2 changed files with 25 additions and 0 deletions

View file

@ -1505,6 +1505,8 @@ int MachineObject::command_request_push_all(bool request_now)
json j; json j;
j["pushing"]["sequence_id"] = std::to_string(MachineObject::m_sequence_id++); j["pushing"]["sequence_id"] = std::to_string(MachineObject::m_sequence_id++);
j["pushing"]["command"] = "pushall"; j["pushing"]["command"] = "pushall";
j["pushing"]["version"] = 1;
j["pushing"]["push_target"] = 1;
return this->publish_json(j.dump()); return this->publish_json(j.dump());
} }
@ -4348,8 +4350,27 @@ void DeviceManager::set_agent(NetworkAgent* agent)
m_agent = 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<std::chrono::milliseconds>(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() void DeviceManager::check_pushing()
{ {
keep_alive();
MachineObject* obj = this->get_selected_machine(); MachineObject* obj = this->get_selected_machine();
if (obj && !obj->is_support_mqtt_alive) { if (obj && !obj->is_support_mqtt_alive) {
std::chrono::system_clock::time_point start = std::chrono::system_clock::now(); std::chrono::system_clock::time_point start = std::chrono::system_clock::now();

View file

@ -19,6 +19,7 @@
#define DISCONNECT_TIMEOUT 30000.f // milliseconds #define DISCONNECT_TIMEOUT 30000.f // milliseconds
#define PUSHINFO_TIMEOUT 15000.f // milliseconds #define PUSHINFO_TIMEOUT 15000.f // milliseconds
#define TIMEOUT_FOR_STRAT 20000.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_PUSH_MIN_TIME 15000.f // milliseconds
#define REQUEST_START_MIN_TIME 15000.f // milliseconds #define REQUEST_START_MIN_TIME 15000.f // milliseconds
#define EXTRUSION_OMIT_TIME 20000.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;}; 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;}; bool get_lan_mode_connection_state() {return m_lan_mode_connection_state;};
int parse_msg_count = 0; 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_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_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_push; /* last received print push from machine */
std::chrono::system_clock::time_point last_request_start; /* 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<std::string, MachineObject*> localMachineList; /* dev_id -> MachineObject*, localMachine SSDP */ std::map<std::string, MachineObject*> localMachineList; /* dev_id -> MachineObject*, localMachine SSDP */
std::map<std::string, MachineObject*> userMachineList; /* dev_id -> MachineObject* cloudMachine of User */ std::map<std::string, MachineObject*> userMachineList; /* dev_id -> MachineObject* cloudMachine of User */
void keep_alive();
void check_pushing(); void check_pushing();
MachineObject* get_default_machine(); MachineObject* get_default_machine();