From 4eee75656a931e0b3e817e73df74486244c57835 Mon Sep 17 00:00:00 2001 From: Mo Date: Sun, 18 Sep 2016 19:25:22 +0300 Subject: [PATCH] add eddn updater to client --- .../src/main/java/ru/trader/EMDNUpdater.java | 136 ++++++------------ client/src/main/java/ru/trader/Settings.java | 2 +- .../java/ru/trader/controllers/Screeners.java | 2 - .../controllers/StationEditorController.java | 5 - client/src/main/resources/view/vEditor.fxml | 1 - 5 files changed, 48 insertions(+), 98 deletions(-) diff --git a/client/src/main/java/ru/trader/EMDNUpdater.java b/client/src/main/java/ru/trader/EMDNUpdater.java index e0f491b..d624eef 100644 --- a/client/src/main/java/ru/trader/EMDNUpdater.java +++ b/client/src/main/java/ru/trader/EMDNUpdater.java @@ -4,74 +4,27 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import ru.trader.controllers.MainController; import ru.trader.emdn.EMDN; -import ru.trader.emdn.ItemData; -import ru.trader.emdn.entities.Station; -import ru.trader.model.MarketModel; +import ru.trader.emdn.entities.Item; +import ru.trader.emdn.entities.Message; +import ru.trader.model.*; import ru.trader.model.support.StationUpdater; -import java.util.concurrent.*; +import java.util.Optional; +import java.util.function.Consumer; public class EMDNUpdater { private final static Logger LOG = LoggerFactory.getLogger(EMDNUpdater.class); - private final static EMDN emdn = new 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"); - } - }*/ - } + private static EMDN emdn; static void init(){ - setMarket(MainController.getMarket()); - setSub(Main.SETTINGS.getEMDNSub()); + emdn = new EMDN(Main.SETTINGS.getEMDNSub(), new MarketUpdater(MainController.getWorld())); setActivate(Main.SETTINGS.getEMDNActive()); - setUpdateOnly(Main.SETTINGS.getEMDNUpdateOnly()); - if (emdn.isActive()) - setInterval(Main.SETTINGS.getEMDNAutoUpdate()); } public static void shutdown(){ - if (executor != null) { - LOG.debug("Shutdown auto update"); - if (autoupdate != null) autoupdate.cancel(true); - executor.shutdownNow(); - } 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){ emdn.connectTo(subServer); } @@ -79,56 +32,61 @@ public class EMDNUpdater { public static void setActivate(boolean activate){ if (activate) { emdn.start(); - } - else { - setInterval(0); + } else { emdn.stop(); } } - public static void setUpdateOnly(boolean updateOnly) { - emdnUpdater.updater.setUpdateOnly(updateOnly); - } - public static void setInterval(long interval) { - 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 static class MarketUpdater implements Consumer { private final StationUpdater updater; + private final MarketModel world; - private EMDNUpdate() { - updater = new StationUpdater(market); + public MarketUpdater(MarketModel world) { + this.world = world; + this.updater = new StationUpdater(world); } @Override - public void run() { -/* market.getSystemNames().forEach(system -> { - LOG.trace("Auto update {}", system); - if (emdnData != null){ - //TODO: implement new model - //updater.init(system); - update(updater, emdnData); + public void accept(Message message) { + if (world == null || message == null) return; + LOG.trace("Update station from EDDN: {}", message); + SystemModel system = world.get(message.getBody().getSystem().getName()); + if (!ModelFabric.isFake(system)) { + StationModel station = system.get(message.getBody().getStation().getName()); + if (!ModelFabric.isFake(station)){ + updater.edit(station); + for (Item commodity : message.getBody().getCommodities()) { + String id = commodity.getName().toLowerCase().replace(" ","_"); + Optional item = world.getItem(id); + if (item.isPresent()) { + Optional 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.reset(); } 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()); + } + } - } diff --git a/client/src/main/java/ru/trader/Settings.java b/client/src/main/java/ru/trader/Settings.java index 175303b..c8a7d98 100644 --- a/client/src/main/java/ru/trader/Settings.java +++ b/client/src/main/java/ru/trader/Settings.java @@ -90,7 +90,7 @@ public class Settings { } 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){ diff --git a/client/src/main/java/ru/trader/controllers/Screeners.java b/client/src/main/java/ru/trader/controllers/Screeners.java index d8c3916..220fd7e 100644 --- a/client/src/main/java/ru/trader/controllers/Screeners.java +++ b/client/src/main/java/ru/trader/controllers/Screeners.java @@ -11,7 +11,6 @@ import javafx.scene.layout.GridPane; import javafx.scene.layout.Priority; import javafx.stage.Stage; import javafx.util.Pair; -import ru.trader.EMDNUpdater; import ru.trader.core.Engine; import ru.trader.core.MarketFilter; import ru.trader.core.VendorFilter; @@ -369,7 +368,6 @@ public class Screeners { filterController.init(); vFilterController.init(); dbEditorController.init(); - EMDNUpdater.setMarket(MainController.getMarket()); } } diff --git a/client/src/main/java/ru/trader/controllers/StationEditorController.java b/client/src/main/java/ru/trader/controllers/StationEditorController.java index d919ea4..70c4a04 100644 --- a/client/src/main/java/ru/trader/controllers/StationEditorController.java +++ b/client/src/main/java/ru/trader/controllers/StationEditorController.java @@ -9,7 +9,6 @@ import javafx.util.Callback; import javafx.util.converter.LongStringConverter; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import ru.trader.EMDNUpdater; import ru.trader.core.*; import ru.trader.model.ItemModel; import ru.trader.model.StationModel; @@ -223,10 +222,6 @@ public class StationEditorController { ViewUtils.show(items, index); } - public void updateFromEMDN(){ - EMDNUpdater.updateFromEMDN(updater); - } - private class FakeOfferDecoratedRow extends DecoratedRowFactory { public FakeOfferDecoratedRow() { diff --git a/client/src/main/resources/view/vEditor.fxml b/client/src/main/resources/view/vEditor.fxml index 557506d..4ea7ba3 100644 --- a/client/src/main/resources/view/vEditor.fxml +++ b/client/src/main/resources/view/vEditor.fxml @@ -64,7 +64,6 @@ -