package org.jabref.logic.remote.client;
import java.net.InetAddress;
import java.net.Socket;
import org.jabref.logic.l10n.Localization;
import org.jabref.logic.remote.shared.Protocol;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
public class RemoteListenerClient {
private static final Log LOGGER = LogFactory.getLog(RemoteListenerClient.class);
private static final int TIMEOUT = 2000;
private RemoteListenerClient() {
}
/**
* Attempt to send command line arguments to already running JabRef instance.
*
* @param args Command line arguments.
* @return true if successful, false otherwise.
*/
public static boolean sendToActiveJabRefInstance(String[] args, int remoteServerPort) {
try (Socket socket = new Socket(InetAddress.getByName("localhost"), remoteServerPort)) {
socket.setSoTimeout(TIMEOUT);
Protocol protocol = new Protocol(socket);
try {
String identifier = protocol.receiveMessage();
if (!Protocol.IDENTIFIER.equals(identifier)) {
String port = String.valueOf(remoteServerPort);
String error = Localization.lang("Cannot use port %0 for remote operation; another application may be using it. Try specifying another port.", port);
System.out.println(error);
return false;
}
protocol.sendMessage(String.join("\n", args));
return true;
} finally {
protocol.close();
}
} catch (Exception e) {
LOGGER.debug(
"Could not send args " + String.join(", ", args) + " to the server at port " + remoteServerPort, e);
return false;
}
}
}