@Override
	protected boolean handleInternal(AbstractAction action, Agent agent) {
		if (messageToSend == null) {
			AbstractAction interestingPart = getInterestingPart(action);
			if (interestingPart == null) {
				// not interested in this action
				return true;
			}
			values = new HashMap<String, String>();
			if (interestingPart instanceof SpeakTo) {
				values.put("speaker1", agent.toString());
				values.put("speaker2", ((SpeakTo) interestingPart).getAgent()
						.toString());
				CASi.SIM_LOG.info(String.format(
						"%s has detected voices of %s and %s", this.toString(),
						agent.toString(), ((SpeakTo) interestingPart)
								.getAgent().toString()));
			} else if (interestingPart instanceof HaveAMeeting) {
				HaveAMeeting meeting = (HaveAMeeting) interestingPart;
				Random rand = new Random(System.currentTimeMillis());
				int escape = 0;
				int first = 0;
				int second = 0;
				int size = meeting.getAgentsInMeeting().size();
				while (first == second && escape < 50) {
					first = rand.nextInt(size);
					second = rand.nextInt(size);
					escape++;
				}
				values.put("speaker1", meeting.getAgentsInMeeting().get(first));
				values.put("speaker2", meeting.getAgentsInMeeting().get(second));
				CASi.SIM_LOG.info(String.format(
						"%s has detected voices of %s and %s", this.toString(),
						meeting.getAgentsInMeeting().get(first), meeting
								.getAgentsInMeeting().get(second)));
				lastValue = values;

			} else {
				log.warning("Unimplemented Case for action: " + interestingPart);
				return true;
			}

			messageToSend = MACKProtocolFactory.generatePushMessage(agent,
					"mike", values);
		}

		return true;
	}