trick/trick_source/sim_services/MonteCarlo/MonteCarlo_slave.cpp
Alex Lin 19025d77ad Standardize directory names
Reorganized.  Created a new top level include directory that will hold all of Trick's header files. Moved all of the Trick headers to this directory.  Created a libexec directory that holds all of the executables that users don't need to execute directly.  Changed all of the executables remaining in bin to start with "trick-".  In the sim_services directories changed all source files to find the Trick headers in their new location.  Since all of the include files are gone in sim_services, removed the src directories as well, moving all of the source files up a level.  Moved the makefiles, docs, man, and other architecture independent files into a top level share directory.  Renamed lib_${TRICK_HOST_CPU} to lib64 or lib depending on the platform we're currently on.

refs #63
2015-06-09 08:44:42 -05:00

71 lines
3.0 KiB
C++

#include "trick/MonteCarlo.hh"
#include "trick/message_proto.h"
#include "trick/message_type.h"
#include "trick/tc_proto.h"
/** @par Detailed Design: */
int Trick::MonteCarlo::slave() {
/** <li> Forever: */
while (true) {
if (verbosity >= ALL) {
message_publish(MSG_INFO, "Monte [%s:%d] : Waiting for new run.\n",
machine_name.c_str(), slave_id) ;
}
/** <ul><li> On a blocking read, wait for a MonteSlave::Command from the master. */
if (tc_accept(&listen_device, &connection_device) != TC_SUCCESS) {
if (verbosity >= ERROR) {
message_publish(MSG_ERROR, "Monte [%s:%d] : Lost connection to Master.\nShutting down.\n",
machine_name.c_str(), slave_id) ;
}
slave_shutdown();
}
int command;
if (tc_read(&connection_device, (char *)&command, (int)sizeof(command)) != (int)sizeof(command)) {
if (verbosity >= ERROR) {
message_publish(MSG_ERROR, "Monte [%s:%d] : Lost connection to Master while receiving instructions.\nShutting down.\n",
machine_name.c_str(), slave_id) ;
}
slave_shutdown();
}
switch (command = ntohl(command)) {
int return_value;
case MonteSlave::PROCESS_RUN:
/**
* <ul><li> MonteSlave::PROCESS_RUN: Call #slave_process_run. This will return a non-zero value when run in a
* child process to indicate that this function should return so that the sim can complete.
*/
return_value = slave_process_run();
if (return_value != 0) {
return return_value;
}
break;
case MonteSlave::SHUTDOWN:
/** <li> MonteSlave::SHUTDOWN: Call #slave_shutdown. */
if (verbosity >= INFORMATIONAL) {
message_publish(MSG_INFO, "Monte [%s:%d] : Shutdown command received from Master.\nShutting down.\n",
machine_name.c_str(), slave_id) ;
}
slave_shutdown();
break;
case MonteSlave::DIE:
/** <li> MonteSlave::DIE: Call #slave_die. */
if (verbosity >= INFORMATIONAL) {
message_publish(MSG_INFO, "Monte [%s:%d] : Killed by Master.\n",
machine_name.c_str(), slave_id) ;
}
slave_die();
break;
default:
/** <li> default: Call #slave_shutdown. */
if (verbosity >= ERROR) {
message_publish(MSG_ERROR, "Monte [%s:%d] : Unrecognized command %d received from Master.\nShutting down.\n",
machine_name.c_str(), slave_id, command) ;
}
slave_shutdown();
break;
}
}
}