package org.smartly.commons.network.socket.server; import org.junit.After; import org.junit.Before; import org.junit.Test; import org.smartly.commons.Delegates; import org.smartly.commons.async.Async; import org.smartly.commons.network.socket.client.Client; import org.smartly.commons.network.socket.client.UploadRunnable; import org.smartly.commons.network.socket.messages.UserToken; import org.smartly.commons.network.socket.messages.multipart.Multipart; import org.smartly.commons.network.socket.messages.tools.MultipartMessageUtils; import org.smartly.commons.util.FormatUtils; import org.smartly.commons.util.PathUtils; import java.util.ResourceBundle; /** * */ public class SendFileTest { static private int port; static private String host; static { ResourceBundle resources = ResourceBundle.getBundle("org.smartly.commons.network.socket.server.TestServer"); port = Integer.parseInt(resources.getString("server.port")); host = resources.getString("server.host"); } private Server _simpleSocketServer; @Before public void setUp() throws Exception { _simpleSocketServer = new Server(port); _simpleSocketServer.onStart(new Server.OnStart() { @Override public void handle(Server sender) { System.out.println("STARTED!!!!!"); } }); _simpleSocketServer.onMultipartTimeOut(new Multipart.OnTimeOutListener() { @Override public void handle(Multipart sender) { System.out.println("TIME-OUT: " + sender.toString()); try { MultipartMessageUtils.remove(sender); } catch (Throwable ignored) { } } }); _simpleSocketServer.onMultipartFull(new Multipart.OnFullListener() { @Override public void handle(Multipart sender) { System.out.println("FULL: " + sender.toString()); parseMultipart(sender); } }); _simpleSocketServer.start(); } @After public void tearDown() throws Exception { _simpleSocketServer.stopServer(); } @Test public void testSendFile() throws Exception { final String filename = PathUtils.concat(PathUtils.getTemporaryDirectory(), "ARCHIVIO.zip"); final Client client = new Client(); client.connect(host, port); final UserToken ut = new UserToken(); ut.setSourceAbsolutePath(filename); final Thread[] tasks = client.sendFile(ut, true, new Delegates.ProgressCallback() { @Override public void handle(int index, int length, double progress) { System.out.println(FormatUtils.format("{0}/{1} {2}%", index + 1, length, (int) (progress * 100))); } }, new Delegates.ExceptionCallback() { @Override public void handle(String message, Throwable exception) { System.out.println("Test Error: " + exception.toString()); } } ); Async.joinAll(tasks); System.out.println("finishing...."); for (final Thread thread : tasks) { final UploadRunnable task = (UploadRunnable) thread; System.out.println(task.toString()); } Thread.sleep(5000); } private static String parseMultipart(final Multipart item) { try { final String out_root = PathUtils.concat(PathUtils.getTemporaryDirectory(), "out"); return MultipartMessageUtils.saveOnDisk(item, out_root); } catch (Throwable t) { System.out.println(t); } return ""; } }