package io.vivarium.client.task; import java.io.IOException; import java.nio.channels.NotYetConnectedException; import java.util.concurrent.ExecutionException; import org.java_websocket.handshake.ServerHandshake; import com.fasterxml.jackson.core.JsonProcessingException; import io.vivarium.client.TaskClient; import io.vivarium.net.messages.Message; import io.vivarium.net.messages.RequestResourceMessage; import io.vivarium.net.messages.ResourceFormat; import io.vivarium.net.messages.SendResourceMessage; import io.vivarium.serialization.JSONConverter; import io.vivarium.serialization.VivariumObjectCollection; import io.vivarium.util.UUID; import io.vivarium.util.concurrency.SimpleFuture; public class DownloadResourceTask extends Task { private final UUID _uuid; private SimpleFuture<VivariumObjectCollection> _objects; public DownloadResourceTask(UUID uuid) { _uuid = uuid; _objects = new SimpleFuture<>(); } @Override public void onOpen(TaskClient client, ServerHandshake handshakedata) { try { RequestResourceMessage request = new RequestResourceMessage(_uuid, ResourceFormat.JSON); client.send(client.getMapper().writeValueAsString(request)); } catch (NotYetConnectedException | JsonProcessingException e) { e.printStackTrace(); } } @Override public void onMessage(TaskClient client, String message) { try { Message untypedMessage = client.getMapper().readValue(message, Message.class); if (untypedMessage instanceof SendResourceMessage) { SendResourceMessage sendResource = (SendResourceMessage) untypedMessage; String jsonDataString = sendResource.getDataString(); VivariumObjectCollection collection = JSONConverter.jsonStringToSerializerCollection(jsonDataString); _objects.put(collection); } } catch (IOException e) { e.printStackTrace(); } } @Override public void onClose(TaskClient client, int code, String reason, boolean remote) { } @Override public void onError(TaskClient client, Exception ex) { } public VivariumObjectCollection waitForResource() throws InterruptedException, ExecutionException { return _objects.get(); } }