package org.async.example.resultset.server; import org.async.example.resultset.FileResultSetInterface; import org.async.rmi.*; import org.async.rmi.server.ResultSets; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.io.*; import java.rmi.RemoteException; /** * Created by Barak Bar Orion * 05/10/14. */ public class FileContentRetrieverServer implements FileResultSetInterface { private static final Logger logger = LoggerFactory.getLogger(FileContentRetrieverServer.class); @Trace(TraceType.DETAILED) @Override public ResultSet<Byte> retrieve(File file, final int bufferSize) throws RemoteException { int bytes = 0; try (InputStream is = new FileInputStream(file); ResultSetCallback<Byte> callback = ResultSets.getCallback()) { byte[] buffer = new byte[bufferSize]; int read; while ((read = is.read(buffer)) != -1) { Byte[] sentBuf = new Byte[read]; for (int i = 0; i < read; ++i) { sentBuf[i] = buffer[i]; } bytes += read; if (callback.send(sentBuf)) { // connection or proxy was closed. logger.info("sent {} bytes", bytes); return null; } } } catch (Throwable t) { logger.error(t.toString(), t); } logger.info("sent {} bytes", bytes); return null; } public static void main(String[] args) throws Exception { try { FileContentRetrieverServer fileResultSetServer = new FileContentRetrieverServer(); Util.writeToFile(fileResultSetServer, new File(new File(".."), SER_FILE_NAME)); Thread.sleep(Long.MAX_VALUE); } catch (Exception e) { logger.error("ExampleServer exception while exporting:", e); } } }