Skip to content

Commit

Permalink
Merge pull request #2144 from kofemann/file-region
Browse files Browse the repository at this point in the history
introduce FileChunk interface to transfer file chunks
  • Loading branch information
arjantijms authored May 19, 2022
2 parents bd4d311 + 6183f9d commit fba4657
Show file tree
Hide file tree
Showing 5 changed files with 47 additions and 13 deletions.
36 changes: 36 additions & 0 deletions modules/grizzly/src/main/java/org/glassfish/grizzly/FileChunk.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
/*
* Copyright (c) 2011, 2021 Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2018 Payara Services Ltd.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v. 2.0, which is available at
* http://www.eclipse.org/legal/epl-2.0.
*
* This Source Code may also be made available under the following Secondary
* Licenses when the conditions for such availability set forth in the
* Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
* version 2 with the GNU Classpath Exception, which is available at
* https://www.gnu.org/software/classpath/license.html.
*
* SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
*/

package org.glassfish.grizzly;

import java.io.IOException;
import java.nio.channels.WritableByteChannel;
import org.glassfish.grizzly.asyncqueue.WritableMessage;

public interface FileChunk extends WritableMessage {

/**
* Transfers the File region backing this <code>FileRegion</code> to the specified {@link WritableByteChannel}.
*
* @param c the {@link WritableByteChannel}
* @return the number of bytes that have been transferred
* @throws IOException if an error occurs while processing
* @see java.nio.channels.FileChannel#transferTo(long, long, java.nio.channels.WritableByteChannel)
*/
long writeTo(final WritableByteChannel c) throws IOException;

}
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Copyright (c) 2011, 2020 Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2011, 2021 Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2018 Payara Services Ltd.
*
* This program and the accompanying materials are made available under the
Expand All @@ -24,15 +24,13 @@
import java.nio.channels.FileChannel;
import java.nio.channels.WritableByteChannel;

import org.glassfish.grizzly.asyncqueue.WritableMessage;

/**
* A simple class that abstracts {@link FileChannel#transferTo(long, long, java.nio.channels.WritableByteChannel)} for
* use with Grizzly 2.0 {@link org.glassfish.grizzly.asyncqueue.AsyncQueueWriter}.
*
* @since 2.2
*/
public class FileTransfer implements WritableMessage {
public class FileTransfer implements FileChunk {

private FileChannel fileChannel;
private long len;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@
import org.glassfish.grizzly.CloseReason;
import org.glassfish.grizzly.CloseType;
import org.glassfish.grizzly.Connection;
import org.glassfish.grizzly.FileTransfer;
import org.glassfish.grizzly.FileChunk;
import org.glassfish.grizzly.Grizzly;
import org.glassfish.grizzly.IOEvent;
import org.glassfish.grizzly.WriteResult;
Expand Down Expand Up @@ -102,8 +102,8 @@ protected long write0(final NIOConnection connection, final WritableMessage mess
((TCPNIOConnection) connection).terminate0(null, new CloseReason(CloseType.REMOTELY, e));
throw e;
}
} else if (message instanceof FileTransfer) {
written = ((FileTransfer) message).writeTo((SocketChannel) connection.getChannel());
} else if (message instanceof FileChunk) {
written = ((FileChunk) message).writeTo((SocketChannel) connection.getChannel());
((TCPNIOConnection) connection).onWrite(null, written);
} else {
throw new IllegalStateException("Unhandled message type");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@
import org.glassfish.grizzly.Connection;
import org.glassfish.grizzly.Context;
import org.glassfish.grizzly.EmptyCompletionHandler;
import org.glassfish.grizzly.FileTransfer;
import org.glassfish.grizzly.FileChunk;
import org.glassfish.grizzly.Grizzly;
import org.glassfish.grizzly.GrizzlyFuture;
import org.glassfish.grizzly.IOEvent;
Expand Down Expand Up @@ -635,8 +635,8 @@ public int write(final TCPNIOConnection connection, final WritableMessage messag
connection.terminate0(null, new CloseReason(CloseType.REMOTELY, e));
throw e;
}
} else if (message instanceof FileTransfer) {
written = (int) ((FileTransfer) message).writeTo((SocketChannel) connection.getChannel());
} else if (message instanceof FileChunk) {
written = (int) ((FileChunk) message).writeTo((SocketChannel) connection.getChannel());
} else {
throw new IllegalStateException("Unhandled message type");
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@
import org.glassfish.grizzly.Connection;
import org.glassfish.grizzly.Context;
import org.glassfish.grizzly.EmptyCompletionHandler;
import org.glassfish.grizzly.FileTransfer;
import org.glassfish.grizzly.FileChunk;
import org.glassfish.grizzly.GracefulShutdownListener;
import org.glassfish.grizzly.Grizzly;
import org.glassfish.grizzly.GrizzlyFuture;
Expand Down Expand Up @@ -571,8 +571,8 @@ public long write(final UDPNIOConnection connection, final SocketAddress dstAddr
}

connection.onWrite(buffer, (int) written);
} else if (message instanceof FileTransfer) {
written = ((FileTransfer) message).writeTo((DatagramChannel) connection.getChannel());
} else if (message instanceof FileChunk) {
written = ((FileChunk) message).writeTo((DatagramChannel) connection.getChannel());
} else {
throw new IllegalStateException("Unhandled message type");
}
Expand Down

0 comments on commit fba4657

Please sign in to comment.