Package org.asteriskjava.fastagi.internal

Source Code of org.asteriskjava.fastagi.internal.AsyncAgiWriter

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;
    }
}
TOP

Related Classes of org.asteriskjava.fastagi.internal.AsyncAgiWriter

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.