Browse Source

WIP: trade-bot: include creation/latest timestamp (as appropriate) in trade offer summaries via websocket

pull/16/head
catbref 4 years ago
parent
commit
faa2e9502b
  1. 9
      src/main/java/org/qortal/api/model/CrossChainOfferSummary.java
  2. 22
      src/main/java/org/qortal/api/websocket/TradeOffersWebSocket.java

9
src/main/java/org/qortal/api/model/CrossChainOfferSummary.java

@ -32,17 +32,20 @@ public class CrossChainOfferSummary {
private BTCACCT.Mode mode; private BTCACCT.Mode mode;
private long timestamp;
protected CrossChainOfferSummary() { protected CrossChainOfferSummary() {
/* For JAXB */ /* For JAXB */
} }
public CrossChainOfferSummary(CrossChainTradeData crossChainTradeData) { public CrossChainOfferSummary(CrossChainTradeData crossChainTradeData, long timestamp) {
this.qortalAtAddress = crossChainTradeData.qortalAtAddress; this.qortalAtAddress = crossChainTradeData.qortalAtAddress;
this.qortalCreator = crossChainTradeData.qortalCreator; this.qortalCreator = crossChainTradeData.qortalCreator;
this.qortAmount = crossChainTradeData.qortAmount; this.qortAmount = crossChainTradeData.qortAmount;
this.btcAmount = crossChainTradeData.expectedBitcoin; this.btcAmount = crossChainTradeData.expectedBitcoin;
this.tradeTimeout = crossChainTradeData.tradeTimeout; this.tradeTimeout = crossChainTradeData.tradeTimeout;
this.mode = crossChainTradeData.mode; this.mode = crossChainTradeData.mode;
this.timestamp = timestamp;
} }
public String getQortalAtAddress() { public String getQortalAtAddress() {
@ -69,4 +72,8 @@ public class CrossChainOfferSummary {
return this.mode; return this.mode;
} }
public long getTimestamp() {
return this.timestamp;
}
} }

22
src/main/java/org/qortal/api/websocket/TradeOffersWebSocket.java

@ -20,6 +20,7 @@ import org.qortal.controller.BlockNotifier;
import org.qortal.crosschain.BTCACCT; import org.qortal.crosschain.BTCACCT;
import org.qortal.data.at.ATStateData; import org.qortal.data.at.ATStateData;
import org.qortal.data.block.BlockData; import org.qortal.data.block.BlockData;
import org.qortal.data.crosschain.CrossChainTradeData;
import org.qortal.repository.DataException; import org.qortal.repository.DataException;
import org.qortal.repository.Repository; import org.qortal.repository.Repository;
import org.qortal.repository.RepositoryManager; import org.qortal.repository.RepositoryManager;
@ -89,7 +90,7 @@ public class TradeOffersWebSocket extends WebSocketServlet implements ApiWebSock
} }
} }
crossChainOfferSummaries = produceSummaries(repository, initialAtStates); crossChainOfferSummaries = produceSummaries(repository, initialAtStates, null);
} catch (DataException e) { } catch (DataException e) {
session.close(4003, "generic repository issue"); session.close(4003, "generic repository issue");
return; return;
@ -130,7 +131,7 @@ public class TradeOffersWebSocket extends WebSocketServlet implements ApiWebSock
if (atStates == null) if (atStates == null)
return; return;
List<CrossChainOfferSummary> crossChainOfferSummaries = produceSummaries(repository, atStates); List<CrossChainOfferSummary> crossChainOfferSummaries = produceSummaries(repository, atStates, blockData.getTimestamp());
// Remove any entries unchanged from last time // Remove any entries unchanged from last time
crossChainOfferSummaries.removeIf(offerSummary -> previousAtModes.get(offerSummary.getQortalAtAddress()) == offerSummary.getMode()); crossChainOfferSummaries.removeIf(offerSummary -> previousAtModes.get(offerSummary.getQortalAtAddress()) == offerSummary.getMode());
@ -166,11 +167,22 @@ public class TradeOffersWebSocket extends WebSocketServlet implements ApiWebSock
return true; return true;
} }
private static List<CrossChainOfferSummary> produceSummaries(Repository repository, List<ATStateData> atStates) throws DataException { private static List<CrossChainOfferSummary> produceSummaries(Repository repository, List<ATStateData> atStates, Long timestamp) throws DataException {
List<CrossChainOfferSummary> offerSummaries = new ArrayList<>(); List<CrossChainOfferSummary> offerSummaries = new ArrayList<>();
for (ATStateData atState : atStates) for (ATStateData atState : atStates) {
offerSummaries.add(new CrossChainOfferSummary(BTCACCT.populateTradeData(repository, atState))); CrossChainTradeData crossChainTradeData = BTCACCT.populateTradeData(repository, atState);
long atStateTimestamp;
if (crossChainTradeData.mode == BTCACCT.Mode.OFFERING) {
// We want when trade was created, not when it was last updated
atStateTimestamp = atState.getCreation();
} else {
atStateTimestamp = timestamp != null ? timestamp : repository.getBlockRepository().getTimestampFromHeight(atState.getHeight());
}
offerSummaries.add(new CrossChainOfferSummary(crossChainTradeData, atStateTimestamp));
}
return offerSummaries; return offerSummaries;
} }

Loading…
Cancel
Save