Improved installer, and added more info to readme.
This commit is contained in:
parent
637dee747d
commit
b84f271a40
|
@ -1,6 +1,12 @@
|
||||||
# Rail Signal
|
# Rail Signal
|
||||||
A comprehensive solution to tracking and managing your rail system, in real time.
|
A comprehensive solution to tracking and managing your rail system, in real time.
|
||||||
|
|
||||||
|
## Setup
|
||||||
|
To set up your own Rail Signal, system, you will need to follow the following steps:
|
||||||
|
1. Download and run the Rail Signal API and web app. Go to the [releases](https://github.com/andrewlalis/RailSignalAPI/releases) page to download the latest release. Then, place the JAR file in your desired location, and run it with `java -jar rail-signal.jar`.
|
||||||
|
2. Open the web app (http://localhost:8080 by default) and create a new rail system, and add components and segments to build your network. More information about this will be given later.
|
||||||
|
3. Add components to your actual rail system, and install a driver script onto your device. For Minecraft rail systems using Immersive railroading and some computer mod, you can run `pastebin run jKyAiE8k` to run an installation script. *Please make an issue if you have a system for which there is not yet any available driver.*
|
||||||
|
|
||||||
## Development
|
## Development
|
||||||
To work on and develop Rail Signal, you will need to run both the Java/Spring-Boot backend API, and the Vue/Quasar frontend app.
|
To work on and develop Rail Signal, you will need to run both the Java/Spring-Boot backend API, and the Vue/Quasar frontend app.
|
||||||
|
|
||||||
|
|
|
@ -6,8 +6,12 @@ import nl.andrewl.railsignalapi.dao.ComponentRepository;
|
||||||
import nl.andrewl.railsignalapi.dao.LinkTokenRepository;
|
import nl.andrewl.railsignalapi.dao.LinkTokenRepository;
|
||||||
import nl.andrewl.railsignalapi.live.dto.ComponentDataMessage;
|
import nl.andrewl.railsignalapi.live.dto.ComponentDataMessage;
|
||||||
import nl.andrewl.railsignalapi.live.dto.ComponentMessage;
|
import nl.andrewl.railsignalapi.live.dto.ComponentMessage;
|
||||||
|
import nl.andrewl.railsignalapi.live.dto.SegmentStatusMessage;
|
||||||
|
import nl.andrewl.railsignalapi.live.dto.SwitchUpdateMessage;
|
||||||
import nl.andrewl.railsignalapi.live.websocket.AppUpdateService;
|
import nl.andrewl.railsignalapi.live.websocket.AppUpdateService;
|
||||||
import nl.andrewl.railsignalapi.model.component.Component;
|
import nl.andrewl.railsignalapi.model.component.Component;
|
||||||
|
import nl.andrewl.railsignalapi.model.component.Signal;
|
||||||
|
import nl.andrewl.railsignalapi.model.component.Switch;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
|
||||||
|
@ -52,6 +56,19 @@ public class ComponentDownlinkService {
|
||||||
downlink.send(msg);
|
downlink.send(msg);
|
||||||
appUpdateService.sendUpdate(c.getRailSystem().getId(), msg);
|
appUpdateService.sendUpdate(c.getRailSystem().getId(), msg);
|
||||||
|
|
||||||
|
// Send initial data updates to make sure that devices' state is up to date immediately.
|
||||||
|
if (c instanceof Signal sig) {
|
||||||
|
downlink.send(new SegmentStatusMessage(c.getId(), sig.getSegment().getId(), sig.getSegment().isOccupied()));
|
||||||
|
} else if (c instanceof Switch sw) {
|
||||||
|
long activeConfigId;
|
||||||
|
if (sw.getActiveConfiguration() != null) {
|
||||||
|
activeConfigId = sw.getActiveConfiguration().getId();
|
||||||
|
} else {
|
||||||
|
activeConfigId = sw.getPossibleConfigurations().stream().findAny().orElseThrow().getId();
|
||||||
|
}
|
||||||
|
downlink.send(new SwitchUpdateMessage(c.getId(), activeConfigId));
|
||||||
|
}
|
||||||
|
|
||||||
Set<ComponentDownlink> downlinks = downlinksByCId.computeIfAbsent(c.getId(), aLong -> new HashSet<>());
|
Set<ComponentDownlink> downlinks = downlinksByCId.computeIfAbsent(c.getId(), aLong -> new HashSet<>());
|
||||||
downlinks.add(downlink);
|
downlinks.add(downlink);
|
||||||
}
|
}
|
||||||
|
|
|
@ -148,12 +148,20 @@ end
|
||||||
-- SCRIPT START
|
-- SCRIPT START
|
||||||
|
|
||||||
local config = {}
|
local config = {}
|
||||||
|
local args = {...}
|
||||||
print("Rail Signal Driver Installer for CC:Tweaked")
|
print("Rail Signal Driver Installer for CC:Tweaked")
|
||||||
print("-------------------------------------------")
|
print("-------------------------------------------")
|
||||||
print("Please enter the base URL for your Rail System site.")
|
if #args < 1 then
|
||||||
print(" For example: http://localhost:8080")
|
print("Error: Missing required baseURL argument.")
|
||||||
local baseUrl = readUrl()
|
return
|
||||||
|
end
|
||||||
|
local baseUrl = args[1]
|
||||||
config.apiUrl = baseUrl .. "/api"
|
config.apiUrl = baseUrl .. "/api"
|
||||||
|
local statusResponse = http.get(config.apiUrl .. "/status")
|
||||||
|
if not statusResponse then
|
||||||
|
print("Error: Could not reach the the Rail Signal system at " .. config.apiUrl .. "/status")
|
||||||
|
return
|
||||||
|
end
|
||||||
if startsWith(baseUrl, "https") then
|
if startsWith(baseUrl, "https") then
|
||||||
config.wsUrl = "wss" .. string.sub(baseUrl, 6) .. "/api/ws/component"
|
config.wsUrl = "wss" .. string.sub(baseUrl, 6) .. "/api/ws/component"
|
||||||
else
|
else
|
||||||
|
|
Loading…
Reference in New Issue