implement EDDN sender of commodity
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
package ru.trader.edce.entities;
|
||||
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
|
||||
public class Commodity {
|
||||
@@ -8,11 +9,13 @@ public class Commodity {
|
||||
private String name;
|
||||
private long buyPrice;
|
||||
private long sellPrice;
|
||||
private long meanPrice;
|
||||
private int demandBracket;
|
||||
private int stockBracket;
|
||||
private long stock;
|
||||
private long demand;
|
||||
private String categoryname;
|
||||
private List<String> statusFlags;
|
||||
|
||||
public long getId() {
|
||||
return id;
|
||||
@@ -46,6 +49,14 @@ public class Commodity {
|
||||
this.sellPrice = sellPrice;
|
||||
}
|
||||
|
||||
public long getMeanPrice() {
|
||||
return meanPrice;
|
||||
}
|
||||
|
||||
public void setMeanPrice(long meanPrice) {
|
||||
this.meanPrice = meanPrice;
|
||||
}
|
||||
|
||||
public int getDemandBracket() {
|
||||
return demandBracket;
|
||||
}
|
||||
@@ -66,6 +77,10 @@ public class Commodity {
|
||||
return stockBracket != 0 ? stock : 0;
|
||||
}
|
||||
|
||||
public long getRawStock() {
|
||||
return stock;
|
||||
}
|
||||
|
||||
public void setStock(long stock) {
|
||||
this.stock = stock;
|
||||
}
|
||||
@@ -74,6 +89,10 @@ public class Commodity {
|
||||
return demandBracket != 0 ? demand : 0;
|
||||
}
|
||||
|
||||
public long getRawDemand() {
|
||||
return demand;
|
||||
}
|
||||
|
||||
public void setDemand(long demand) {
|
||||
this.demand = demand;
|
||||
}
|
||||
@@ -86,6 +105,14 @@ public class Commodity {
|
||||
this.categoryname = categoryname;
|
||||
}
|
||||
|
||||
public List<String> getStatusFlags() {
|
||||
return statusFlags;
|
||||
}
|
||||
|
||||
public void setStatusFlags(List<String> statusFlags) {
|
||||
this.statusFlags = statusFlags;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object o) {
|
||||
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;
|
||||
|
||||
public String getSchema() {
|
||||
return schema;
|
||||
}
|
||||
|
||||
private SUPPORT_VERSIONS(String schema) {
|
||||
this.schema = schema;
|
||||
}
|
||||
@@ -19,4 +23,4 @@ public enum SUPPORT_VERSIONS {
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user