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; |