git-svn-id: https://svn2.assembla.com/svn/romraider/trunk@76 38686702-15cf-42e4-a595-3071df8bf5ea
This commit is contained in:
kascade 2008-05-02 12:29:25 +00:00
parent 49d58b1807
commit ef92cb92c4
2 changed files with 113 additions and 8 deletions

View File

@ -22,13 +22,19 @@
package com.romraider; package com.romraider;
import static com.romraider.ECUEditorManager.getECUEditor; import static com.romraider.ECUEditorManager.getECUEditor;
import static com.romraider.Version.PRODUCT_NAME;
import static com.romraider.logger.ecu.EcuLogger.startLogger; import static com.romraider.logger.ecu.EcuLogger.startLogger;
import static com.romraider.swing.LookAndFeelManager.initLookAndFeel; import static com.romraider.swing.LookAndFeelManager.initLookAndFeel;
import static com.romraider.util.LogManager.initDebugLogging; import static com.romraider.util.LogManager.initDebugLogging;
import static com.romraider.util.RomServer.isRunning;
import static com.romraider.util.RomServer.sendRomToOpenInstance;
import static com.romraider.util.RomServer.waitForRom;
import com.romraider.util.SettingsManager; import com.romraider.util.SettingsManager;
import com.romraider.util.SettingsManagerImpl; import com.romraider.util.SettingsManagerImpl;
import org.apache.log4j.Logger; import org.apache.log4j.Logger;
import static org.apache.log4j.Logger.getLogger; import static org.apache.log4j.Logger.getLogger;
import static javax.swing.JOptionPane.INFORMATION_MESSAGE;
import static javax.swing.JOptionPane.showMessageDialog;
import static javax.swing.SwingUtilities.invokeLater; import static javax.swing.SwingUtilities.invokeLater;
import static javax.swing.WindowConstants.EXIT_ON_CLOSE; import static javax.swing.WindowConstants.EXIT_ON_CLOSE;
import java.io.File; import java.io.File;
@ -51,10 +57,20 @@ public class ECUExec {
// set look and feel // set look and feel
initLookAndFeel(); initLookAndFeel();
// check if already running
if (isRunning()) {
if (args.length == 0 || containsLoggerArg(args)) showAlreadyRunningMessage();
else sendRomToOpenInstance(args[0]);
} else {
// open editor or logger // open editor or logger
if (containsLoggerArg(args)) openLogger(); if (containsLoggerArg(args)) openLogger();
else openEditor(args); else openEditor(args);
} }
}
private static void showAlreadyRunningMessage() {
showMessageDialog(null, PRODUCT_NAME + " is already running.", PRODUCT_NAME, INFORMATION_MESSAGE);
}
private static boolean containsLoggerArg(String[] args) { private static boolean containsLoggerArg(String[] args) {
if (args.length == 0) return false; if (args.length == 0) return false;
@ -67,11 +83,6 @@ public class ECUExec {
startLogger(EXIT_ON_CLOSE, settings); startLogger(EXIT_ON_CLOSE, settings);
} }
private static void openEditor(String[] args) {
ECUEditor editor = getECUEditor();
if (args.length > 0) openRom(editor, args[0]);
}
private static void openRom(final ECUEditor editor, final String rom) { private static void openRom(final ECUEditor editor, final String rom) {
invokeLater(new Runnable() { invokeLater(new Runnable() {
public void run() { public void run() {
@ -84,4 +95,21 @@ public class ECUExec {
} }
}); });
} }
private static void openEditor(String[] args) {
ECUEditor editor = getECUEditor();
if (args.length > 0) openRom(editor, args[0]);
startRomListener(editor);
}
private static void startRomListener(ECUEditor editor) {
try {
while (true) {
String rom = waitForRom();
openRom(editor, rom);
}
} catch (Throwable e) {
LOGGER.error("Error occurred", e);
}
}
} }

View File

@ -0,0 +1,77 @@
package com.romraider.util;
import org.apache.log4j.Logger;
import static org.apache.log4j.Logger.getLogger;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
public final class RomServer {
private static final Logger LOGGER = getLogger(RomServer.class);
private static final String HOST = "localhost";
private static final int PORT = 54321;
public static boolean isRunning() {
try {
ServerSocket sock = new ServerSocket(PORT);
sock.close();
return false;
} catch (Exception ex) {
return true;
}
}
public static String waitForRom() throws IOException {
ServerSocket sock = new ServerSocket(PORT);
try {
return waitForRom(sock);
} finally {
sock.close();
}
}
public static void sendRomToOpenInstance(String rom) {
try {
Socket socket = new Socket(HOST, PORT);
OutputStream os = socket.getOutputStream();
try {
write(os, rom);
} finally {
socket.close();
}
} catch (Throwable e) {
LOGGER.error("Error occurred", e);
}
}
private static void write(OutputStream os, String rom) {
PrintWriter pw = new PrintWriter(os, true);
try {
pw.println(rom);
} finally {
pw.close();
}
}
private static String waitForRom(ServerSocket sock) throws IOException {
Socket client = sock.accept();
try {
return getRom(client);
} finally {
client.close();
}
}
private static String getRom(Socket client) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(client.getInputStream()));
try {
return br.readLine();
} finally {
br.close();
}
}
}