1720 websocket freeze issue (#1724)

* fixed web server freeze issue

* Revert "fixed web server freeze issue"

This reverts commit 7883453f6a.

* Fixed Webserver freeze issue

---------

Co-authored-by: Marcus Rockwell <marcusrockwell@gmail.com>
This commit is contained in:
Mrockwell2 2024-06-27 11:25:22 -04:00 committed by GitHub
parent abddad8424
commit 7bc531273c
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 22 additions and 2 deletions

View File

@ -13,6 +13,7 @@ PURPOSE: (Represent the state of a variable server websocket connection.)
#endif
#include "trick/WebSocketSession.hh"
#include "trick/Executive.hh"
#include "VariableServerVariable.hh"
class VariableServerSession : public WebSocketSession {
@ -38,6 +39,7 @@ class VariableServerSession : public WebSocketSession {
int sendSieMessage(void);
int sendUnitsMessage(const char* vname);
REF2* make_error_ref(const char* in_name);
void updateNextTime(long long simTimeTics);
double stageTime;
bool dataStaged;
@ -45,6 +47,7 @@ class VariableServerSession : public WebSocketSession {
bool cyclicSendEnabled;
long long nextTime;
long long intervalTimeTics;
SIM_MODE mode;
};
WebSocketSession* makeVariableServerSession( struct mg_connection *nc );

View File

@ -24,6 +24,7 @@ VariableServerSession::VariableServerSession( struct mg_connection *nc ) : WebSo
intervalTimeTics = exec_get_time_tic_value(); // Default time interval is one second.
nextTime = 0;
cyclicSendEnabled = false;
mode = Initialization;
}
// DESTRUCTOR
@ -31,6 +32,10 @@ VariableServerSession::~VariableServerSession() {
clear();
}
void VariableServerSession::updateNextTime(long long simTimeTics) {
nextTime = (simTimeTics - (simTimeTics % intervalTimeTics) + intervalTimeTics);
}
/* Base class virtual function: marshallData
When HTTP_Server::time_homogeneous is set, WebSocketSession::marshallData() is
called from the main sim thread in a "top_of_frame" job, to ensure that all of
@ -41,11 +46,23 @@ VariableServerSession::~VariableServerSession() {
(The specified period between messages).
*/
void VariableServerSession::marshallData() {
long long simulation_time_tics = exec_get_time_tics() + exec_get_freeze_time_tics();
long long simulation_time_tics = exec_get_time_tics();
SIM_MODE new_mode = the_exec->get_mode();
if(new_mode == Freeze) {
simulation_time_tics += exec_get_freeze_time_tics();
}
if(new_mode != mode) {
mode = new_mode;
updateNextTime(simulation_time_tics);
}
if ( cyclicSendEnabled && ( simulation_time_tics >= nextTime )) {
stageValues();
nextTime = (simulation_time_tics - (simulation_time_tics % intervalTimeTics) + intervalTimeTics);
updateNextTime(simulation_time_tics);
}
}
/* Base class virtual function: sendMessage