package com.netthreads.network.osc.client;
import io.netty.buffer.ByteBuf;
import io.netty.buffer.Unpooled;
import io.netty.channel.ChannelFuture;
import io.netty.channel.ChannelFutureListener;
import io.netty.channel.socket.DatagramPacket;
import java.net.InetSocketAddress;
import com.netthreads.osc.common.collections.Pool;
import com.netthreads.osc.common.collections.Resettable;
import com.netthreads.osc.common.collections.ResettingPool;
import com.netthreads.osc.common.domain.OSCBundle;
/**
* Future listener which cleans up when the operation is complete.
*
*/
public class OSCBundleFutureListener implements ChannelFutureListener, Resettable
{
public static final int POOL_INITIAL_CAPACITY = 32;
// Message Pool.
private static final Pool<OSCBundleFutureListener> pool = new ResettingPool<OSCBundleFutureListener>(
POOL_INITIAL_CAPACITY)
{
@Override
protected OSCBundleFutureListener newObject()
{
return new OSCBundleFutureListener();
}
};
private OSCBundle oscBundle;
private DatagramPacket datagramPacket;
/**
* Get instance.
*
* @return instance;
*/
public static OSCBundleFutureListener $(OSCBundle oscBundle, InetSocketAddress socket)
{
OSCBundleFutureListener oscBundleFutureListener = pool.obtain();
// OSCBundle
oscBundleFutureListener.setOscBundle(oscBundle);
// DatagramPacket
ByteBuf buffer = Unpooled.buffer();
DatagramPacket datagramPacket = new DatagramPacket(buffer, socket);
oscBundleFutureListener.setDatagramPacket(datagramPacket);
return oscBundleFutureListener;
}
public OSCBundleFutureListener()
{
reset();
};
/**
* When operation complete then free the appropriate data.
*
*/
@Override
public void operationComplete(ChannelFuture channelFuture) throws Exception
{
oscBundle.free();
pool.free(this);
}
@Override
public void reset()
{
if (datagramPacket != null)
{
datagramPacket.data().clear();
}
}
public OSCBundle getOscBundle()
{
return oscBundle;
}
public void setOscBundle(OSCBundle oscBundle)
{
this.oscBundle = oscBundle;
}
public DatagramPacket getDatagramPacket()
{
return datagramPacket;
}
public void setDatagramPacket(DatagramPacket datagramPacket)
{
this.datagramPacket = datagramPacket;
}
}