add option to allow multiple instances (closes #33)

This commit is contained in:
yugecin 2016-10-14 23:54:06 +02:00
parent 86f6b168d8
commit 6b1b4e2339
2 changed files with 25 additions and 10 deletions

View File

@ -118,18 +118,20 @@ public class Opsu extends StateBasedGame {
Options.parseOptions();
// only allow a single instance
try {
SERVER_SOCKET = new ServerSocket(Options.getPort(), 1, InetAddress.getLocalHost());
} catch (UnknownHostException e) {
// shouldn't happen
} catch (IOException e) {
ErrorHandler.error(String.format(
if (!Options.noSingleInstance()) {
try {
SERVER_SOCKET = new ServerSocket(Options.getPort(), 1, InetAddress.getLocalHost());
} catch (UnknownHostException e) {
// shouldn't happen
} catch (IOException e) {
ErrorHandler.error(String.format(
"opsu! could not be launched for one of these reasons:\n" +
"- An instance of opsu! is already running.\n" +
"- Another program is bound to port %d. " +
"You can change the port opsu! uses by editing the \"Port\" field in the configuration file.",
"- An instance of opsu! is already running.\n" +
"- Another program is bound to port %d. " +
"You can change the port opsu! uses by editing the \"Port\" field in the configuration file.",
Options.getPort()), null, false);
System.exit(1);
System.exit(1);
}
}
File nativeDir;

View File

@ -134,6 +134,8 @@ public class Options {
/** Port binding. */
private static int port = 49250;
private static boolean noSingleInstance;
/**
* Returns whether the XDG flag in the manifest (if any) is set to "true".
* @return true if XDG directories are enabled, false otherwise
@ -279,6 +281,15 @@ public class Options {
port = i;
}
},
NOSINGLEINSTANCE ("NoSingleInstance") {
@Override
public String write() { return noSingleInstance + ""; }
@Override
public void read(String s) {
noSingleInstance = !"false".equals(s);
}
},
// in-game options
SCREEN_RESOLUTION ("Screen Resolution", "ScreenResolution", "Restart (Ctrl+Shift+F5) to apply resolution changes.") {
@ -1492,6 +1503,8 @@ public class Options {
*/
public static int getPort() { return port; }
public static boolean noSingleInstance() { return noSingleInstance; }
/**
* Returns the cursor scale.
* @return the scale [0.5, 2]