Exemple #1
0
State * TeleKarma::DoAction(Action * a, State * s)
{
	if (a == NULL) return s;
	State * result = s;
	// process "global" (turn-independent) actions independant of turn #
	switch (a->id) {
		case ACTION_QUIT:
			result = Quit(a, s);
			break;
		case ACTION_PLAY_SOUND:
			result = PlaySound(a, s);
			break;
		case ACTION_SEND_TONE:
			result = SendTone(a, s);
			break;
		default:
			// process turn-independent actions if applicable
			if (a->turn == s->turn) {
				switch (a->id) {
					case ACTION_INITIALIZE:
						result = Initialize(a, s);
						break;
					case ACTION_REGISTER:
						result = Register(a, s);
						break;
					case ACTION_DIAL:
						result = Dial(a, s);
						break;
					case ACTION_HOLD:
						result = Hold(a, s);
						break;
					case ACTION_AUTOHOLD:
						result = AutoHold(a, s);
						break;
					case ACTION_MUTE:
						result = MuteAutoHold(a, s);
						break;
					case ACTION_RETRIEVE:
						result = Retrieve(a, s);
						break;
					case ACTION_DISCONNECT:
						result = Disconnect(a, s);
						break;
					default:
						// simply ignore unknown actions
						// (and global actions)
						break;
				}
			} else {
				if (s != NULL) {
					result = SetState(new State(s->id, s->turn, STATUS_TURN_MISMATCH));
				}
			}
			break;
	}
	delete a;
	return result;
}
void Holder::TeleopPeriodic(){
	AutoHold();
}
void Holder::AutonomousPeriodic(){
	AutoHold();
}
void Holder::TestPeriodic(){
	AutoHold();
}