@Override protected void finalizeProcessingInternal( ChunkTypeRequest pattern, IChunk result, Object... parameters) { AbstractVocalModule module = getModule(); IModel model = module.getModel(); IVocalActivationBuffer buffer = getModule().getVocalBuffer(); IChunk error = module.getErrorChunk(); IChunk free = module.getFreeChunk(); IChunk bufferState = error; Object failureMessage = null; IAgent agent = ACTRRuntime.getRuntime().getConnector().getAgent(model); IEfferentCommand vocalizationCommand = agent.getEfferentCommandManager().get(getCommandIdentifier()); IEfferentCommand.ActualState state = IEfferentCommand.ActualState.ABORTED; if (vocalizationCommand != null) { state = vocalizationCommand.getActualState(); failureMessage = vocalizationCommand.getResult(); } String msg = null; if (state == IEfferentCommand.ActualState.COMPLETED) { msg = "Execution of vocalization completed."; bufferState = free; } else { msg = "Execution of vocalization failed [" + state + "] : " + failureMessage; bufferState = error; } if (LOGGER.isDebugEnabled()) LOGGER.debug("Deleting command"); /* * delete the command */ agent.send( new ObjectCommandRequest( ((ISensoryIdentifier) getCommandIdentifier()).getSensor(), agent.getIdentifier(), IObjectCommand.Type.REMOVED, Collections.singleton(getCommandIdentifier()))); if (LOGGER.isDebugEnabled()) LOGGER.debug(msg); if (Logger.hasLoggers(model)) Logger.log(model, Logger.Stream.VOCAL, msg); buffer.setExecutionChunk(bufferState); buffer.setStateChunk(bufferState); buffer.setModalityChunk(bufferState); }
@Override protected boolean shouldProcess(IRequest request, Object... parameters) { AbstractVocalModule module = getModule(); IVocalActivationBuffer vBuffer = module.getVocalBuffer(); IModel model = module.getModel(); IChunk busy = module.getBusyChunk(); IIdentifier commandIdentifier = (IIdentifier) parameters[0]; IAgent agent = ACTRRuntime.getRuntime().getConnector().getAgent(model); if (vBuffer.isExecutionBusy()) { String msg = "Vocalizations cannot be executed when the vocal buffer is busy executing. Ignoring request"; if (Logger.hasLoggers(model)) Logger.log(model, Logger.Stream.VOCAL, msg); if (LOGGER.isWarnEnabled()) LOGGER.warn(msg); return false; } if (getModule().getVocalizationSource() == null) { String msg = "No vocalization source could be found. Ignoring request"; if (Logger.hasLoggers(model)) Logger.log(model, Logger.Stream.VOCAL, msg); if (LOGGER.isWarnEnabled()) LOGGER.warn(msg); return false; } if (commandIdentifier == null) { String msg = "No vocalization was prepared. Ignoring request."; if (Logger.hasLoggers(model)) Logger.log(model, Logger.Stream.VOCAL, msg); if (LOGGER.isWarnEnabled()) LOGGER.warn(msg); return false; } if (getCommandIdentifier() != null) { String msg = "Vocalization is already being executed but not passed on. Ignoring old vocalization."; if (Logger.hasLoggers(model)) Logger.log(model, Logger.Stream.VOCAL, msg); if (LOGGER.isWarnEnabled()) LOGGER.warn(msg); setCommandIdentifier(null); } VocalizationCommand command = (VocalizationCommand) agent.getEfferentCommandManager().get(commandIdentifier); if (command == null) { String msg = "No command was found for " + commandIdentifier + ". Something has gone horribly wrong"; /** Error : error */ LOGGER.error(msg); if (Logger.hasLoggers(model)) Logger.log(model, Logger.Stream.VOCAL, msg); return false; } vBuffer.setExecutionChunk(busy); setCommandIdentifier(commandIdentifier); return true; }