Archived
0

add eddn updater to client

This commit is contained in:
Mo
2016-09-18 19:25:22 +03:00
parent ea8ea96fc5
commit 4eee75656a
5 changed files with 48 additions and 98 deletions

View File

@@ -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());
}
} }
} }

View File

@@ -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){

View File

@@ -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());
} }
} }

View File

@@ -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() {

View File

@@ -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>