package io.vivarium.server;
import java.util.Optional;
import org.java_websocket.WebSocket;
import com.google.common.base.Preconditions;
import io.vivarium.util.UUID;
import io.vivarium.util.concurrency.Stoppable;
public class ClientConnection implements Stoppable
{
private final UUID _workerID;
private Optional<WebSocket> _webSocket;
public ClientConnection(UUID workerID, WebSocket webSocket)
{
this._workerID = workerID;
this._webSocket = Optional.of(webSocket);
}
public synchronized void setWebSocket(WebSocket webSocket)
{
// Close the existing connection
if (_webSocket.isPresent())
{
_webSocket.get().close(ClientConnectionManager.DUPLICATE_CONNECTION,
"Duplicate connection opened by client [" + _workerID + "]");
}
_webSocket = Optional.of(webSocket);
}
@Override
public synchronized void stop()
{
if (_webSocket.isPresent())
{
_webSocket.get().close(ClientConnectionManager.SERVER_SHUTDOWN, "The server has been shut down.");
}
}
public synchronized void socketClosed(WebSocket closedSocket)
{
Preconditions.checkArgument(_webSocket.get() == closedSocket);
_webSocket = Optional.empty();
}
public UUID get_workerID()
{
return _workerID;
}
public synchronized Optional<WebSocket> getWebSocket()
{
return _webSocket;
}
}