Allow exit after frame for text and oneLine mode
This commit is contained in:
committed by
Laurent Clouet
parent
6510bbdbc7
commit
e703b9ea1b
@@ -22,11 +22,16 @@ package com.sheepit.client.standalone;
|
||||
import com.sheepit.client.Client;
|
||||
import com.sheepit.client.Gui;
|
||||
import com.sheepit.client.Log;
|
||||
import sun.misc.Signal;
|
||||
import sun.misc.SignalHandler;
|
||||
|
||||
public class GuiText implements Gui {
|
||||
public static final String type = "text";
|
||||
|
||||
private int framesRendered;
|
||||
|
||||
private int sigIntCount = 0;
|
||||
|
||||
private Log log;
|
||||
|
||||
private Client client;
|
||||
@@ -39,6 +44,30 @@ public class GuiText implements Gui {
|
||||
@Override
|
||||
public void start() {
|
||||
if (client != null) {
|
||||
|
||||
Signal.handle(new Signal("INT"), new SignalHandler() {
|
||||
@Override
|
||||
public void handle(Signal signal) {
|
||||
sigIntCount++;
|
||||
|
||||
if (sigIntCount == 4) {
|
||||
// This is only for ugly issues that might occur
|
||||
System.out.println("WARNING: Hitting Ctrl-C again will force close the application.");
|
||||
}
|
||||
else if (sigIntCount == 5) {
|
||||
Signal.raise(new Signal("INT"));
|
||||
Runtime.getRuntime().halt(0);
|
||||
}
|
||||
else if (client.isRunning() && client.isSuspended() == false) {
|
||||
client.askForStop();
|
||||
System.out.println("Will exit after current frame... Press Ctrl+C again to exit now.");
|
||||
}
|
||||
else {
|
||||
client.stop();
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
client.run();
|
||||
client.stop();
|
||||
}
|
||||
@@ -46,6 +75,7 @@ public class GuiText implements Gui {
|
||||
|
||||
@Override
|
||||
public void stop() {
|
||||
Runtime.getRuntime().halt(0);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -2,14 +2,20 @@ package com.sheepit.client.standalone;
|
||||
|
||||
import com.sheepit.client.Client;
|
||||
import com.sheepit.client.Gui;
|
||||
import sun.misc.Signal;
|
||||
import sun.misc.SignalHandler;
|
||||
|
||||
public class GuiTextOneLine implements Gui {
|
||||
public static final String type = "oneLine";
|
||||
|
||||
private int rendered;
|
||||
private int remaining;
|
||||
private int sigIntCount = 0;
|
||||
|
||||
private String status;
|
||||
private String line;
|
||||
|
||||
private boolean exiting = false;
|
||||
|
||||
private Client client;
|
||||
|
||||
@@ -23,6 +29,26 @@ public class GuiTextOneLine implements Gui {
|
||||
@Override
|
||||
public void start() {
|
||||
if (client != null) {
|
||||
|
||||
Signal.handle(new Signal("INT"), new SignalHandler() {
|
||||
@Override
|
||||
public void handle(Signal signal) {
|
||||
sigIntCount++;
|
||||
|
||||
if (sigIntCount == 5) {
|
||||
Signal.raise(new Signal("INT"));
|
||||
Runtime.getRuntime().halt(0);
|
||||
}
|
||||
else if (client.isRunning() && client.isSuspended() == false) {
|
||||
client.askForStop();
|
||||
exiting = true;
|
||||
}
|
||||
else {
|
||||
client.stop();
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
client.run();
|
||||
client.stop();
|
||||
}
|
||||
@@ -30,6 +56,7 @@ public class GuiTextOneLine implements Gui {
|
||||
|
||||
@Override
|
||||
public void stop() {
|
||||
Runtime.getRuntime().halt(0);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -70,7 +97,7 @@ public class GuiTextOneLine implements Gui {
|
||||
int charToRemove = line.length();
|
||||
|
||||
System.out.print("\r");
|
||||
line = String.format("Frames rendered: %d remaining: %d | %s", rendered, remaining, status);
|
||||
line = String.format("Frames rendered: %d remaining: %d | %s", rendered, remaining, status) + (exiting ? " (Exiting after this frame)" : "");
|
||||
System.out.print(line);
|
||||
for (int i = line.length(); i <= charToRemove; i++) {
|
||||
System.out.print(" ");
|
||||
|
||||
Reference in New Issue
Block a user