reset offer protocol after first result
This commit is contained in:
parent
31782e5255
commit
9a5d2d5862
2 changed files with 38 additions and 17 deletions
|
@ -937,24 +937,30 @@ public class OpenOfferManager implements PeerManager.Listener, DecryptedDirectMe
|
||||||
log.info("Adding open offer {}", openOffer.getId());
|
log.info("Adding open offer {}", openOffer.getId());
|
||||||
synchronized (openOffers.getList()) {
|
synchronized (openOffers.getList()) {
|
||||||
openOffers.add(openOffer);
|
openOffers.add(openOffer);
|
||||||
}
|
|
||||||
if (openOffer.getOffer().getOfferPayload().getReserveTxKeyImages() != null) {
|
if (openOffer.getOffer().getOfferPayload().getReserveTxKeyImages() != null) {
|
||||||
xmrConnectionService.getKeyImagePoller().addKeyImages(openOffer.getOffer().getOfferPayload().getReserveTxKeyImages(), OPEN_OFFER_GROUP_KEY_IMAGE_ID);
|
xmrConnectionService.getKeyImagePoller().addKeyImages(openOffer.getOffer().getOfferPayload().getReserveTxKeyImages(), OPEN_OFFER_GROUP_KEY_IMAGE_ID);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private void removeOpenOffer(OpenOffer openOffer) {
|
private void removeOpenOffer(OpenOffer openOffer) {
|
||||||
log.info("Removing open offer {}", openOffer.getId());
|
log.info("Removing open offer {}", openOffer.getId());
|
||||||
synchronized (openOffers.getList()) {
|
synchronized (openOffers.getList()) {
|
||||||
openOffers.remove(openOffer);
|
openOffers.remove(openOffer);
|
||||||
|
if (openOffer.getOffer().getOfferPayload().getReserveTxKeyImages() != null) {
|
||||||
|
xmrConnectionService.getKeyImagePoller().removeKeyImages(openOffer.getOffer().getOfferPayload().getReserveTxKeyImages(), OPEN_OFFER_GROUP_KEY_IMAGE_ID);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// cancel place offer protocol
|
||||||
|
ThreadUtils.execute(() -> {
|
||||||
|
synchronized (processOffersLock) {
|
||||||
synchronized (placeOfferProtocols) {
|
synchronized (placeOfferProtocols) {
|
||||||
PlaceOfferProtocol protocol = placeOfferProtocols.remove(openOffer.getId());
|
PlaceOfferProtocol protocol = placeOfferProtocols.remove(openOffer.getId());
|
||||||
if (protocol != null) protocol.cancelOffer();
|
if (protocol != null) protocol.cancelOffer();
|
||||||
}
|
}
|
||||||
if (openOffer.getOffer().getOfferPayload().getReserveTxKeyImages() != null) {
|
|
||||||
xmrConnectionService.getKeyImagePoller().removeKeyImages(openOffer.getOffer().getOfferPayload().getReserveTxKeyImages(), OPEN_OFFER_GROUP_KEY_IMAGE_ID);
|
|
||||||
}
|
}
|
||||||
|
}, THREAD_ID);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void cancelOpenOffersOnSpent(String keyImage) {
|
private void cancelOpenOffersOnSpent(String keyImage) {
|
||||||
|
@ -1455,7 +1461,8 @@ public class OpenOfferManager implements PeerManager.Listener, DecryptedDirectMe
|
||||||
|
|
||||||
private void signAndPostOffer(OpenOffer openOffer,
|
private void signAndPostOffer(OpenOffer openOffer,
|
||||||
boolean useSavingsWallet, // TODO: remove this?
|
boolean useSavingsWallet, // TODO: remove this?
|
||||||
TransactionResultHandler resultHandler, ErrorMessageHandler errorMessageHandler) {
|
TransactionResultHandler resultHandler,
|
||||||
|
ErrorMessageHandler errorMessageHandler) {
|
||||||
log.info("Signing and posting offer " + openOffer.getId());
|
log.info("Signing and posting offer " + openOffer.getId());
|
||||||
|
|
||||||
// create model
|
// create model
|
||||||
|
|
|
@ -31,6 +31,8 @@ import haveno.core.offer.placeoffer.tasks.ValidateOffer;
|
||||||
import haveno.core.trade.handlers.TransactionResultHandler;
|
import haveno.core.trade.handlers.TransactionResultHandler;
|
||||||
import haveno.core.trade.protocol.TradeProtocol;
|
import haveno.core.trade.protocol.TradeProtocol;
|
||||||
import haveno.network.p2p.NodeAddress;
|
import haveno.network.p2p.NodeAddress;
|
||||||
|
|
||||||
|
import org.bitcoinj.core.Transaction;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
|
@ -39,8 +41,8 @@ public class PlaceOfferProtocol {
|
||||||
|
|
||||||
private final PlaceOfferModel model;
|
private final PlaceOfferModel model;
|
||||||
private Timer timeoutTimer;
|
private Timer timeoutTimer;
|
||||||
private final TransactionResultHandler resultHandler;
|
private TransactionResultHandler resultHandler;
|
||||||
private final ErrorMessageHandler errorMessageHandler;
|
private ErrorMessageHandler errorMessageHandler;
|
||||||
private TaskRunner<PlaceOfferModel> taskRunner;
|
private TaskRunner<PlaceOfferModel> taskRunner;
|
||||||
|
|
||||||
|
|
||||||
|
@ -118,7 +120,7 @@ public class PlaceOfferProtocol {
|
||||||
() -> {
|
() -> {
|
||||||
log.debug("sequence at handleSignOfferResponse completed");
|
log.debug("sequence at handleSignOfferResponse completed");
|
||||||
stopTimeoutTimer();
|
stopTimeoutTimer();
|
||||||
resultHandler.handleResult(model.getTransaction()); // TODO (woodser): XMR transaction instead
|
handleResult(model.getTransaction()); // TODO: use XMR transaction instead
|
||||||
},
|
},
|
||||||
(errorMessage) -> {
|
(errorMessage) -> {
|
||||||
if (model.isOfferAddedToOfferBook()) {
|
if (model.isOfferAddedToOfferBook()) {
|
||||||
|
@ -140,21 +142,27 @@ public class PlaceOfferProtocol {
|
||||||
taskRunner.run();
|
taskRunner.run();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void startTimeoutTimer() {
|
public synchronized void startTimeoutTimer() {
|
||||||
|
if (resultHandler == null) return;
|
||||||
stopTimeoutTimer();
|
stopTimeoutTimer();
|
||||||
timeoutTimer = UserThread.runAfter(() -> {
|
timeoutTimer = UserThread.runAfter(() -> {
|
||||||
handleError(Res.get("createOffer.timeoutAtPublishing"));
|
handleError(Res.get("createOffer.timeoutAtPublishing"));
|
||||||
}, TradeProtocol.TRADE_STEP_TIMEOUT_SECONDS);
|
}, TradeProtocol.TRADE_STEP_TIMEOUT_SECONDS);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void stopTimeoutTimer() {
|
private synchronized void stopTimeoutTimer() {
|
||||||
if (timeoutTimer != null) {
|
if (timeoutTimer != null) {
|
||||||
timeoutTimer.stop();
|
timeoutTimer.stop();
|
||||||
timeoutTimer = null;
|
timeoutTimer = null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void handleError(String errorMessage) {
|
private synchronized void handleResult(Transaction transaction) {
|
||||||
|
resultHandler.handleResult(transaction);
|
||||||
|
resetHandlers();
|
||||||
|
}
|
||||||
|
|
||||||
|
private synchronized void handleError(String errorMessage) {
|
||||||
if (timeoutTimer != null) {
|
if (timeoutTimer != null) {
|
||||||
taskRunner.cancel();
|
taskRunner.cancel();
|
||||||
if (!model.getOpenOffer().isCanceled()) {
|
if (!model.getOpenOffer().isCanceled()) {
|
||||||
|
@ -163,5 +171,11 @@ public class PlaceOfferProtocol {
|
||||||
stopTimeoutTimer();
|
stopTimeoutTimer();
|
||||||
errorMessageHandler.handleErrorMessage(errorMessage);
|
errorMessageHandler.handleErrorMessage(errorMessage);
|
||||||
}
|
}
|
||||||
|
resetHandlers();
|
||||||
|
}
|
||||||
|
|
||||||
|
private synchronized void resetHandlers() {
|
||||||
|
resultHandler = null;
|
||||||
|
errorMessageHandler = null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue