Merged transports' finish() and dispose() methods.

This commit is contained in:
akwizgran
2011-10-06 19:00:33 +01:00
parent 07d6715881
commit c08f6c4d1e
10 changed files with 29 additions and 65 deletions

View File

@@ -13,14 +13,8 @@ public interface BatchTransportReader {
InputStream getInputStream();
/**
* Finishes reading from the transport. This method should be called after
* closing the input stream.
* Closes the reader and disposes of any associated state. The argument
* should be false if an exception was thrown while using the reader.
*/
void finish() throws IOException;
/**
* Disposes of any associated state. This method must be called even if the
* reader is not used, or if an exception is thrown while using the reader.
*/
void dispose() throws IOException;
void dispose(boolean success) throws IOException;
}

View File

@@ -16,14 +16,8 @@ public interface BatchTransportWriter {
OutputStream getOutputStream();
/**
* Finishes writing to the transport. This method should be called after
* flushing and closing the output stream.
* Closes the writer and disposes of any associated state. The argument
* should be false if an exception was thrown while using the writer.
*/
void finish() throws IOException;
/**
* Disposes of any associated state. This method must be called even if the
* writer is not used, or if an exception is thrown while using the writer.
*/
void dispose() throws IOException;
void dispose(boolean success) throws IOException;
}

View File

@@ -18,15 +18,8 @@ public interface StreamTransportConnection {
OutputStream getOutputStream() throws IOException;
/**
* Finishes using the transport. This method should be called after closing
* the input and output streams.
* Closes the connection and disposes of any associated state. The argument
* should be false if an exception was thrown while using the connection.
*/
void finish() throws IOException;
/**
* Disposes of any associated state. This method must be called even if the
* connection is not used, or if an exception is thrown while using the
* connection.
*/
void dispose() throws IOException;
void dispose(boolean success) throws IOException;
}

View File

@@ -12,8 +12,6 @@ class FileTransportReader implements BatchTransportReader {
private final InputStream in;
private final FilePlugin plugin;
private boolean streamInUse = false;
FileTransportReader(File file, InputStream in, FilePlugin plugin) {
this.file = file;
this.in = in;
@@ -21,17 +19,15 @@ class FileTransportReader implements BatchTransportReader {
}
public InputStream getInputStream() {
streamInUse = true;
return in;
}
public void finish() throws IOException {
streamInUse = false;
plugin.readerFinished(file);
}
public void dispose() throws IOException {
if(streamInUse) in.close();
file.delete();
public void dispose(boolean success) throws IOException {
try {
in.close();
if(success) plugin.readerFinished(file);
} finally {
file.delete();
}
}
}

View File

@@ -13,8 +13,6 @@ class FileTransportWriter implements BatchTransportWriter {
private final long capacity;
private final FilePlugin plugin;
private boolean streamInUse = false;
FileTransportWriter(File file, OutputStream out, long capacity,
FilePlugin plugin) {
this.file = file;
@@ -28,17 +26,15 @@ class FileTransportWriter implements BatchTransportWriter {
}
public OutputStream getOutputStream() {
streamInUse = true;
return out;
}
public void finish() {
streamInUse = false;
plugin.writerFinished(file);
}
public void dispose() throws IOException {
if(streamInUse) out.close();
file.delete();
public void dispose(boolean success) throws IOException {
try {
out.close();
if(success) plugin.writerFinished(file);
} finally {
file.delete();
}
}
}

View File

@@ -12,7 +12,7 @@ import java.util.concurrent.Executor;
import net.sf.briar.api.ContactId;
import net.sf.briar.api.TransportId;
public class SimpleSocketPlugin extends SocketPlugin {
class SimpleSocketPlugin extends SocketPlugin {
public static final int TRANSPORT_ID = 1;

View File

@@ -135,6 +135,7 @@ implements StreamTransportPlugin {
}
public synchronized void poll() {
// Subclasses may not support polling
if(!shouldPoll()) throw new UnsupportedOperationException();
if(!started) return;
for(ContactId c : remoteProperties.keySet()) {

View File

@@ -11,28 +11,19 @@ class SocketTransportConnection implements StreamTransportConnection {
private final Socket socket;
private boolean streamInUse = false;
SocketTransportConnection(Socket socket) {
this.socket = socket;
}
public InputStream getInputStream() throws IOException {
streamInUse = true;
return socket.getInputStream();
}
public OutputStream getOutputStream() throws IOException {
streamInUse = true;
return socket.getOutputStream();
}
public void finish() throws IOException {
// FIXME: Tell the plugin?
streamInUse = false;
}
public void dispose() throws IOException {
if(streamInUse) socket.close();
public void dispose(boolean success) throws IOException {
socket.close();
}
}

View File

@@ -289,10 +289,9 @@ public class RemovableDrivePluginTest extends TestCase {
out.write(new byte[123]);
out.flush();
out.close();
writer.finish();
assertEquals(123L, files[0].length());
// Disposing of the writer should delete the file
writer.dispose();
writer.dispose(true);
files = drive1.listFiles();
assertTrue(files == null || files.length == 0);

View File

@@ -107,7 +107,7 @@ public class SimpleSocketPluginTest extends TestCase {
assertTrue(latch.await(1, TimeUnit.SECONDS));
assertFalse(error.get());
// Clean up
conn.getInputStream().close(); // FIXME: Change the API
conn.dispose(true);
ss.close();
plugin.stop();
}