use of jmri.DccLocoAddress in project JMRI by JMRI.
the class SprogThrottleManager method requestThrottleSetup.
@Override
public void requestThrottleSetup(LocoAddress a, boolean control) {
// The SPROG protocol doesn't require an interaction with the command
// station for this, so set the address and immediately trigger the callback
// if a throttle is not in use.
DccLocoAddress address = (DccLocoAddress) a;
if (!throttleInUse) {
throttleInUse = true;
log.debug("new SprogThrottle for " + address);
String addr = "" + address.getNumber() + (address.isLongAddress() ? " 0" : "");
SprogMessage m = new SprogMessage(2 + addr.length());
int i = 0;
m.setElement(i++, 'A');
m.setElement(i++, ' ');
for (int j = 0; j < addr.length(); j++) {
m.setElement(i++, addr.charAt(j));
}
((SprogSystemConnectionMemo) adapterMemo).getSprogTrafficController().sendSprogMessage(m, null);
notifyThrottleKnown(new SprogThrottle((SprogSystemConnectionMemo) adapterMemo, address), address);
} else {
failedThrottleRequest(address, "Only one Throttle can be in use at anyone time with the Sprog.");
//javax.swing.JOptionPane.showMessageDialog(null,"Only one Throttle can be in use at anyone time with the Sprog.","Sprog Throttle",javax.swing.JOptionPane.WARNING_MESSAGE);
log.warn("Single SPROG Throttle already in use");
}
}
use of jmri.DccLocoAddress in project JMRI by JMRI.
the class SerialThrottleManager method requestThrottleSetup.
@Override
public void requestThrottleSetup(LocoAddress a, boolean control) {
// the protocol doesn't require an interaction with the command
// station for this, so immediately trigger the callback.
DccLocoAddress address = (DccLocoAddress) a;
log.debug("new throttle for " + address);
notifyThrottleKnown(new SerialThrottle(address), address);
}
use of jmri.DccLocoAddress in project JMRI by JMRI.
the class Mx1ThrottleManager method requestThrottleSetup.
@Override
public void requestThrottleSetup(LocoAddress a, boolean control) {
//We do interact
DccLocoAddress address = (DccLocoAddress) a;
//IN18N
log.debug("new Mx1Throttle for " + address);
notifyThrottleKnown(new Mx1Throttle((Mx1SystemConnectionMemo) adapterMemo, address), address);
}
use of jmri.DccLocoAddress in project JMRI by JMRI.
the class JsonConsistSocketService method onMessage.
@Override
public void onMessage(String type, JsonNode data, Locale locale) throws IOException, JmriException, JsonException {
this.locale = locale;
if (JsonConsist.CONSISTS.equals(type)) {
this.connection.sendMessage(this.service.doGetList(type, locale));
} else {
DccLocoAddress address = new DccLocoAddress(data.path(JSON.ADDRESS).asInt(), data.path(JSON.IS_LONG_ADDRESS).asBoolean());
String name = address.getNumber() + (address.isLongAddress() ? "L" : "");
if (data.path(JSON.METHOD).asText().equals(JSON.PUT)) {
this.connection.sendMessage(this.service.doPut(type, name, data, locale));
} else {
this.connection.sendMessage(this.service.doPost(type, name, data, locale));
}
if (!this.consists.contains(address)) {
this.service.manager.getConsist(address).addConsistListener(this.consistListener);
this.consists.add(address);
}
}
}
use of jmri.DccLocoAddress in project JMRI by JMRI.
the class JsonConsistHttpService method doPost.
/**
* Change the properties and locomotives of a consist.
*
* This method takes as input the JSON representation of a consist as
* provided by {@link #getConsist(Locale, jmri.DccLocoAddress) }.
*
* If present in the JSON, this method sets the following consist
* properties:
* <ul>
* <li>consistID</li>
* <li>consistType</li>
* <li>locomotives (<em>engines</em> in the JSON representation)<br>
* <strong>NOTE</strong> Since this method adds, repositions, and deletes
* locomotives, the JSON representation must contain <em>every</em>
* locomotive that should be in the consist, if it contains the engines
* node.</li>
* </ul>
*
* @param type the JSON message type
* @param locale the locale to throw exceptions in
* @param name the consist address, ignored if data contains an
* {@value jmri.server.json.JSON#ADDRESS} and
* {@value jmri.server.json.JSON#IS_LONG_ADDRESS} nodes
* @param data the consist as a JsonObject
* @return the JSON representation of the Consist
* @throws jmri.server.json.JsonException if there is no consist manager
* (code 503), the consist does not
* exist (code 404), or the consist
* cannot be saved (code 500).
*/
@Override
public JsonNode doPost(String type, String name, JsonNode data, Locale locale) throws JsonException {
if (!this.manager.isConsistManager()) {
// NOI18N
throw new JsonException(503, Bundle.getMessage(locale, "ErrorNoConsistManager"));
}
DccLocoAddress address;
if (data.path(ADDRESS).canConvertToInt()) {
address = new DccLocoAddress(data.path(ADDRESS).asInt(), data.path(IS_LONG_ADDRESS).asBoolean(false));
} else {
address = JsonUtilHttpService.addressForString(data.path(ADDRESS).asText());
}
if (!this.manager.getConsistList().contains(address)) {
throw new JsonException(404, Bundle.getMessage(locale, "ErrorObject", CONSIST, name));
}
Consist consist = this.manager.getConsist(address);
if (data.path(ID).isTextual()) {
consist.setConsistID(data.path(ID).asText());
}
if (data.path(TYPE).isInt()) {
consist.setConsistType(data.path(TYPE).asInt());
}
if (data.path(ENGINES).isArray()) {
ArrayList<DccLocoAddress> engines = new ArrayList<>();
// add every engine
for (JsonNode engine : data.path(ENGINES)) {
DccLocoAddress engineAddress = new DccLocoAddress(engine.path(ADDRESS).asInt(), engine.path(IS_LONG_ADDRESS).asBoolean());
if (!consist.contains(engineAddress)) {
consist.add(engineAddress, engine.path(FORWARD).asBoolean());
}
consist.setPosition(engineAddress, engine.path(POSITION).asInt());
engines.add(engineAddress);
}
// remove engines if needed
ArrayList<DccLocoAddress> consistEngines = new ArrayList<>(consist.getConsistList());
consistEngines.stream().filter((engineAddress) -> (!engines.contains(engineAddress))).forEach((engineAddress) -> {
consist.remove(engineAddress);
});
}
try {
(new ConsistFile()).writeFile(this.manager.getConsistList());
} catch (IOException ex) {
throw new JsonException(500, ex.getLocalizedMessage());
}
return this.getConsist(locale, address);
}
Aggregations