implement EDDN sender of commodity
This commit is contained in:
@@ -1,6 +1,7 @@
|
|||||||
package ru.trader.edce.entities;
|
package ru.trader.edce.entities;
|
||||||
|
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
|
|
||||||
public class Commodity {
|
public class Commodity {
|
||||||
@@ -8,11 +9,13 @@ public class Commodity {
|
|||||||
private String name;
|
private String name;
|
||||||
private long buyPrice;
|
private long buyPrice;
|
||||||
private long sellPrice;
|
private long sellPrice;
|
||||||
|
private long meanPrice;
|
||||||
private int demandBracket;
|
private int demandBracket;
|
||||||
private int stockBracket;
|
private int stockBracket;
|
||||||
private long stock;
|
private long stock;
|
||||||
private long demand;
|
private long demand;
|
||||||
private String categoryname;
|
private String categoryname;
|
||||||
|
private List<String> statusFlags;
|
||||||
|
|
||||||
public long getId() {
|
public long getId() {
|
||||||
return id;
|
return id;
|
||||||
@@ -46,6 +49,14 @@ public class Commodity {
|
|||||||
this.sellPrice = sellPrice;
|
this.sellPrice = sellPrice;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public long getMeanPrice() {
|
||||||
|
return meanPrice;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setMeanPrice(long meanPrice) {
|
||||||
|
this.meanPrice = meanPrice;
|
||||||
|
}
|
||||||
|
|
||||||
public int getDemandBracket() {
|
public int getDemandBracket() {
|
||||||
return demandBracket;
|
return demandBracket;
|
||||||
}
|
}
|
||||||
@@ -66,6 +77,10 @@ public class Commodity {
|
|||||||
return stockBracket != 0 ? stock : 0;
|
return stockBracket != 0 ? stock : 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public long getRawStock() {
|
||||||
|
return stock;
|
||||||
|
}
|
||||||
|
|
||||||
public void setStock(long stock) {
|
public void setStock(long stock) {
|
||||||
this.stock = stock;
|
this.stock = stock;
|
||||||
}
|
}
|
||||||
@@ -74,6 +89,10 @@ public class Commodity {
|
|||||||
return demandBracket != 0 ? demand : 0;
|
return demandBracket != 0 ? demand : 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public long getRawDemand() {
|
||||||
|
return demand;
|
||||||
|
}
|
||||||
|
|
||||||
public void setDemand(long demand) {
|
public void setDemand(long demand) {
|
||||||
this.demand = demand;
|
this.demand = demand;
|
||||||
}
|
}
|
||||||
@@ -86,6 +105,14 @@ public class Commodity {
|
|||||||
this.categoryname = categoryname;
|
this.categoryname = categoryname;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public List<String> getStatusFlags() {
|
||||||
|
return statusFlags;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setStatusFlags(List<String> statusFlags) {
|
||||||
|
this.statusFlags = statusFlags;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean equals(Object o) {
|
public boolean equals(Object o) {
|
||||||
if (this == o) return true;
|
if (this == o) return true;
|
||||||
|
|||||||
92
utils/src/main/java/ru/trader/emdn/Sender.java
Normal file
92
utils/src/main/java/ru/trader/emdn/Sender.java
Normal file
@@ -0,0 +1,92 @@
|
|||||||
|
package ru.trader.emdn;
|
||||||
|
|
||||||
|
import org.apache.http.HttpEntity;
|
||||||
|
import org.apache.http.HttpHost;
|
||||||
|
import org.apache.http.client.methods.HttpPost;
|
||||||
|
import org.apache.http.entity.StringEntity;
|
||||||
|
import org.apache.http.impl.client.*;
|
||||||
|
import org.apache.http.protocol.HTTP;
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
import ru.trader.edce.entities.EDPacket;
|
||||||
|
import ru.trader.emdn.entities.Converter;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
|
||||||
|
public class Sender {
|
||||||
|
private final static Logger LOG = LoggerFactory.getLogger(Sender.class);
|
||||||
|
private final CloseableHttpClient httpClient;
|
||||||
|
private final Converter converter;
|
||||||
|
private String url;
|
||||||
|
|
||||||
|
public Sender(String url) {
|
||||||
|
this(url, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
public Sender(String url, String proxyServer, int port) {
|
||||||
|
this(url, new HttpHost(proxyServer,port));
|
||||||
|
}
|
||||||
|
|
||||||
|
public Sender(String url, HttpHost proxy) {
|
||||||
|
this.url = url;
|
||||||
|
httpClient = createClient(proxy);
|
||||||
|
converter = new Converter();
|
||||||
|
}
|
||||||
|
|
||||||
|
private CloseableHttpClient createClient(HttpHost proxy){
|
||||||
|
HttpClientBuilder builder = HttpClients.custom();
|
||||||
|
if (proxy != null){
|
||||||
|
builder.setProxy(proxy);
|
||||||
|
}
|
||||||
|
return builder.build();
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getUrl() {
|
||||||
|
return url;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setUrl(String url) {
|
||||||
|
this.url = url;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean send(EDPacket edcePack, String soft, String version){
|
||||||
|
String json;
|
||||||
|
try {
|
||||||
|
json = converter.convertToCommodity(edcePack, soft, version);
|
||||||
|
} catch (IOException e) {
|
||||||
|
LOG.warn("Error on convert EDCE packet to EDDN:", e);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return send(json);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private boolean send(String json){
|
||||||
|
HttpPost httpPost = new HttpPost(url);
|
||||||
|
try {
|
||||||
|
StringEntity stringEntity = new StringEntity(json);
|
||||||
|
httpPost.setEntity(stringEntity);
|
||||||
|
httpPost.setHeader(HTTP.CONTENT_TYPE, "application/json");
|
||||||
|
return httpClient.execute(httpPost, new AbstractResponseHandler<Boolean>() {
|
||||||
|
@Override
|
||||||
|
public Boolean handleEntity(HttpEntity entity) throws IOException {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
} catch (IOException e) {
|
||||||
|
LOG.error("Error on send JSON to {}:", url);
|
||||||
|
LOG.error("", e);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
public void close() throws IOException {
|
||||||
|
httpClient.close();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
86
utils/src/main/java/ru/trader/emdn/entities/Converter.java
Normal file
86
utils/src/main/java/ru/trader/emdn/entities/Converter.java
Normal file
@@ -0,0 +1,86 @@
|
|||||||
|
package ru.trader.emdn.entities;
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.core.JsonGenerator;
|
||||||
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||||
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
import ru.trader.edce.entities.Commodity;
|
||||||
|
import ru.trader.edce.entities.EDPacket;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.StringWriter;
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
import java.time.format.DateTimeFormatter;
|
||||||
|
|
||||||
|
public class Converter {
|
||||||
|
private final static Logger LOG = LoggerFactory.getLogger(Converter.class);
|
||||||
|
|
||||||
|
private final ObjectMapper mapper;
|
||||||
|
private final static ObjectMapper DEFAULT_MAPPER = new ObjectMapper();
|
||||||
|
|
||||||
|
public Converter() {
|
||||||
|
this(DEFAULT_MAPPER);
|
||||||
|
}
|
||||||
|
|
||||||
|
public Converter(ObjectMapper mapper) {
|
||||||
|
this.mapper = mapper;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Nullable
|
||||||
|
public String convertToCommodity(EDPacket edce, String soft, String version) throws IOException {
|
||||||
|
if (edce.getCommander() == null || edce.getLastSystem() == null || edce.getLastStarport() == null
|
||||||
|
|| edce.getLastStarport().getCommodities() == null || edce.getLastStarport().getCommodities().isEmpty()){
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
String uploaderId = edce.getCommander().getName();
|
||||||
|
|
||||||
|
StringWriter writer = new StringWriter();
|
||||||
|
try (JsonGenerator generator = mapper.getFactory().createGenerator(writer)){
|
||||||
|
generator.writeStartObject();
|
||||||
|
generator.writeStringField("$schemaRef", SUPPORT_VERSIONS.V3.getSchema());
|
||||||
|
generator.writeObjectFieldStart("header");
|
||||||
|
generator.writeStringField("uploaderID", uploaderId);
|
||||||
|
generator.writeStringField("softwareName", soft);
|
||||||
|
generator.writeStringField("softwareVersion", version);
|
||||||
|
generator.writeEndObject(); //header
|
||||||
|
generator.writeObjectFieldStart("message");
|
||||||
|
generator.writeStringField("systemName", edce.getLastSystem().getName());
|
||||||
|
generator.writeStringField("stationName", edce.getLastStarport().getName());
|
||||||
|
generator.writeStringField("timestamp", LocalDateTime.now().format(DateTimeFormatter.ISO_OFFSET_DATE_TIME));
|
||||||
|
generator.writeArrayFieldStart("commodities");
|
||||||
|
boolean hasMarketCommodity = false;
|
||||||
|
for (Commodity commodity : edce.getLastStarport().getCommodities()) {
|
||||||
|
if ("NonMarketable".equals(commodity.getCategoryname())) continue;
|
||||||
|
hasMarketCommodity = true;
|
||||||
|
generator.writeStartObject();
|
||||||
|
generator.writeStringField("name", commodity.getName());
|
||||||
|
generator.writeNumberField("meanPrice", commodity.getMeanPrice());
|
||||||
|
generator.writeNumberField("buyPrice", commodity.getBuyPrice());
|
||||||
|
generator.writeNumberField("stock", commodity.getRawStock());
|
||||||
|
generator.writeNumberField("stockBracket", commodity.getStockBracket());
|
||||||
|
generator.writeNumberField("sellPrice", commodity.getSellPrice());
|
||||||
|
generator.writeNumberField("demand", commodity.getDemand());
|
||||||
|
generator.writeNumberField("demandBracket", commodity.getDemandBracket());
|
||||||
|
if (commodity.getStatusFlags() != null && !commodity.getStatusFlags().isEmpty()){
|
||||||
|
generator.writeArrayFieldStart("statusFlags");
|
||||||
|
for (String s : commodity.getStatusFlags()) {
|
||||||
|
generator.writeString(s);
|
||||||
|
}
|
||||||
|
generator.writeEndArray();
|
||||||
|
}
|
||||||
|
generator.writeEndObject();
|
||||||
|
}
|
||||||
|
if (!hasMarketCommodity) return null;
|
||||||
|
|
||||||
|
generator.writeEndArray();
|
||||||
|
generator.writeEndObject(); //message
|
||||||
|
generator.writeEndObject(); //root
|
||||||
|
generator.flush();
|
||||||
|
}
|
||||||
|
|
||||||
|
return writer.toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -9,6 +9,10 @@ public enum SUPPORT_VERSIONS {
|
|||||||
|
|
||||||
private final String schema;
|
private final String schema;
|
||||||
|
|
||||||
|
public String getSchema() {
|
||||||
|
return schema;
|
||||||
|
}
|
||||||
|
|
||||||
private SUPPORT_VERSIONS(String schema) {
|
private SUPPORT_VERSIONS(String schema) {
|
||||||
this.schema = schema;
|
this.schema = schema;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user