add eddn updater to client
This commit is contained in:
@@ -4,74 +4,27 @@ import org.slf4j.Logger;
|
|||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
import ru.trader.controllers.MainController;
|
import ru.trader.controllers.MainController;
|
||||||
import ru.trader.emdn.EMDN;
|
import ru.trader.emdn.EMDN;
|
||||||
import ru.trader.emdn.ItemData;
|
import ru.trader.emdn.entities.Item;
|
||||||
import ru.trader.emdn.entities.Station;
|
import ru.trader.emdn.entities.Message;
|
||||||
import ru.trader.model.MarketModel;
|
import ru.trader.model.*;
|
||||||
import ru.trader.model.support.StationUpdater;
|
import ru.trader.model.support.StationUpdater;
|
||||||
|
|
||||||
import java.util.concurrent.*;
|
import java.util.Optional;
|
||||||
|
import java.util.function.Consumer;
|
||||||
|
|
||||||
public class EMDNUpdater {
|
public class EMDNUpdater {
|
||||||
private final static Logger LOG = LoggerFactory.getLogger(EMDNUpdater.class);
|
private final static Logger LOG = LoggerFactory.getLogger(EMDNUpdater.class);
|
||||||
private final static EMDN emdn = new EMDN();
|
private static EMDN emdn;
|
||||||
private static ScheduledExecutorService executor;
|
|
||||||
private static ScheduledFuture<?> autoupdate;
|
|
||||||
private static MarketModel market;
|
|
||||||
private static EMDNUpdate emdnUpdater;
|
|
||||||
private static long interval;
|
|
||||||
|
|
||||||
public static void updateFromEMDN(StationUpdater updater){
|
|
||||||
}
|
|
||||||
|
|
||||||
private static void update(StationUpdater updater, Station emdnData){
|
|
||||||
/* LOG.trace("Update {} from EMDN", updater.getName());
|
|
||||||
for (StationUpdater.FakeOffer offer : updater.getOffers()) {
|
|
||||||
if (offer.getItem().isMarketItem()){
|
|
||||||
ItemData data = emdnData.getData(offer.getItem().getId());
|
|
||||||
LOG.trace("Update item {} to {}", offer.getItem().getName(), data);
|
|
||||||
if (data != null){
|
|
||||||
offer.setSprice(data.getBuy());
|
|
||||||
offer.setBprice(data.getSell());
|
|
||||||
} else {
|
|
||||||
offer.setSprice(0);
|
|
||||||
offer.setBprice(0);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
LOG.trace("Is not market item, skip");
|
|
||||||
}
|
|
||||||
}*/
|
|
||||||
}
|
|
||||||
|
|
||||||
static void init(){
|
static void init(){
|
||||||
setMarket(MainController.getMarket());
|
emdn = new EMDN(Main.SETTINGS.getEMDNSub(), new MarketUpdater(MainController.getWorld()));
|
||||||
setSub(Main.SETTINGS.getEMDNSub());
|
|
||||||
setActivate(Main.SETTINGS.getEMDNActive());
|
setActivate(Main.SETTINGS.getEMDNActive());
|
||||||
setUpdateOnly(Main.SETTINGS.getEMDNUpdateOnly());
|
|
||||||
if (emdn.isActive())
|
|
||||||
setInterval(Main.SETTINGS.getEMDNAutoUpdate());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void shutdown(){
|
public static void shutdown(){
|
||||||
if (executor != null) {
|
|
||||||
LOG.debug("Shutdown auto update");
|
|
||||||
if (autoupdate != null) autoupdate.cancel(true);
|
|
||||||
executor.shutdownNow();
|
|
||||||
}
|
|
||||||
emdn.shutdown();
|
emdn.shutdown();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void setMarket(MarketModel market) {
|
|
||||||
EMDNUpdater.market = market;
|
|
||||||
EMDNUpdate old = emdnUpdater;
|
|
||||||
emdnUpdater = new EMDNUpdate();
|
|
||||||
if (old != null){
|
|
||||||
setUpdateOnly(old.updater.isUpdateOnly());
|
|
||||||
}
|
|
||||||
if (executor != null){
|
|
||||||
setInterval(interval);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void setSub(String subServer){
|
public static void setSub(String subServer){
|
||||||
emdn.connectTo(subServer);
|
emdn.connectTo(subServer);
|
||||||
}
|
}
|
||||||
@@ -79,56 +32,61 @@ public class EMDNUpdater {
|
|||||||
public static void setActivate(boolean activate){
|
public static void setActivate(boolean activate){
|
||||||
if (activate) {
|
if (activate) {
|
||||||
emdn.start();
|
emdn.start();
|
||||||
}
|
} else {
|
||||||
else {
|
|
||||||
setInterval(0);
|
|
||||||
emdn.stop();
|
emdn.stop();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void setUpdateOnly(boolean updateOnly) {
|
|
||||||
emdnUpdater.updater.setUpdateOnly(updateOnly);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void setInterval(long interval) {
|
private static class MarketUpdater implements Consumer<Message> {
|
||||||
if (emdn.isActive()){
|
|
||||||
if (autoupdate != null){
|
|
||||||
LOG.debug("Stop auto update");
|
|
||||||
autoupdate.cancel(true);
|
|
||||||
autoupdate = null;
|
|
||||||
}
|
|
||||||
if (interval > 0) {
|
|
||||||
if (executor == null) executor = Executors.newSingleThreadScheduledExecutor();
|
|
||||||
LOG.debug("Start auto update each {} sec", interval);
|
|
||||||
autoupdate = executor.scheduleAtFixedRate(emdnUpdater, interval, interval, TimeUnit.SECONDS);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
EMDNUpdater.interval = interval;
|
|
||||||
}
|
|
||||||
|
|
||||||
private static class EMDNUpdate implements Runnable {
|
|
||||||
private final StationUpdater updater;
|
private final StationUpdater updater;
|
||||||
|
private final MarketModel world;
|
||||||
|
|
||||||
private EMDNUpdate() {
|
public MarketUpdater(MarketModel world) {
|
||||||
updater = new StationUpdater(market);
|
this.world = world;
|
||||||
|
this.updater = new StationUpdater(world);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void accept(Message message) {
|
||||||
/* market.getSystemNames().forEach(system -> {
|
if (world == null || message == null) return;
|
||||||
LOG.trace("Auto update {}", system);
|
LOG.trace("Update station from EDDN: {}", message);
|
||||||
if (emdnData != null){
|
SystemModel system = world.get(message.getBody().getSystem().getName());
|
||||||
//TODO: implement new model
|
if (!ModelFabric.isFake(system)) {
|
||||||
//updater.init(system);
|
StationModel station = system.get(message.getBody().getStation().getName());
|
||||||
update(updater, emdnData);
|
if (!ModelFabric.isFake(station)){
|
||||||
|
updater.edit(station);
|
||||||
|
for (Item commodity : message.getBody().getCommodities()) {
|
||||||
|
String id = commodity.getName().toLowerCase().replace(" ","_");
|
||||||
|
Optional<ItemModel> item = world.getItem(id);
|
||||||
|
if (item.isPresent()) {
|
||||||
|
Optional<StationUpdater.FakeOffer> offer = updater.getOffer(item.get());
|
||||||
|
if (offer.isPresent()){
|
||||||
|
fillOffers(offer.get(), commodity);
|
||||||
|
} else {
|
||||||
|
LOG.error("Not found offer in updater, item: {}", item.get());
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
LOG.warn("Not found item {}, id={}", commodity, id);
|
||||||
|
}
|
||||||
|
}
|
||||||
updater.commit();
|
updater.commit();
|
||||||
updater.reset();
|
updater.reset();
|
||||||
} else {
|
} else {
|
||||||
LOG.trace("Not found in EMDN");
|
LOG.trace("Station not found");
|
||||||
}
|
}
|
||||||
});*/
|
} else {
|
||||||
|
LOG.trace("System not found");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void fillOffers(StationUpdater.FakeOffer offer, Item commodity) {
|
||||||
|
offer.setSprice(commodity.getBuyPrice());
|
||||||
|
offer.setSupply(commodity.getSupply());
|
||||||
|
offer.setBprice(commodity.getSellPrice());
|
||||||
|
offer.setDemand(commodity.getDemand());
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -90,7 +90,7 @@ public class Settings {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public String getEMDNSub(){
|
public String getEMDNSub(){
|
||||||
return values.getProperty("emdn.sub","tcp://firehose.elite-market-data.net:9050");
|
return values.getProperty("emdn.sub","tcp://eddn-relay.elite-markets.net:9500");
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setEMDNUpdateOnly(boolean updateOnly){
|
public void setEMDNUpdateOnly(boolean updateOnly){
|
||||||
|
|||||||
@@ -11,7 +11,6 @@ import javafx.scene.layout.GridPane;
|
|||||||
import javafx.scene.layout.Priority;
|
import javafx.scene.layout.Priority;
|
||||||
import javafx.stage.Stage;
|
import javafx.stage.Stage;
|
||||||
import javafx.util.Pair;
|
import javafx.util.Pair;
|
||||||
import ru.trader.EMDNUpdater;
|
|
||||||
import ru.trader.core.Engine;
|
import ru.trader.core.Engine;
|
||||||
import ru.trader.core.MarketFilter;
|
import ru.trader.core.MarketFilter;
|
||||||
import ru.trader.core.VendorFilter;
|
import ru.trader.core.VendorFilter;
|
||||||
@@ -369,7 +368,6 @@ public class Screeners {
|
|||||||
filterController.init();
|
filterController.init();
|
||||||
vFilterController.init();
|
vFilterController.init();
|
||||||
dbEditorController.init();
|
dbEditorController.init();
|
||||||
EMDNUpdater.setMarket(MainController.getMarket());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -9,7 +9,6 @@ import javafx.util.Callback;
|
|||||||
import javafx.util.converter.LongStringConverter;
|
import javafx.util.converter.LongStringConverter;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
import ru.trader.EMDNUpdater;
|
|
||||||
import ru.trader.core.*;
|
import ru.trader.core.*;
|
||||||
import ru.trader.model.ItemModel;
|
import ru.trader.model.ItemModel;
|
||||||
import ru.trader.model.StationModel;
|
import ru.trader.model.StationModel;
|
||||||
@@ -223,10 +222,6 @@ public class StationEditorController {
|
|||||||
ViewUtils.show(items, index);
|
ViewUtils.show(items, index);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void updateFromEMDN(){
|
|
||||||
EMDNUpdater.updateFromEMDN(updater);
|
|
||||||
}
|
|
||||||
|
|
||||||
private class FakeOfferDecoratedRow extends DecoratedRowFactory<StationUpdater.FakeOffer> {
|
private class FakeOfferDecoratedRow extends DecoratedRowFactory<StationUpdater.FakeOffer> {
|
||||||
|
|
||||||
public FakeOfferDecoratedRow() {
|
public FakeOfferDecoratedRow() {
|
||||||
|
|||||||
@@ -64,7 +64,6 @@
|
|||||||
<Button prefWidth="30" onAction="#up"><graphic><Glyph text="FontAwesome|ARROW_UP"/></graphic></Button>
|
<Button prefWidth="30" onAction="#up"><graphic><Glyph text="FontAwesome|ARROW_UP"/></graphic></Button>
|
||||||
<Button prefWidth="30" onAction="#down"><graphic><Glyph text="FontAwesome|ARROW_DOWN"/></graphic></Button>
|
<Button prefWidth="30" onAction="#down"><graphic><Glyph text="FontAwesome|ARROW_DOWN"/></graphic></Button>
|
||||||
<Button prefWidth="30" onAction="#add"><graphic><Glyph text="FontAwesome|PLUS"/></graphic></Button>
|
<Button prefWidth="30" onAction="#add"><graphic><Glyph text="FontAwesome|PLUS"/></graphic></Button>
|
||||||
<Button prefWidth="30" onAction="#updateFromEMDN"><graphic><Glyph text="FontAwesome|REFRESH"/></graphic></Button>
|
|
||||||
</VBox>
|
</VBox>
|
||||||
<TableView fx:id="items" GridPane.rowIndex="4" prefWidth="575" maxHeight="560" editable="true" GridPane.columnIndex="1">
|
<TableView fx:id="items" GridPane.rowIndex="4" prefWidth="575" maxHeight="560" editable="true" GridPane.columnIndex="1">
|
||||||
<columns>
|
<columns>
|
||||||
|
|||||||
Reference in New Issue
Block a user