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.