/*
* Copyright (c) 2008-2019 Emmanuel Dupuy.
* This project is distributed under the GPLv3 license.
* This is a Copyleft license that gives the user the right to use,
* copy and modify the code freely for non-commercial purposes.
*/
package org.jd.gui.util.net;
import org.jd.gui.util.exception.ExceptionUtil;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.function.Consumer;
public class InterProcessCommunicationUtil {
protected static final int PORT = 2015_6;
public static void listen(final Consumer<String[]> consumer) throws Exception {
final ServerSocket listener = new ServerSocket(PORT);
Runnable runnable = new Runnable() {
@Override
public void run() {
while (true) {
try (Socket socket = listener.accept();
ObjectInputStream ois = new ObjectInputStream(socket.getInputStream())) {
// Receive args from another JD-GUI instance
String[] args = (String[])ois.readObject();
consumer.accept(args);
} catch (IOException|ClassNotFoundException e) {
assert ExceptionUtil.printStackTrace(e);
}
}
}
};
new Thread(runnable).start();
}
public static void send(String[] args) {
try (Socket socket = new Socket(InetAddress.getLocalHost(), PORT);
ObjectOutputStream oos = new ObjectOutputStream(socket.getOutputStream())) {
// Send args to the main JD-GUI instance
oos.writeObject(args);
} catch (IOException e) {
assert ExceptionUtil.printStackTrace(e);
}
}
}