diff --git a/trick_source/web/CivetServer/include/VariableServerSession.hh b/trick_source/web/CivetServer/include/VariableServerSession.hh index 56408413..7ccfdeb6 100644 --- a/trick_source/web/CivetServer/include/VariableServerSession.hh +++ b/trick_source/web/CivetServer/include/VariableServerSession.hh @@ -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 ); diff --git a/trick_source/web/CivetServer/src/VariableServerSession.cpp b/trick_source/web/CivetServer/src/VariableServerSession.cpp index f56a8f22..6a498db3 100644 --- a/trick_source/web/CivetServer/src/VariableServerSession.cpp +++ b/trick_source/web/CivetServer/src/VariableServerSession.cpp @@ -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