Browse Source

re-implemented train movement simulation

lookup-tables
Stephan Richter 5 years ago
parent
commit
1ca2402b59
  1. 2
      pom.xml
  2. 2
      resources/logback.xml
  3. 1
      resources/translations/Application.de.translation
  4. 36
      src/main/java/de/srsoftware/web4rail/Application.java
  5. 34
      src/main/java/de/srsoftware/web4rail/moving/Train.java
  6. 4
      src/main/java/de/srsoftware/web4rail/tiles/Contact.java

2
pom.xml

@ -4,7 +4,7 @@ @@ -4,7 +4,7 @@
<modelVersion>4.0.0</modelVersion>
<groupId>de.srsoftware</groupId>
<artifactId>web4rail</artifactId>
<version>0.11.20</version>
<version>0.11.21</version>
<name>Web4Rail</name>
<packaging>jar</packaging>
<description>Java Model Railway Control</description>

2
resources/logback.xml

@ -7,7 +7,7 @@ @@ -7,7 +7,7 @@
</appender>
<logger name="de.srsoftware.web4rail" level="DEBUG"/>
<logger name="de.srsoftware.web4rail.Application" level="DEBUG"/>
<logger name="de.srsoftware.web4rail.Application" level="INFO"/>
<logger name="de.srsoftware.web4rail.Command" level="INFO"/>
<logger name="de.srsoftware.web4rail.ControlUnit" level="INFO"/>

1
resources/translations/Application.de.translation

@ -115,6 +115,7 @@ SetPower : Strom schalten @@ -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

36
src/main/java/de/srsoftware/web4rail/Application.java

@ -8,17 +8,13 @@ import java.io.IOException; @@ -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{ @@ -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{ @@ -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

34
src/main/java/de/srsoftware/web4rail/moving/Train.java

@ -39,6 +39,7 @@ import de.srsoftware.web4rail.tags.Input; @@ -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<Train> {
@ -94,8 +95,7 @@ public class Train extends BaseClass implements Comparable<Train> { @@ -94,8 +95,7 @@ public class Train extends BaseClass implements Comparable<Train> {
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<Train> { @@ -636,9 +636,39 @@ public class Train extends BaseClass implements Comparable<Train> {
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);

4
src/main/java/de/srsoftware/web4rail/tiles/Contact.java

@ -80,6 +80,10 @@ public class Contact extends Tile{ @@ -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;

Loading…
Cancel
Save