package org.jabref.logic.remote.shared;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.net.SocketTimeoutException;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
/**
* Every message is terminated with '\0'.
*/
public class Protocol {
public static final String IDENTIFIER = "jabref";
private static final Log LOGGER = LogFactory.getLog(Protocol.class);
private final Socket socket;
private final OutputStream out;
private final InputStream in;
public Protocol(Socket socket) throws IOException {
this.socket = socket;
this.out = socket.getOutputStream();
this.in = socket.getInputStream();
}
public void sendMessage(String message) throws IOException {
out.write(message.getBytes());
out.write('\0');
out.flush();
}
public String receiveMessage() throws IOException {
int c;
StringBuilder result = new StringBuilder();
try {
while (((c = in.read()) != '\0') && (c >= 0)) {
result.append((char) c);
}
} catch (SocketTimeoutException ex) {
LOGGER.info("Connection timed out.", ex);
}
return result.toString();
}
public void close() {
try {
in.close();
} catch (IOException ignored) {
// Ignored
}
try {
out.close();
} catch (IOException ignored) {
// Ignored
}
try {
socket.close();
} catch (IOException ignored) {
// Ignored
}
}
}