git-svn-id: https://svn.microneil.com/svn/CodeDweller/branches/adeniz_1@36 d34b734f-a00e-4b39-a726-e4eeb87269abadeniz_1
namespace CodeDweller { | namespace CodeDweller { | ||||
Service::Service() : | Service::Service() : | ||||
lastMessage(Message::None) { | |||||
pauseReceived(false), | |||||
resumeReceived(false), | |||||
restartReceived(false), | |||||
stopReceived(false) { | |||||
} | } | ||||
int Service::main(int argc, char *argv[]) { | int Service::main(int argc, char *argv[]) { | ||||
int status; | int status; | ||||
status = run(); | status = run(); | ||||
// Send a Stop message so that messageThread exits. | |||||
pthread_kill(messageThread.native_handle(), SIGTERM); | |||||
messageThread.join(); | messageThread.join(); | ||||
return(status); | return(status); | ||||
stopCallbacks.push_back(stopFunctor); | stopCallbacks.push_back(stopFunctor); | ||||
} | } | ||||
bool Service::receivedPause() { | |||||
return (pauseReceived); | |||||
} | |||||
bool Service::receivedResume() { | |||||
return (resumeReceived); | |||||
} | |||||
bool Service::receivedRestart() { | |||||
return (restartReceived); | |||||
} | |||||
bool Service::receivedStop() { | bool Service::receivedStop() { | ||||
return (Message::Stop == lastMessage); | |||||
return (stopReceived); | |||||
} | |||||
void Service::clearReceivedPause() { | |||||
pauseReceived = false; | |||||
} | |||||
void Service::clearReceivedResume() { | |||||
resumeReceived = false; | |||||
} | |||||
void Service::clearReceivedRestart() { | |||||
restartReceived = false; | |||||
} | |||||
void Service::clearReceivedStop() { | |||||
stopReceived = false; | |||||
} | } | ||||
void Service::processMessages() { | void Service::processMessages() { | ||||
switch (sigNum) { | switch (sigNum) { | ||||
case SIGTSTP: | case SIGTSTP: | ||||
lastMessage = Message::Pause; | |||||
pauseReceived = true; | |||||
break; | break; | ||||
case SIGCONT: | case SIGCONT: | ||||
lastMessage = Message::Resume; | |||||
resumeReceived = true; | |||||
break; | break; | ||||
case SIGHUP: | case SIGHUP: | ||||
lastMessage = Message::Restart; | |||||
restartReceived = true; | |||||
break; | break; | ||||
case SIGTERM: | case SIGTERM: | ||||
lastMessage = Message::Stop; | |||||
stopReceived = true; | |||||
for (auto callback : stopCallbacks) { | for (auto callback : stopCallbacks) { | ||||
(*callback)(); | (*callback)(); |
// | // | ||||
void onStopCall(Callback *stopFunctor); | void onStopCall(Callback *stopFunctor); | ||||
/// Check whether Pause was received. | |||||
// | |||||
// \returns if the Pause message was received, false otherwise. | |||||
// | |||||
bool receivedPause(); | |||||
/// Check whether Resume was received. | |||||
// | |||||
// \returns if the Resume message was received, false otherwise. | |||||
// | |||||
bool receivedResume(); | |||||
/// Check whether Restart was received. | |||||
// | |||||
// \returns if the Restart message was received, false otherwise. | |||||
// | |||||
bool receivedRestart(); | |||||
/// Check whether the last message received was Stop. | /// Check whether the last message received was Stop. | ||||
// | // | ||||
// \returns true if Stop was the most recent message received, | // \returns true if Stop was the most recent message received, | ||||
// | // | ||||
bool receivedStop(); | bool receivedStop(); | ||||
/// Clear receiving the Pause message. | |||||
void clearReceivedPause(); | |||||
/// Clear receiving the Resume message. | |||||
void clearReceivedResume(); | |||||
/// Clear receiving the Restart message. | |||||
void clearReceivedRestart(); | |||||
/// Clear receiving the Stop message. | |||||
void clearReceivedStop(); | |||||
/// Get a reference to the command-line arguments. | /// Get a reference to the command-line arguments. | ||||
// | // | ||||
// \returns a reference to the vector of command-line arguments of | // \returns a reference to the vector of command-line arguments of | ||||
None | None | ||||
}; | }; | ||||
/// Most recent message received. | |||||
Message lastMessage; | |||||
/// True if Pause message was received. | |||||
bool pauseReceived; | |||||
/// True if Resume message was received. | |||||
bool resumeReceived; | |||||
/// True if Restart message was received. | |||||
bool restartReceived; | |||||
/// True if Stop message was received. | |||||
bool stopReceived; | |||||
/// Functions to invoke when the Stop is received. | /// Functions to invoke when the Stop is received. | ||||
std::vector<Callback *> stopCallbacks; | std::vector<Callback *> stopCallbacks; |