/**
*
*/
package vnet.sms.gateway.nettysupport.publish.outgoing;
import java.io.Serializable;
import org.jboss.netty.channel.ChannelFuture;
import vnet.sms.common.messages.GsmPdu;
import vnet.sms.common.wme.acknowledge.MessageAcknowledgementContainer;
import vnet.sms.common.wme.acknowledge.SendSmsAckContainer;
import vnet.sms.common.wme.acknowledge.SendSmsNackContainer;
import vnet.sms.common.wme.send.SendSmsContainer;
/**
* @author obergner
*
*/
public interface OutgoingMessagesSender<ID extends Serializable> {
// ------------------------------------------------------------------------
// Listener
// ------------------------------------------------------------------------
public interface Listener<ID extends Serializable> {
void sendSmsFailed(final SendSmsContainer failedSms,
final Throwable error);
void acknowldgeReceivedSmsFailed(
final MessageAcknowledgementContainer<ID, ? extends GsmPdu> acknowledgement,
final Throwable error);
}
// ------------------------------------------------------------------------
// Managing listeners
// ------------------------------------------------------------------------
boolean addListener(Listener<ID> listener);
boolean removeListener(Listener<ID> listener);
void clearListeners();
// ------------------------------------------------------------------------
// Sending messages
// ------------------------------------------------------------------------
/**
* @param sms
* @return
* @throws Exception
*/
ChannelFuture sendSms(SendSmsContainer sms) throws Exception;
/**
* @param ack
* @return
* @throws Exception
*/
ChannelFuture ackReceivedSms(SendSmsAckContainer<ID> ack) throws Exception;
/**
* @param nack
* @return
* @throws Exception
*/
ChannelFuture nackReceivedSms(SendSmsNackContainer<ID> nack)
throws Exception;
// ------------------------------------------------------------------------
// Resource management
// ------------------------------------------------------------------------
/**
*
*/
void close();
}