Greetings All,
 I wanted to know how can I manage a group of channels outside of a 
server's channel handler?  I am implementing a file server and I want the 
server to be able to transfer files through parallel data channels once it 
receives a file request from a client.  For example, if I have a single 4GB 
file and 4 data channels/connections, I want the server to transfer 1GB 
through each of the data channels simultaneously (note files are divided 
evenly among all data channels).  In essence, the server receives and 
processes the file request through one of the channel's  channelHandler - 
channelRead method, but then how can I inform and have each channel send 
their part/portion of the file?

For example, if I have a simple FileServerHandler class as below for each 
of the 4 channels,  and I wanted to know how can I inform and have each 
channel send their part/portion of the file.  

public class FileServerHandler extends SimpleChannelInboundHandler<ByteBuf> 
{

 private Logger logger; private String currentFileName;
 private String currentDirectory;
 private long currentFileOffset;
 private long currentFileChunkSize;
 private boolean isDirectory;


 public FileServerHandler() {

 logger = Logger.getLogger(this.getClass().getName());

 }

 public void channelActive(ChannelHandlerContext ctx) throws Exception{
 
 logger.info("Server:channel is active ");
 
 }


 @Override
 public void channelRead0(ChannelHandlerContext ctx, ByteBuf msg) throws 
Exception {
 logger.info("Server:channelRead0: filePath = " + msg);
 processFileRequest(msg); //Obtains the file or directory to retrieve and 
the size of the file or
 //files within a directory to retrieve recursively 
 
 /*
 *At this point I wish to tell the other channels the file or directory to 
retrieve, the file size, and the portion of the file(s) it should send? How 
can I do this? Also, if I implemented a channelManager, How can I pass this 
information to the channelManager and have it write the data to each 
channel?*
 */
 
 }

 @Override
 public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) {
 cause.printStackTrace();

 if (ctx.channel().isActive()) {
 ctx.writeAndFlush("ERR: " +
 cause.getClass().getSimpleName() + ": " +
 cause.getMessage() + '\n').addListener(ChannelFutureListener.CLOSE);
 }
 }
}



 

-- 
You received this message because you are subscribed to the Google Groups 
"Netty discussions" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/netty/d499d1de-f373-43c4-a493-69f86de57a9c%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to