Alternatively, depending on how you decide whether to trigger a write or
not, let each Handler wait on a Promise, that will return when its data is
ready to write:

In your handler, do:

final Promise<Channel> promise = ctx.executor().newPromise();

promise.addListener(new FutureListener<Channel>() {

public void operationComplete(final Future<Channel> future) throws
Exception {

// ready to start doing something now

if (future.isSuccess()) {

// go get the data

} else {

// wait failed, clean up

}

});

MyDispatcher.registerDataRequest(promise, "some data");



On Mon, Sep 5, 2016 at 4:41 PM L_DisplayName <[email protected]>
wrote:

> Awesome, thank you Rogan!
>
>
> On Monday, September 5, 2016 at 8:09:18 AM UTC-4, L_DisplayName wrote:
>
>> 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/9ce5db8b-282a-4c5f-9ccd-8fcb9ad68cd1%40googlegroups.com
> <https://groups.google.com/d/msgid/netty/9ce5db8b-282a-4c5f-9ccd-8fcb9ad68cd1%40googlegroups.com?utm_medium=email&utm_source=footer>
> .
> For more options, visit https://groups.google.com/d/optout.
>

-- 
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/CAOYdKdgtUqAHSdR0Lxk2JOdL6Axqp8hf0ea4JZV2oPRY7jhb8Q%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to