package org.asteriskjava.fastagi.internal; import org.asteriskjava.fastagi.command.AgiCommand; import org.asteriskjava.fastagi.AgiException; import org.asteriskjava.manager.ManagerConnection; import org.asteriskjava.manager.TimeoutException; import org.asteriskjava.manager.response.ManagerResponse; import org.asteriskjava.manager.response.ManagerError; import org.asteriskjava.manager.action.AgiAction; import java.io.IOException; /** * Implementation of AgiWriter that uses a {@link org.asteriskjava.manager.ManagerConnection} to send * {@link org.asteriskjava.fastagi.command.AgiCommand AgiCommands} as part of an AsyncAgi conversation. * * @see org.asteriskjava.manager.ManagerConnection * @see org.asteriskjava.manager.action.AgiAction * @since 1.0.0 */ public class AsyncAgiWriter implements AgiWriter { private final ManagerConnection connection; private volatile String channelName; public AsyncAgiWriter(ManagerConnection connection, String channelName) { this.connection = connection; this.channelName = channelName; } public void sendCommand(AgiCommand command) throws AgiException { final AgiAction agiAction; final ManagerResponse response; agiAction = new AgiAction(channelName, command.buildCommand()); try { response = connection.sendAction(agiAction); } catch (IOException e) { throw new AgiException("Unable to send AsyncAGI command to " + connection.getHostname() + " for channel " + channelName, e); } catch (TimeoutException e) { throw new AgiException("Timeout while sending AsyncAGI command to " + connection.getHostname() + " for channel " + channelName , e); } if (response instanceof ManagerError) { throw new AgiException("Unable to send AsyncAGI command to " + connection.getHostname() + " for channel " + channelName + ": " + response.getMessage()); } } public void updateChannelName(String channelName) { this.channelName = channelName; } }