re-implemented train movement simulation
This commit is contained in:
2
pom.xml
2
pom.xml
@@ -4,7 +4,7 @@
|
|||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
<groupId>de.srsoftware</groupId>
|
<groupId>de.srsoftware</groupId>
|
||||||
<artifactId>web4rail</artifactId>
|
<artifactId>web4rail</artifactId>
|
||||||
<version>0.11.20</version>
|
<version>0.11.21</version>
|
||||||
<name>Web4Rail</name>
|
<name>Web4Rail</name>
|
||||||
<packaging>jar</packaging>
|
<packaging>jar</packaging>
|
||||||
<description>Java Model Railway Control</description>
|
<description>Java Model Railway Control</description>
|
||||||
|
|||||||
@@ -7,7 +7,7 @@
|
|||||||
</appender>
|
</appender>
|
||||||
|
|
||||||
<logger name="de.srsoftware.web4rail" level="DEBUG"/>
|
<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.Command" level="INFO"/>
|
||||||
<logger name="de.srsoftware.web4rail.ControlUnit" level="INFO"/>
|
<logger name="de.srsoftware.web4rail.ControlUnit" level="INFO"/>
|
||||||
|
|
||||||
|
|||||||
@@ -115,6 +115,7 @@ SetPower : Strom schalten
|
|||||||
Set speed to : Geschwindigkeit setzen
|
Set speed to : Geschwindigkeit setzen
|
||||||
Setup actions : Aktivierungs-Aktionen
|
Setup actions : Aktivierungs-Aktionen
|
||||||
Signals : Signale
|
Signals : Signale
|
||||||
|
Simulating movement of {}... : Simuliere Fahr von {}...
|
||||||
SOUTH : Süden
|
SOUTH : Süden
|
||||||
Start actions : Start-Aktionen
|
Start actions : Start-Aktionen
|
||||||
Started {} : {} gestartet
|
Started {} : {} gestartet
|
||||||
|
|||||||
@@ -8,17 +8,13 @@ import java.io.IOException;
|
|||||||
import java.io.OutputStream;
|
import java.io.OutputStream;
|
||||||
import java.io.OutputStreamWriter;
|
import java.io.OutputStreamWriter;
|
||||||
import java.lang.reflect.InvocationTargetException;
|
import java.lang.reflect.InvocationTargetException;
|
||||||
import java.net.FileNameMap;
|
|
||||||
import java.net.InetAddress;
|
import java.net.InetAddress;
|
||||||
import java.net.InetSocketAddress;
|
import java.net.InetSocketAddress;
|
||||||
import java.net.URI;
|
import java.net.URI;
|
||||||
import java.net.URLConnection;
|
|
||||||
import java.net.URLDecoder;
|
import java.net.URLDecoder;
|
||||||
import java.nio.file.Files;
|
import java.nio.file.Files;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
|
||||||
import java.util.Vector;
|
|
||||||
|
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
@@ -163,6 +159,18 @@ public class Application extends BaseClass{
|
|||||||
return inflate(new String(data,UTF8));
|
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
|
* sends a response generated from the application to a given client
|
||||||
* @param client
|
* @param client
|
||||||
@@ -210,37 +218,19 @@ public class Application extends BaseClass{
|
|||||||
File file = new File(System.getProperty("user.dir")+"/resources"+uri);
|
File file = new File(System.getProperty("user.dir")+"/resources"+uri);
|
||||||
LOG.debug("requesting file: {}",file);
|
LOG.debug("requesting file: {}",file);
|
||||||
if (file.exists()) {
|
if (file.exists()) {
|
||||||
String mime = mimeOf(file);
|
client.getResponseHeaders().add("Content-Type", mimeOf(file));
|
||||||
LOG.debug("Mime type: {}",mime);
|
|
||||||
client.getResponseHeaders().add("Content-Type", mime);
|
|
||||||
LOG.debug("Length: {}",file.length());
|
|
||||||
client.sendResponseHeaders(200, file.length());
|
client.sendResponseHeaders(200, file.length());
|
||||||
LOG.debug("Sent headers...");
|
|
||||||
OutputStream out = client.getResponseBody();
|
OutputStream out = client.getResponseBody();
|
||||||
FileInputStream in = new FileInputStream(file);
|
FileInputStream in = new FileInputStream(file);
|
||||||
in.transferTo(out);
|
in.transferTo(out);
|
||||||
out.flush();
|
out.flush();
|
||||||
LOG.debug("transferred file");
|
|
||||||
in.close();
|
in.close();
|
||||||
out.close();
|
out.close();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
LOG.debug("not found...");
|
|
||||||
sendError(client,404,t("Could not find \"{}\"",uri));
|
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
|
* sends a response to a given client
|
||||||
* @param client
|
* @param client
|
||||||
|
|||||||
@@ -39,6 +39,7 @@ import de.srsoftware.web4rail.tags.Input;
|
|||||||
import de.srsoftware.web4rail.tags.Label;
|
import de.srsoftware.web4rail.tags.Label;
|
||||||
import de.srsoftware.web4rail.tags.Select;
|
import de.srsoftware.web4rail.tags.Select;
|
||||||
import de.srsoftware.web4rail.tiles.Block;
|
import de.srsoftware.web4rail.tiles.Block;
|
||||||
|
import de.srsoftware.web4rail.tiles.Contact;
|
||||||
import de.srsoftware.web4rail.tiles.Tile;
|
import de.srsoftware.web4rail.tiles.Tile;
|
||||||
|
|
||||||
public class Train extends BaseClass implements Comparable<Train> {
|
public class Train extends BaseClass implements Comparable<Train> {
|
||||||
@@ -94,8 +95,7 @@ public class Train extends BaseClass implements Comparable<Train> {
|
|||||||
if (stop) return;
|
if (stop) return;
|
||||||
Train.this.start();
|
Train.this.start();
|
||||||
if (isSet(destination)) Thread.sleep(1000); // limit load on PathFinder
|
if (isSet(destination)) Thread.sleep(1000); // limit load on PathFinder
|
||||||
}
|
} else Thread.sleep(250);
|
||||||
Thread.sleep(250);
|
|
||||||
}
|
}
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
@@ -636,9 +636,39 @@ public class Train extends BaseClass implements Comparable<Train> {
|
|||||||
route = null;
|
route = null;
|
||||||
return error;
|
return error;
|
||||||
}
|
}
|
||||||
|
startSimulation();
|
||||||
return t("Started {}",this);
|
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() {
|
public Object stopNow() {
|
||||||
quitAutopilot();
|
quitAutopilot();
|
||||||
setSpeed(0);
|
setSpeed(0);
|
||||||
|
|||||||
@@ -80,6 +80,10 @@ public class Contact extends Tile{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public int addr() {
|
||||||
|
return addr;
|
||||||
|
}
|
||||||
|
|
||||||
public Contact addr(int address) {
|
public Contact addr(int address) {
|
||||||
contactsByAddr.remove(addr); // alte ID aus der Map löschen
|
contactsByAddr.remove(addr); // alte ID aus der Map löschen
|
||||||
addr = address;
|
addr = address;
|
||||||
|
|||||||
Reference in New Issue
Block a user