diff --git a/pom.xml b/pom.xml
index 8d8a222..d113282 100644
--- a/pom.xml
+++ b/pom.xml
@@ -4,7 +4,7 @@
4.0.0
de.srsoftware
web4rail
- 0.11.20
+ 0.11.21
Web4Rail
jar
Java Model Railway Control
diff --git a/resources/logback.xml b/resources/logback.xml
index 79b2091..0a48ec6 100644
--- a/resources/logback.xml
+++ b/resources/logback.xml
@@ -7,7 +7,7 @@
-
+
diff --git a/resources/translations/Application.de.translation b/resources/translations/Application.de.translation
index b0a268b..b199cb0 100644
--- a/resources/translations/Application.de.translation
+++ b/resources/translations/Application.de.translation
@@ -115,6 +115,7 @@ SetPower : Strom schalten
Set speed to : Geschwindigkeit setzen
Setup actions : Aktivierungs-Aktionen
Signals : Signale
+Simulating movement of {}... : Simuliere Fahr von {}...
SOUTH : Süden
Start actions : Start-Aktionen
Started {} : {} gestartet
diff --git a/src/main/java/de/srsoftware/web4rail/Application.java b/src/main/java/de/srsoftware/web4rail/Application.java
index 1fe6a00..92ad5ac 100644
--- a/src/main/java/de/srsoftware/web4rail/Application.java
+++ b/src/main/java/de/srsoftware/web4rail/Application.java
@@ -8,17 +8,13 @@ import java.io.IOException;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.lang.reflect.InvocationTargetException;
-import java.net.FileNameMap;
import java.net.InetAddress;
import java.net.InetSocketAddress;
import java.net.URI;
-import java.net.URLConnection;
import java.net.URLDecoder;
import java.nio.file.Files;
import java.util.Date;
import java.util.HashMap;
-import java.util.List;
-import java.util.Vector;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -163,6 +159,18 @@ public class Application extends BaseClass{
return inflate(new String(data,UTF8));
}
+ private static String mimeOf(File file) throws IOException {
+ String[] parts = file.toString().split("\\.");
+ switch (parts[parts.length-1].toLowerCase()) {
+ case "js":
+ return "application/javascript";
+ case "css":
+ return "text/css";
+ }
+ LOG.warn("No conten type stored for {}!",file);
+ return Files.probeContentType(file.toPath());
+ }
+
/**
* sends a response generated from the application to a given client
* @param client
@@ -210,37 +218,19 @@ public class Application extends BaseClass{
File file = new File(System.getProperty("user.dir")+"/resources"+uri);
LOG.debug("requesting file: {}",file);
if (file.exists()) {
- String mime = mimeOf(file);
- LOG.debug("Mime type: {}",mime);
- client.getResponseHeaders().add("Content-Type", mime);
- LOG.debug("Length: {}",file.length());
+ client.getResponseHeaders().add("Content-Type", mimeOf(file));
client.sendResponseHeaders(200, file.length());
- LOG.debug("Sent headers...");
OutputStream out = client.getResponseBody();
FileInputStream in = new FileInputStream(file);
in.transferTo(out);
out.flush();
- LOG.debug("transferred file");
in.close();
out.close();
return;
}
- LOG.debug("not found...");
sendError(client,404,t("Could not find \"{}\"",uri));
}
- private static String mimeOf(File file) throws IOException {
- String[] parts = file.toString().split("\\.");
- switch (parts[parts.length-1].toLowerCase()) {
- case "js":
- return "application/javascript";
- case "css":
- return "text/css";
- }
- LOG.warn("No conten type stored for {}!",file);
- return Files.probeContentType(file.toPath());
- }
-
/**
* sends a response to a given client
* @param client
diff --git a/src/main/java/de/srsoftware/web4rail/moving/Train.java b/src/main/java/de/srsoftware/web4rail/moving/Train.java
index 0e99750..ff1ff19 100644
--- a/src/main/java/de/srsoftware/web4rail/moving/Train.java
+++ b/src/main/java/de/srsoftware/web4rail/moving/Train.java
@@ -39,6 +39,7 @@ import de.srsoftware.web4rail.tags.Input;
import de.srsoftware.web4rail.tags.Label;
import de.srsoftware.web4rail.tags.Select;
import de.srsoftware.web4rail.tiles.Block;
+import de.srsoftware.web4rail.tiles.Contact;
import de.srsoftware.web4rail.tiles.Tile;
public class Train extends BaseClass implements Comparable {
@@ -94,8 +95,7 @@ public class Train extends BaseClass implements Comparable {
if (stop) return;
Train.this.start();
if (isSet(destination)) Thread.sleep(1000); // limit load on PathFinder
- }
- Thread.sleep(250);
+ } else Thread.sleep(250);
}
} catch (Exception e) {
e.printStackTrace();
@@ -636,9 +636,39 @@ public class Train extends BaseClass implements Comparable {
route = null;
return error;
}
+ startSimulation();
return t("Started {}",this);
}
+ private void startSimulation() {
+ for (Contact contact : route.contacts()) {
+ if (contact.addr() != 0) return; // simulate train only when all contacts are non-physical
+ }
+ try {
+ Thread.sleep(1000);
+ plan.stream(t("Simulating movement of {}..."));
+ new Thread() {
+ public void run() {
+ for (Tile tile : route.path()) {
+ try {
+ if (tile instanceof Contact) {
+ Contact contact = (Contact) tile;
+ contact.activate(true);
+ sleep(200);
+ contact.activate(false);
+ }
+ sleep(1000);
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ }
+ }
+ };
+ }.start();
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ }
+ }
+
public Object stopNow() {
quitAutopilot();
setSpeed(0);
diff --git a/src/main/java/de/srsoftware/web4rail/tiles/Contact.java b/src/main/java/de/srsoftware/web4rail/tiles/Contact.java
index 7ce7834..0d2502c 100644
--- a/src/main/java/de/srsoftware/web4rail/tiles/Contact.java
+++ b/src/main/java/de/srsoftware/web4rail/tiles/Contact.java
@@ -80,6 +80,10 @@ public class Contact extends Tile{
}
}
+ public int addr() {
+ return addr;
+ }
+
public Contact addr(int address) {
contactsByAddr.remove(addr); // alte ID aus der Map löschen
addr = address;