package io.vivarium.client.task;
import java.nio.channels.NotYetConnectedException;
import org.java_websocket.handshake.ServerHandshake;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.google.common.base.Preconditions;
import io.vivarium.client.TaskClient;
import io.vivarium.net.messages.ResourceFormat;
import io.vivarium.net.messages.SendResourceMessage;
import io.vivarium.serialization.JSONConverter;
import io.vivarium.serialization.VivariumObject;
import io.vivarium.serialization.VivariumObjectCollection;
import io.vivarium.util.UUID;
public class UploadResourceTask extends Task
{
private final UUID _resourceID;
private final VivariumObjectCollection _objects;
public UploadResourceTask(UUID resourceID, VivariumObject object)
{
Preconditions.checkNotNull(resourceID);
Preconditions.checkNotNull(object);
_resourceID = resourceID;
_objects = new VivariumObjectCollection();
_objects.add(object);
}
public UploadResourceTask(UUID resourceID, VivariumObjectCollection objects)
{
Preconditions.checkNotNull(resourceID);
Preconditions.checkNotNull(objects);
_resourceID = resourceID;
_objects = objects;
}
@Override
public void onOpen(TaskClient client, ServerHandshake handshakedata)
{
try
{
// Create a world and upload it
String jsonString = JSONConverter.serializerToJSONString(_objects);
SendResourceMessage uploadMessage = new SendResourceMessage(_resourceID, jsonString, ResourceFormat.JSON);
client.send(client.getMapper().writeValueAsString(uploadMessage));
}
catch (NotYetConnectedException | JsonProcessingException e)
{
e.printStackTrace();
}
}
@Override
public void onMessage(TaskClient client, String message)
{
// No reply expected
// TODO: We should get an ack, and if we don't get the ack we should resend a UploadResource message
// periodically.
}
@Override
public void onClose(TaskClient client, int code, String reason, boolean remote)
{
}
@Override
public void onError(TaskClient client, Exception ex)
{
}
public UUID getResourceUUID()
{
return _resourceID;
}
}