void setSimpleState(SimpleGoalState next_state) { ROS.Debug("actionlib", "Transitioning SimpleState from [%s] to [%s]", goalState.toString(), next_state.toString()); goalState = next_state; }
void handleTransition(ClientGoalHandle <ActionSpec> gh) { CommState commState = gh.getCommState(); switch (commState.state) { case CommState.StateEnum.WAITING_FOR_GOAL_ACK: ROS.Error("actionlib", "BUG: Shouldn't ever get a transition callback for WAITING_FOR_GOAL_ACK"); break; case CommState.StateEnum.PENDING: if (goalState != SimpleGoalState.StateEnum.PENDING) { ROS.Error("BUG: Got a transition to CommState [%s] when our in SimpleGoalState [%s]", commState.toString(), goalState.toString()); } break; case CommState.StateEnum.ACTIVE: switch (goalState.state) { case SimpleGoalState.StateEnum.PENDING: setSimpleState(SimpleGoalState.StateEnum.ACTIVE); if (activeCallback != null) { activeCallback(); } break; case SimpleGoalState.StateEnum.ACTIVE: break; case SimpleGoalState.StateEnum.DONE: ROS.Error("actionlib", "BUG: Got a transition to CommState [%s] when in SimpleGoalState [%s]", commState.ToString(), goalState.ToString()); break; default: ROS.Error("Unknown SimpleGoalState %u", goalState.state); return; break; } break; case CommState.StateEnum.WAITING_FOR_RESULT: break; case CommState.StateEnum.WAITING_FOR_CANCEL_ACK: break; case CommState.StateEnum.RECALLING: if (goalState != SimpleGoalState.StateEnum.PENDING) { ROS.Error("BUG: Got a transition to CommState [%s] when our in SimpleGoalState [%s]", commState.ToString(), goalState.ToString()); } break; case CommState.StateEnum.PREEMPTING: switch (goalState.state) { case SimpleGoalState.StateEnum.PENDING: setSimpleState(SimpleGoalState.StateEnum.ACTIVE); if (activeCallback != null) { activeCallback(); } break; case SimpleGoalState.StateEnum.ACTIVE: break; case SimpleGoalState.StateEnum.DONE: ROS.Error("actionlib", "BUG: Got a transition to CommState [%s] when in SimpleGoalState [%s]", commState.ToString(), goalState.ToString()); break; default: ROS.Error("Unknown SimpleGoalState %u", goalState.state); return; break; } break; case CommState.StateEnum.DONE: switch (goalState.state) { case SimpleGoalState.StateEnum.PENDING: case SimpleGoalState.StateEnum.ACTIVE: lock ( doneMutex ) { setSimpleState(SimpleGoalState.StateEnum.DONE); } if (doneCallback != null) { doneCallback(getState(), gh.getResult()); } doneCondition.Set(); // doneCondition.notify_all(); break; case SimpleGoalState.StateEnum.DONE: ROS.Error("actionlib", "BUG: Got a second transition to DONE"); break; default: ROS.Error("Unknown SimpleGoalState %u", goalState.state); return; break; } break; default: ROS.Error("actionlib", "Unknown CommState received [%u]", commState.state); break; } }