The code.ill.fr has been recreated and upgraded with the latest version this weekend, If you encounter any problem please inform the Helpdesk.

Commit 1717f6fb authored by legoc's avatar legoc
Browse files

(split) Added getExitCode() in Instance, the server sends the status with the exit code

parent 77a8a9f2
......@@ -7,6 +7,7 @@
* Removed Configuration::getRetries().
* Added storage functions: This::storeKeyValue(), This::getKeyValue(), This::removeKey(), Instance::getKeyValue().
* Added Instance::getPastStates().
* Added Instance.getExitCode().
0.3.3
-----
......
......@@ -234,6 +234,11 @@ public:
*/
std::set<State> getPastStates() const;
/**
* Returns the exit code.
*/
int getExitCode() const;
bool getBinaryResult(std::string& result);
bool getResult(std::string& result);
......@@ -260,6 +265,7 @@ private:
State m_lastState;
bool m_hasResult;
std::string m_resultData;
int m_exitCode;
std::unique_ptr<WaitingImpl> m_waiting;
};
......
......@@ -439,7 +439,8 @@ Instance::Instance(Server * server) :
m_pastStates(0),
m_initialState(UNKNOWN),
m_lastState(UNKNOWN),
m_hasResult(false) {
m_hasResult(false),
m_exitCode(-1) {
m_waiting.reset(new GenericWaitingImpl(bind(&Instance::cancelWaitFor, this)));
}
......@@ -572,6 +573,11 @@ State Instance::waitFor(int states, const std::string& eventName, StateHandlerTy
m_pastStates = status->getPastStates();
m_lastState = state;
// Assign the exit code.
if (status->getExitCode() != -1) {
m_exitCode = status->getExitCode();
}
// Call the state handler.
if (handler != nullptr) {
handler(state);
......@@ -651,6 +657,10 @@ std::set<State> Instance::getPastStates() const {
return m_server->getPastStates(m_id);
}
int Instance::getExitCode() const {
return m_exitCode;
}
bool Instance::getBinaryResult(std::string& result) {
waitFor();
......
......@@ -59,6 +59,9 @@ std::unique_ptr<Event> EventStreamSocket::receive(bool blocking) {
application::State state = event[message::StatusEvent::APPLICATION_STATE].GetInt();
application::State pastStates = event[message::StatusEvent::PAST_APPLICATION_STATES].GetInt();
if (event.HasMember(message::StatusEvent::EXIT_CODE)) {
return unique_ptr<Event>(new StatusEvent(id, name, state, pastStates, event[message::StatusEvent::EXIT_CODE].GetInt()));
}
return unique_ptr<Event>(new StatusEvent(id, name, state, pastStates));
}
else if (response == message::Event::RESULT) {
......
......@@ -20,14 +20,18 @@
namespace cameo {
StatusEvent::StatusEvent(int id, const std::string& name, application::State state, application::State pastStates) :
StatusEvent::StatusEvent(int id, const std::string& name, application::State state, application::State pastStates, int exitCode) :
Event(id, name),
m_state(state),
m_pastStates(pastStates) {
m_pastStates(pastStates),
m_exitCode(exitCode) {
}
StatusEvent::StatusEvent(const StatusEvent& event) :
Event(event), m_state(event.m_state), m_pastStates(event.m_pastStates) {
Event(event),
m_state(event.m_state),
m_pastStates(event.m_pastStates),
m_exitCode(event.m_exitCode) {
}
StatusEvent* StatusEvent::clone() {
......@@ -42,6 +46,10 @@ application::State StatusEvent::getPastStates() const {
return m_pastStates;
}
int StatusEvent::getExitCode() const {
return m_exitCode;
}
std::ostream& operator<<(std::ostream& os, const cameo::StatusEvent& status) {
os << "name=" << status.m_name
<< "\nid=" << status.m_id
......
......@@ -28,17 +28,19 @@ class StatusEvent : public Event {
friend std::ostream& operator<<(std::ostream&, const StatusEvent&);
public:
StatusEvent(int id, const std::string& name, application::State state, application::State pastStates);
StatusEvent(int id, const std::string& name, application::State state, application::State pastStates, int exitCode = -1);
StatusEvent(const StatusEvent& event);
virtual StatusEvent* clone();
application::State getState() const;
application::State getPastStates() const;
int getExitCode() const;
private:
application::State m_state;
application::State m_pastStates;
int m_exitCode; // TODO replace with optional
};
std::ostream& operator<<(std::ostream&, const StatusEvent&);
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment