From 1ca2402b5959d749e8d434b47c85763487a3f350 Mon Sep 17 00:00:00 2001 From: Stephan Richter Date: Sat, 14 Nov 2020 13:52:21 +0100 Subject: [PATCH] re-implemented train movement simulation --- pom.xml | 2 +- resources/logback.xml | 2 +- .../translations/Application.de.translation | 1 + .../de/srsoftware/web4rail/Application.java | 36 +++++++------------ .../de/srsoftware/web4rail/moving/Train.java | 34 ++++++++++++++++-- .../de/srsoftware/web4rail/tiles/Contact.java | 4 +++ 6 files changed, 52 insertions(+), 27 deletions(-) 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;