diff --git a/gui/src/main/java/io/bitsquare/app/gui/BitsquareAppMain.java b/gui/src/main/java/io/bitsquare/app/gui/BitsquareAppMain.java
index 517faa8022..651aa1363f 100644
--- a/gui/src/main/java/io/bitsquare/app/gui/BitsquareAppMain.java
+++ b/gui/src/main/java/io/bitsquare/app/gui/BitsquareAppMain.java
@@ -41,7 +41,7 @@ import joptsimple.OptionParser;
import joptsimple.OptionSet;
import static io.bitsquare.app.BitsquareEnvironment.*;
-import static io.bitsquare.msg.tomp2p.TomP2PMessageModule.*;
+import static io.bitsquare.network.tomp2p.TomP2PNetworkModule.*;
import static io.bitsquare.network.Node.*;
import static java.util.Arrays.asList;
diff --git a/gui/src/main/java/io/bitsquare/app/gui/BitsquareAppModule.java b/gui/src/main/java/io/bitsquare/app/gui/BitsquareAppModule.java
index 3f13e671d7..d043dd7ed5 100644
--- a/gui/src/main/java/io/bitsquare/app/gui/BitsquareAppModule.java
+++ b/gui/src/main/java/io/bitsquare/app/gui/BitsquareAppModule.java
@@ -19,16 +19,20 @@ package io.bitsquare.app.gui;
import io.bitsquare.BitsquareModule;
import io.bitsquare.account.AccountSettings;
+import io.bitsquare.arbitrator.ArbitratorMessageModule;
+import io.bitsquare.arbitrator.tomp2p.TomP2PArbitratorMessageModule;
import io.bitsquare.btc.BitcoinModule;
import io.bitsquare.crypto.CryptoModule;
import io.bitsquare.gui.GuiModule;
-import io.bitsquare.msg.MessageModule;
-import io.bitsquare.msg.tomp2p.TomP2PMessageModule;
+import io.bitsquare.network.NetworkModule;
+import io.bitsquare.network.tomp2p.TomP2PNetworkModule;
import io.bitsquare.offer.OfferModule;
import io.bitsquare.offer.tomp2p.TomP2POfferModule;
import io.bitsquare.persistence.Persistence;
import io.bitsquare.settings.Preferences;
+import io.bitsquare.trade.TradeMessageModule;
import io.bitsquare.trade.TradeModule;
+import io.bitsquare.trade.tomp2p.TomP2PTradeMessageModule;
import io.bitsquare.user.User;
import com.google.inject.Injector;
@@ -64,16 +68,22 @@ class BitsquareAppModule extends BitsquareModule {
bind(Environment.class).toInstance(env);
bind(UpdateProcess.class).asEagerSingleton();
- install(messageModule());
+ install(networkModule());
install(bitcoinModule());
install(cryptoModule());
install(tradeModule());
+ install(tradeMessageModule());
install(offerModule());
+ install(arbitratorMessageModule());
install(guiModule());
}
- protected MessageModule messageModule() {
- return new TomP2PMessageModule(env);
+ protected ArbitratorMessageModule arbitratorMessageModule() {
+ return new TomP2PArbitratorMessageModule(env);
+ }
+
+ protected NetworkModule networkModule() {
+ return new TomP2PNetworkModule(env);
}
protected BitcoinModule bitcoinModule() {
@@ -88,6 +98,10 @@ class BitsquareAppModule extends BitsquareModule {
return new TradeModule(env);
}
+ protected TradeMessageModule tradeMessageModule() {
+ return new TomP2PTradeMessageModule(env);
+ }
+
protected OfferModule offerModule() {
return new TomP2POfferModule(env);
}
diff --git a/gui/src/main/java/io/bitsquare/msg/MessageModule.java b/gui/src/main/java/io/bitsquare/arbitrator/ArbitratorMessageModule.java
similarity index 67%
rename from gui/src/main/java/io/bitsquare/msg/MessageModule.java
rename to gui/src/main/java/io/bitsquare/arbitrator/ArbitratorMessageModule.java
index 1848fbdee3..e84216b0db 100644
--- a/gui/src/main/java/io/bitsquare/msg/MessageModule.java
+++ b/gui/src/main/java/io/bitsquare/arbitrator/ArbitratorMessageModule.java
@@ -15,34 +15,23 @@
* along with Bitsquare. If not, see .
*/
-package io.bitsquare.msg;
+package io.bitsquare.arbitrator;
import io.bitsquare.BitsquareModule;
-import com.google.inject.Injector;
-
import org.springframework.core.env.Environment;
-public abstract class MessageModule extends BitsquareModule {
+public abstract class ArbitratorMessageModule extends BitsquareModule {
- protected MessageModule(Environment env) {
+ protected ArbitratorMessageModule(Environment env) {
super(env);
}
@Override
protected final void configure() {
- bind(MessageService.class).to(messageService()).asEagerSingleton();
-
doConfigure();
}
protected void doConfigure() {
}
-
- protected abstract Class extends MessageService> messageService();
-
- @Override
- protected void doClose(Injector injector) {
- injector.getInstance(MessageService.class).shutDown();
- }
}
diff --git a/gui/src/main/java/io/bitsquare/arbitrator/ArbitratorMessageService.java b/gui/src/main/java/io/bitsquare/arbitrator/ArbitratorMessageService.java
new file mode 100644
index 0000000000..ed2dad8cc6
--- /dev/null
+++ b/gui/src/main/java/io/bitsquare/arbitrator/ArbitratorMessageService.java
@@ -0,0 +1,33 @@
+/*
+ * This file is part of Bitsquare.
+ *
+ * Bitsquare is free software: you can redistribute it and/or modify it
+ * under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * Bitsquare is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public
+ * License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with Bitsquare. If not, see .
+ */
+
+package io.bitsquare.arbitrator;
+
+
+import io.bitsquare.arbitrator.listeners.ArbitratorListener;
+
+import java.util.Locale;
+
+public interface ArbitratorMessageService {
+
+ void addArbitrator(Arbitrator arbitrator);
+
+ void addArbitratorListener(ArbitratorListener listener);
+
+ void getArbitrators(Locale defaultLanguageLocale);
+}
+
diff --git a/gui/src/main/java/io/bitsquare/msg/listeners/ArbitratorListener.java b/gui/src/main/java/io/bitsquare/arbitrator/listeners/ArbitratorListener.java
similarity index 95%
rename from gui/src/main/java/io/bitsquare/msg/listeners/ArbitratorListener.java
rename to gui/src/main/java/io/bitsquare/arbitrator/listeners/ArbitratorListener.java
index ad90cecc87..9210598e1c 100644
--- a/gui/src/main/java/io/bitsquare/msg/listeners/ArbitratorListener.java
+++ b/gui/src/main/java/io/bitsquare/arbitrator/listeners/ArbitratorListener.java
@@ -15,7 +15,7 @@
* along with Bitsquare. If not, see .
*/
-package io.bitsquare.msg.listeners;
+package io.bitsquare.arbitrator.listeners;
import io.bitsquare.arbitrator.Arbitrator;
diff --git a/gui/src/main/java/io/bitsquare/arbitrator/tomp2p/TomP2PArbitratorMessageModule.java b/gui/src/main/java/io/bitsquare/arbitrator/tomp2p/TomP2PArbitratorMessageModule.java
new file mode 100644
index 0000000000..5a52397085
--- /dev/null
+++ b/gui/src/main/java/io/bitsquare/arbitrator/tomp2p/TomP2PArbitratorMessageModule.java
@@ -0,0 +1,43 @@
+/*
+ * This file is part of Bitsquare.
+ *
+ * Bitsquare is free software: you can redistribute it and/or modify it
+ * under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * Bitsquare is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public
+ * License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with Bitsquare. If not, see .
+ */
+
+package io.bitsquare.arbitrator.tomp2p;
+
+import io.bitsquare.arbitrator.ArbitratorMessageModule;
+import io.bitsquare.arbitrator.ArbitratorMessageService;
+
+import com.google.inject.Injector;
+import com.google.inject.Singleton;
+
+import org.springframework.core.env.Environment;
+
+public class TomP2PArbitratorMessageModule extends ArbitratorMessageModule {
+
+ public TomP2PArbitratorMessageModule(Environment env) {
+ super(env);
+ }
+
+ @Override
+ protected void doConfigure() {
+ bind(ArbitratorMessageService.class).to(TomP2PArbitratorMessageService.class).in(Singleton.class);
+ }
+
+ @Override
+ protected void doClose(Injector injector) {
+ super.doClose(injector);
+ }
+}
diff --git a/gui/src/main/java/io/bitsquare/msg/tomp2p/TomP2PMessageService.java b/gui/src/main/java/io/bitsquare/arbitrator/tomp2p/TomP2PArbitratorMessageService.java
similarity index 57%
rename from gui/src/main/java/io/bitsquare/msg/tomp2p/TomP2PMessageService.java
rename to gui/src/main/java/io/bitsquare/arbitrator/tomp2p/TomP2PArbitratorMessageService.java
index 8dd5be54ab..a7eb8c7903 100644
--- a/gui/src/main/java/io/bitsquare/msg/tomp2p/TomP2PMessageService.java
+++ b/gui/src/main/java/io/bitsquare/arbitrator/tomp2p/TomP2PArbitratorMessageService.java
@@ -15,24 +15,15 @@
* along with Bitsquare. If not, see .
*/
-package io.bitsquare.msg.tomp2p;
+package io.bitsquare.arbitrator.tomp2p;
import io.bitsquare.arbitrator.Arbitrator;
-import io.bitsquare.msg.Message;
-import io.bitsquare.msg.MessageService;
-import io.bitsquare.msg.listeners.ArbitratorListener;
-import io.bitsquare.msg.listeners.GetPeerAddressListener;
-import io.bitsquare.msg.listeners.IncomingMessageListener;
-import io.bitsquare.msg.listeners.OutgoingMessageListener;
-import io.bitsquare.network.BootstrapState;
-import io.bitsquare.network.Peer;
-import io.bitsquare.network.tomp2p.TomP2PPeer;
-import io.bitsquare.user.User;
+import io.bitsquare.arbitrator.ArbitratorMessageService;
+import io.bitsquare.arbitrator.listeners.ArbitratorListener;
+import io.bitsquare.network.tomp2p.TomP2PNode;
import java.io.IOException;
-import java.security.PublicKey;
-
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;
@@ -46,35 +37,20 @@ import net.tomp2p.dht.FuturePut;
import net.tomp2p.dht.FutureRemove;
import net.tomp2p.futures.BaseFuture;
import net.tomp2p.futures.BaseFutureAdapter;
-import net.tomp2p.futures.BaseFutureListener;
-import net.tomp2p.futures.FutureDirect;
import net.tomp2p.peers.Number160;
import net.tomp2p.storage.Data;
-import net.tomp2p.utils.Utils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import rx.Observable;
-
-/**
- * That service delivers direct messaging and DHT functionality from the TomP2P library
- * It is the translating domain specific functionality to the messaging layer.
- * The TomP2P library codebase shall not be used outside that service.
- * That way we limit the dependency of the TomP2P library only to that class (and it's sub components).
- *
- * TODO: improve callbacks that Platform.runLater is not necessary. We call usually that methods form teh UI thread.
- */
-public class TomP2PMessageService implements MessageService {
- private static final Logger log = LoggerFactory.getLogger(TomP2PMessageService.class);
+public class TomP2PArbitratorMessageService implements ArbitratorMessageService {
+ private static final Logger log = LoggerFactory.getLogger(TomP2PArbitratorMessageService.class);
+
private static final String ARBITRATORS_ROOT = "ArbitratorsRoot";
-
- private final TomP2PNode p2pNode;
- private final User user;
-
+
+ private final TomP2PNode tomP2PNode;
private final List arbitratorListeners = new ArrayList<>();
- private final List incomingMessageListeners = new ArrayList<>();
///////////////////////////////////////////////////////////////////////////////////////////
@@ -82,77 +58,8 @@ public class TomP2PMessageService implements MessageService {
///////////////////////////////////////////////////////////////////////////////////////////
@Inject
- public TomP2PMessageService(User user, TomP2PNode p2pNode) {
- this.user = user;
- this.p2pNode = p2pNode;
- }
-
-
- ///////////////////////////////////////////////////////////////////////////////////////////
- // Public Methods
- ///////////////////////////////////////////////////////////////////////////////////////////
-
- public Observable init() {
- return p2pNode.bootstrap(this, user.getMessageKeyPair());
- }
-
- public void shutDown() {
- if (p2pNode != null)
- p2pNode.shutDown();
- }
-
-
- ///////////////////////////////////////////////////////////////////////////////////////////
- // Find peer address by publicKey
- ///////////////////////////////////////////////////////////////////////////////////////////
-
-
- public void getPeerAddress(PublicKey publicKey, GetPeerAddressListener listener) {
- final Number160 locationKey = Utils.makeSHAHash(publicKey.getEncoded());
- FutureGet futureGet = p2pNode.getDomainProtectedData(locationKey, publicKey);
-
- futureGet.addListener(new BaseFutureAdapter() {
- @Override
- public void operationComplete(BaseFuture baseFuture) throws Exception {
- if (baseFuture.isSuccess() && futureGet.data() != null) {
- final Peer peer = (Peer) futureGet.data().object();
- Platform.runLater(() -> listener.onResult(peer));
- }
- else {
- log.error("getPeerAddress failed. failedReason = " + baseFuture.failedReason());
- Platform.runLater(listener::onFailed);
- }
- }
- });
- }
-
- ///////////////////////////////////////////////////////////////////////////////////////////
- // Trade process
- ///////////////////////////////////////////////////////////////////////////////////////////
-
- public void sendMessage(Peer peer, Message message,
- OutgoingMessageListener listener) {
- if (!(peer instanceof TomP2PPeer)) {
- throw new IllegalArgumentException("peer must be of type TomP2PPeer");
- }
- FutureDirect futureDirect = p2pNode.sendData(((TomP2PPeer) peer).getPeerAddress(), message);
- futureDirect.addListener(new BaseFutureListener() {
- @Override
- public void operationComplete(BaseFuture future) throws Exception {
- if (future.isSuccess()) {
- Platform.runLater(listener::onResult);
- }
- else {
- log.error("sendMessage failed with reason " + futureDirect.failedReason());
- Platform.runLater(listener::onFailed);
- }
- }
-
- @Override
- public void exceptionCaught(Throwable t) throws Exception {
- Platform.runLater(listener::onFailed);
- }
- });
+ public TomP2PArbitratorMessageService(TomP2PNode tomP2PNode) {
+ this.tomP2PNode = tomP2PNode;
}
@@ -165,7 +72,7 @@ public class TomP2PMessageService implements MessageService {
try {
final Data arbitratorData = new Data(arbitrator);
- FuturePut addFuture = p2pNode.addProtectedData(locationKey, arbitratorData);
+ FuturePut addFuture = tomP2PNode.addProtectedData(locationKey, arbitratorData);
addFuture.addListener(new BaseFutureAdapter() {
@Override
public void operationComplete(BaseFuture future) throws Exception {
@@ -199,7 +106,7 @@ public class TomP2PMessageService implements MessageService {
public void removeArbitrator(Arbitrator arbitrator) throws IOException {
Number160 locationKey = Number160.createHash(ARBITRATORS_ROOT);
final Data arbitratorData = new Data(arbitrator);
- FutureRemove removeFuture = p2pNode.removeFromDataMap(locationKey, arbitratorData);
+ FutureRemove removeFuture = tomP2PNode.removeFromDataMap(locationKey, arbitratorData);
removeFuture.addListener(new BaseFutureAdapter() {
@Override
public void operationComplete(BaseFuture future) throws Exception {
@@ -230,7 +137,7 @@ public class TomP2PMessageService implements MessageService {
public void getArbitrators(Locale languageLocale) {
Number160 locationKey = Number160.createHash(ARBITRATORS_ROOT);
- FutureGet futureGet = p2pNode.getDataMap(locationKey);
+ FutureGet futureGet = tomP2PNode.getDataMap(locationKey);
futureGet.addListener(new BaseFutureAdapter() {
@Override
public void operationComplete(BaseFuture future) throws Exception {
@@ -275,23 +182,4 @@ public class TomP2PMessageService implements MessageService {
arbitratorListeners.remove(listener);
}
- public void addIncomingMessageListener(IncomingMessageListener listener) {
- incomingMessageListeners.add(listener);
- }
-
- public void removeIncomingMessageListener(IncomingMessageListener listener) {
- incomingMessageListeners.remove(listener);
- }
-
- ///////////////////////////////////////////////////////////////////////////////////////////
- // Incoming message handler
- ///////////////////////////////////////////////////////////////////////////////////////////
-
- @Override
- public void handleMessage(Object message, Peer sender) {
- if (message instanceof Message) {
- Platform.runLater(() -> incomingMessageListeners.stream().forEach(e ->
- e.onMessage((Message) message, sender)));
- }
- }
}
diff --git a/gui/src/main/java/io/bitsquare/gui/main/MainViewModel.java b/gui/src/main/java/io/bitsquare/gui/main/MainViewModel.java
index 996ba9c551..a28825c3e2 100644
--- a/gui/src/main/java/io/bitsquare/gui/main/MainViewModel.java
+++ b/gui/src/main/java/io/bitsquare/gui/main/MainViewModel.java
@@ -20,6 +20,7 @@ package io.bitsquare.gui.main;
import io.bitsquare.account.AccountSettings;
import io.bitsquare.app.gui.UpdateProcess;
import io.bitsquare.arbitrator.Arbitrator;
+import io.bitsquare.arbitrator.ArbitratorMessageService;
import io.bitsquare.arbitrator.Reputation;
import io.bitsquare.bank.BankAccount;
import io.bitsquare.bank.BankAccountType;
@@ -28,11 +29,12 @@ import io.bitsquare.btc.WalletService;
import io.bitsquare.gui.util.BSFormatter;
import io.bitsquare.locale.CountryUtil;
import io.bitsquare.locale.LanguageUtil;
-import io.bitsquare.msg.MessageService;
import io.bitsquare.network.BootstrapState;
+import io.bitsquare.network.ClientNode;
import io.bitsquare.persistence.Persistence;
import io.bitsquare.trade.Trade;
import io.bitsquare.trade.TradeManager;
+import io.bitsquare.trade.TradeMessageService;
import io.bitsquare.user.User;
import io.bitsquare.util.DSAKeyUtil;
@@ -102,7 +104,9 @@ class MainViewModel implements ViewModel {
private final User user;
private final WalletService walletService;
- private final MessageService messageService;
+ private final ClientNode clientNode;
+ private TradeMessageService tradeMessageService;
+ private ArbitratorMessageService arbitratorMessageService;
private final TradeManager tradeManager;
private UpdateProcess updateProcess;
private final BSFormatter formatter;
@@ -110,12 +114,15 @@ class MainViewModel implements ViewModel {
private AccountSettings accountSettings;
@Inject
- public MainViewModel(User user, WalletService walletService, MessageService messageService,
+ public MainViewModel(User user, WalletService walletService, ClientNode clientNode, TradeMessageService tradeMessageService,
+ ArbitratorMessageService arbitratorMessageService,
TradeManager tradeManager, BitcoinNetwork bitcoinNetwork, UpdateProcess updateProcess,
BSFormatter formatter, Persistence persistence, AccountSettings accountSettings) {
this.user = user;
this.walletService = walletService;
- this.messageService = messageService;
+ this.clientNode = clientNode;
+ this.tradeMessageService = tradeMessageService;
+ this.arbitratorMessageService = arbitratorMessageService;
this.tradeManager = tradeManager;
this.updateProcess = updateProcess;
this.formatter = formatter;
@@ -160,7 +167,7 @@ class MainViewModel implements ViewModel {
error -> log.error(error.toString()),
() -> Platform.runLater(() -> setBitcoinNetworkSyncProgress(1.0)));
- Observable messageObservable = messageService.init();
+ Observable messageObservable = clientNode.bootstrap(user.getMessageKeyPair(), tradeMessageService);
messageObservable.publish();
messageObservable.subscribe(
state -> Platform.runLater(() -> setBootstrapState(state)),
@@ -377,7 +384,7 @@ class MainViewModel implements ViewModel {
accountSettings.addAcceptedArbitrator(arbitrator);
persistence.write(accountSettings);
- messageService.addArbitrator(arbitrator);
+ arbitratorMessageService.addArbitrator(arbitrator);
}
}
}
diff --git a/gui/src/main/java/io/bitsquare/gui/main/account/arbitrator/browser/ArbitratorBrowserView.java b/gui/src/main/java/io/bitsquare/gui/main/account/arbitrator/browser/ArbitratorBrowserView.java
index 3e0e28b4d7..f23d03a4e1 100644
--- a/gui/src/main/java/io/bitsquare/gui/main/account/arbitrator/browser/ArbitratorBrowserView.java
+++ b/gui/src/main/java/io/bitsquare/gui/main/account/arbitrator/browser/ArbitratorBrowserView.java
@@ -21,8 +21,8 @@ import io.bitsquare.account.AccountSettings;
import io.bitsquare.arbitrator.Arbitrator;
import io.bitsquare.gui.main.account.arbitrator.profile.ArbitratorProfileView;
import io.bitsquare.locale.LanguageUtil;
-import io.bitsquare.msg.MessageService;
-import io.bitsquare.msg.listeners.ArbitratorListener;
+import io.bitsquare.arbitrator.ArbitratorMessageService;
+import io.bitsquare.arbitrator.listeners.ArbitratorListener;
import io.bitsquare.persistence.Persistence;
import java.util.ArrayList;
@@ -56,11 +56,11 @@ public class ArbitratorBrowserView extends ActivatableView implement
private final ViewLoader viewLoader;
private final AccountSettings accountSettings;
private final Persistence persistence;
- private final MessageService messageService;
+ private final ArbitratorMessageService messageService;
@Inject
public ArbitratorBrowserView(CachingViewLoader viewLoader, AccountSettings accountSettings, Persistence persistence,
- MessageService messageService) {
+ ArbitratorMessageService messageService) {
this.viewLoader = viewLoader;
this.accountSettings = accountSettings;
this.persistence = persistence;
diff --git a/gui/src/main/java/io/bitsquare/gui/main/account/arbitrator/registration/ArbitratorRegistrationView.java b/gui/src/main/java/io/bitsquare/gui/main/account/arbitrator/registration/ArbitratorRegistrationView.java
index 6c2fd2cac3..f93f2e4004 100644
--- a/gui/src/main/java/io/bitsquare/gui/main/account/arbitrator/registration/ArbitratorRegistrationView.java
+++ b/gui/src/main/java/io/bitsquare/gui/main/account/arbitrator/registration/ArbitratorRegistrationView.java
@@ -24,7 +24,7 @@ import io.bitsquare.gui.components.confidence.ConfidenceProgressIndicator;
import io.bitsquare.gui.util.BSFormatter;
import io.bitsquare.locale.BSResources;
import io.bitsquare.locale.LanguageUtil;
-import io.bitsquare.msg.MessageService;
+import io.bitsquare.arbitrator.ArbitratorMessageService;
import io.bitsquare.persistence.Persistence;
import io.bitsquare.user.User;
import io.bitsquare.util.DSAKeyUtil;
@@ -85,13 +85,13 @@ public class ArbitratorRegistrationView extends ActivatableView languageList = FXCollections.observableArrayList();
final ObservableList countryList = FXCollections.observableArrayList();
@@ -62,7 +62,7 @@ class RestrictionsDataModel implements Activatable, DataModel {
@Inject
public RestrictionsDataModel(User user, AccountSettings accountSettings, Persistence persistence,
- MessageService messageService) {
+ ArbitratorMessageService messageService) {
this.user = user;
this.accountSettings = accountSettings;
this.persistence = persistence;
diff --git a/gui/src/main/java/io/bitsquare/gui/main/trade/takeoffer/TakeOfferDataModel.java b/gui/src/main/java/io/bitsquare/gui/main/trade/takeoffer/TakeOfferDataModel.java
index beed69d20e..2794d296dd 100644
--- a/gui/src/main/java/io/bitsquare/gui/main/trade/takeoffer/TakeOfferDataModel.java
+++ b/gui/src/main/java/io/bitsquare/gui/main/trade/takeoffer/TakeOfferDataModel.java
@@ -21,15 +21,15 @@ import io.bitsquare.btc.AddressEntry;
import io.bitsquare.btc.FeePolicy;
import io.bitsquare.btc.WalletService;
import io.bitsquare.btc.listeners.BalanceListener;
-import io.bitsquare.msg.MessageService;
-import io.bitsquare.msg.listeners.GetPeerAddressListener;
-import io.bitsquare.msg.listeners.OutgoingMessageListener;
import io.bitsquare.network.Peer;
import io.bitsquare.offer.Offer;
import io.bitsquare.persistence.Persistence;
import io.bitsquare.settings.Preferences;
import io.bitsquare.trade.Trade;
import io.bitsquare.trade.TradeManager;
+import io.bitsquare.trade.TradeMessageService;
+import io.bitsquare.trade.listeners.GetPeerAddressListener;
+import io.bitsquare.trade.listeners.OutgoingMessageListener;
import io.bitsquare.trade.protocol.trade.taker.messages.RequestIsOfferAvailableMessage;
import org.bitcoinj.core.Coin;
@@ -69,7 +69,7 @@ class TakeOfferDataModel implements Activatable, DataModel {
private final TradeManager tradeManager;
private final WalletService walletService;
- private MessageService messageService;
+ private TradeMessageService tradeMessageService;
private final Preferences preferences;
private final Persistence persistence;
@@ -98,12 +98,12 @@ class TakeOfferDataModel implements Activatable, DataModel {
private boolean isActivated;
@Inject
- public TakeOfferDataModel(TradeManager tradeManager, WalletService walletService, MessageService messageService,
+ public TakeOfferDataModel(TradeManager tradeManager, WalletService walletService, TradeMessageService tradeMessageService,
Preferences preferences,
Persistence persistence) {
this.tradeManager = tradeManager;
this.walletService = walletService;
- this.messageService = messageService;
+ this.tradeMessageService = tradeMessageService;
this.preferences = preferences;
this.persistence = persistence;
@@ -154,7 +154,7 @@ class TakeOfferDataModel implements Activatable, DataModel {
// TODO: Should be moved to a domain and handled with add/remove listeners instead of isActivated
// or maybe with rx?
private void getPeerAddress(Offer offer) {
- messageService.getPeerAddress(offer.getMessagePublicKey(), new GetPeerAddressListener() {
+ tradeMessageService.getPeerAddress(offer.getMessagePublicKey(), new GetPeerAddressListener() {
@Override
public void onResult(Peer peer) {
if (isActivated)
@@ -170,7 +170,7 @@ class TakeOfferDataModel implements Activatable, DataModel {
}
private void isOfferAvailable(Peer peer, String offerId) {
- messageService.sendMessage(peer, new RequestIsOfferAvailableMessage(offerId),
+ tradeMessageService.sendMessage(peer, new RequestIsOfferAvailableMessage(offerId),
new OutgoingMessageListener() {
@Override
public void onResult() {
diff --git a/gui/src/main/java/io/bitsquare/network/ClientNode.java b/gui/src/main/java/io/bitsquare/network/ClientNode.java
index c721ae19ae..f02b1f8c98 100644
--- a/gui/src/main/java/io/bitsquare/network/ClientNode.java
+++ b/gui/src/main/java/io/bitsquare/network/ClientNode.java
@@ -17,10 +17,16 @@
package io.bitsquare.network;
+import java.security.KeyPair;
+
+import rx.Observable;
+
public interface ClientNode {
ConnectionType getConnectionType();
Node getAddress();
Node getBootstrapNodeAddress();
+
+ public Observable bootstrap(KeyPair keyPair, MessageBroker messageBroker);
}
diff --git a/gui/src/main/java/io/bitsquare/msg/Message.java b/gui/src/main/java/io/bitsquare/network/Message.java
similarity index 96%
rename from gui/src/main/java/io/bitsquare/msg/Message.java
rename to gui/src/main/java/io/bitsquare/network/Message.java
index c3dff80f2e..8c810d8e06 100644
--- a/gui/src/main/java/io/bitsquare/msg/Message.java
+++ b/gui/src/main/java/io/bitsquare/network/Message.java
@@ -15,7 +15,7 @@
* along with Bitsquare. If not, see .
*/
-package io.bitsquare.msg;
+package io.bitsquare.network;
public interface Message {
}
diff --git a/gui/src/main/java/io/bitsquare/msg/MessageBroker.java b/gui/src/main/java/io/bitsquare/network/MessageBroker.java
similarity index 93%
rename from gui/src/main/java/io/bitsquare/msg/MessageBroker.java
rename to gui/src/main/java/io/bitsquare/network/MessageBroker.java
index d7eff71ec4..d32fed0e09 100644
--- a/gui/src/main/java/io/bitsquare/msg/MessageBroker.java
+++ b/gui/src/main/java/io/bitsquare/network/MessageBroker.java
@@ -15,9 +15,7 @@
* along with Bitsquare. If not, see .
*/
-package io.bitsquare.msg;
-
-import io.bitsquare.network.Peer;
+package io.bitsquare.network;
/**
* Interface for the object handling incoming messages.
diff --git a/gui/src/main/java/io/bitsquare/network/NetworkModule.java b/gui/src/main/java/io/bitsquare/network/NetworkModule.java
new file mode 100644
index 0000000000..185ed2829a
--- /dev/null
+++ b/gui/src/main/java/io/bitsquare/network/NetworkModule.java
@@ -0,0 +1,37 @@
+/*
+ * This file is part of Bitsquare.
+ *
+ * Bitsquare is free software: you can redistribute it and/or modify it
+ * under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * Bitsquare is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public
+ * License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with Bitsquare. If not, see .
+ */
+
+package io.bitsquare.network;
+
+import io.bitsquare.BitsquareModule;
+
+import org.springframework.core.env.Environment;
+
+public abstract class NetworkModule extends BitsquareModule {
+
+ protected NetworkModule(Environment env) {
+ super(env);
+ }
+
+ @Override
+ protected final void configure() {
+ doConfigure();
+ }
+
+ protected void doConfigure() {
+ }
+}
diff --git a/gui/src/main/java/io/bitsquare/msg/tomp2p/BootstrappedPeerBuilder.java b/gui/src/main/java/io/bitsquare/network/tomp2p/BootstrappedPeerBuilder.java
similarity index 99%
rename from gui/src/main/java/io/bitsquare/msg/tomp2p/BootstrappedPeerBuilder.java
rename to gui/src/main/java/io/bitsquare/network/tomp2p/BootstrappedPeerBuilder.java
index 93d8c016c1..eb7218ce67 100644
--- a/gui/src/main/java/io/bitsquare/msg/tomp2p/BootstrappedPeerBuilder.java
+++ b/gui/src/main/java/io/bitsquare/network/tomp2p/BootstrappedPeerBuilder.java
@@ -15,7 +15,7 @@
* along with Bitsquare. If not, see .
*/
-package io.bitsquare.msg.tomp2p;
+package io.bitsquare.network.tomp2p;
import io.bitsquare.network.BootstrapState;
import io.bitsquare.network.Node;
@@ -180,7 +180,7 @@ public class BootstrappedPeerBuilder {
return settableFuture;
}
- void shutDown() {
+ public void shutDown() {
if (peerDHT != null)
peerDHT.shutdown();
}
diff --git a/gui/src/main/java/io/bitsquare/msg/tomp2p/TomP2PMessageModule.java b/gui/src/main/java/io/bitsquare/network/tomp2p/TomP2PNetworkModule.java
similarity index 75%
rename from gui/src/main/java/io/bitsquare/msg/tomp2p/TomP2PMessageModule.java
rename to gui/src/main/java/io/bitsquare/network/tomp2p/TomP2PNetworkModule.java
index c7377894e8..9c613e107d 100644
--- a/gui/src/main/java/io/bitsquare/msg/tomp2p/TomP2PMessageModule.java
+++ b/gui/src/main/java/io/bitsquare/network/tomp2p/TomP2PNetworkModule.java
@@ -15,54 +15,48 @@
* along with Bitsquare. If not, see .
*/
-package io.bitsquare.msg.tomp2p;
+package io.bitsquare.network.tomp2p;
-import io.bitsquare.msg.MessageModule;
-import io.bitsquare.msg.MessageService;
import io.bitsquare.network.BootstrapNodes;
import io.bitsquare.network.ClientNode;
+import io.bitsquare.network.NetworkModule;
import io.bitsquare.network.Node;
import com.google.inject.Injector;
+import com.google.inject.Singleton;
import com.google.inject.name.Names;
-import javax.inject.Singleton;
-
import org.springframework.core.env.Environment;
-import static io.bitsquare.msg.tomp2p.BootstrappedPeerBuilder.*;
-
-public class TomP2PMessageModule extends MessageModule {
+import static io.bitsquare.network.tomp2p.BootstrappedPeerBuilder.*;
+public class TomP2PNetworkModule extends NetworkModule {
public static final String BOOTSTRAP_NODE_NAME_KEY = "bootstrap.node.name";
public static final String BOOTSTRAP_NODE_IP_KEY = "bootstrap.node.ip";
public static final String BOOTSTRAP_NODE_PORT_KEY = "bootstrap.node.port";
public static final String NETWORK_INTERFACE_KEY = BootstrappedPeerBuilder.NETWORK_INTERFACE_KEY;
public static final String USE_MANUAL_PORT_FORWARDING_KEY = BootstrappedPeerBuilder.USE_MANUAL_PORT_FORWARDING_KEY;
- public TomP2PMessageModule(Environment env) {
+ public TomP2PNetworkModule(Environment env) {
super(env);
}
@Override
protected void doConfigure() {
- bind(int.class).annotatedWith(Names.named(Node.PORT_KEY)).toInstance(
- env.getProperty(Node.PORT_KEY, int.class, Node.DEFAULT_PORT));
+ bind(ClientNode.class).to(TomP2PNode.class).in(Singleton.class);
+ bind(TomP2PNode.class).in(Singleton.class);
+
+ bind(int.class).annotatedWith(Names.named(Node.PORT_KEY)).toInstance(env.getProperty(Node.PORT_KEY, int.class, Node.DEFAULT_PORT));
bind(boolean.class).annotatedWith(Names.named(USE_MANUAL_PORT_FORWARDING_KEY)).toInstance(
env.getProperty(USE_MANUAL_PORT_FORWARDING_KEY, boolean.class, false));
-
- bind(TomP2PNode.class).in(Singleton.class);
- bind(ClientNode.class).to(TomP2PNode.class);
bind(Node.class).annotatedWith(Names.named(BOOTSTRAP_NODE_KEY)).toInstance(
- Node.at(
- env.getProperty(BOOTSTRAP_NODE_NAME_KEY, BootstrapNodes.DEFAULT.getName()),
+ Node.at(env.getProperty(BOOTSTRAP_NODE_NAME_KEY, BootstrapNodes.DEFAULT.getName()),
env.getProperty(BOOTSTRAP_NODE_IP_KEY, BootstrapNodes.DEFAULT.getIp()),
env.getProperty(BOOTSTRAP_NODE_PORT_KEY, int.class, BootstrapNodes.DEFAULT.getPort())
)
);
- bindConstant().annotatedWith(Names.named(NETWORK_INTERFACE_KEY)).to(
- env.getProperty(NETWORK_INTERFACE_KEY, NETWORK_INTERFACE_UNSPECIFIED));
+ bindConstant().annotatedWith(Names.named(NETWORK_INTERFACE_KEY)).to(env.getProperty(NETWORK_INTERFACE_KEY, NETWORK_INTERFACE_UNSPECIFIED));
bind(BootstrappedPeerBuilder.class).asEagerSingleton();
}
@@ -72,9 +66,4 @@ public class TomP2PMessageModule extends MessageModule {
injector.getInstance(BootstrappedPeerBuilder.class).shutDown();
}
-
- @Override
- protected Class extends MessageService> messageService() {
- return TomP2PMessageService.class;
- }
}
diff --git a/gui/src/main/java/io/bitsquare/msg/tomp2p/TomP2PNode.java b/gui/src/main/java/io/bitsquare/network/tomp2p/TomP2PNode.java
similarity index 96%
rename from gui/src/main/java/io/bitsquare/msg/tomp2p/TomP2PNode.java
rename to gui/src/main/java/io/bitsquare/network/tomp2p/TomP2PNode.java
index ef9c13c297..2b0c5e0f3a 100644
--- a/gui/src/main/java/io/bitsquare/msg/tomp2p/TomP2PNode.java
+++ b/gui/src/main/java/io/bitsquare/network/tomp2p/TomP2PNode.java
@@ -15,16 +15,15 @@
* along with Bitsquare. If not, see .
*/
-package io.bitsquare.msg.tomp2p;
+package io.bitsquare.network.tomp2p;
import io.bitsquare.BitsquareException;
-import io.bitsquare.msg.MessageBroker;
+import io.bitsquare.network.MessageBroker;
import io.bitsquare.network.BootstrapState;
import io.bitsquare.network.ClientNode;
import io.bitsquare.network.ConnectionType;
import io.bitsquare.network.NetworkException;
import io.bitsquare.network.Node;
-import io.bitsquare.network.tomp2p.TomP2PPeer;
import com.google.common.util.concurrent.FutureCallback;
import com.google.common.util.concurrent.Futures;
@@ -75,10 +74,7 @@ public class TomP2PNode implements ClientNode {
private static final Logger log = LoggerFactory.getLogger(TomP2PNode.class);
private KeyPair keyPair;
- private MessageBroker messageBroker;
-
private PeerAddress storedPeerAddress;
-
private PeerDHT peerDHT;
private BootstrappedPeerBuilder bootstrappedPeerBuilder;
@@ -97,20 +93,15 @@ public class TomP2PNode implements ClientNode {
this.keyPair = keyPair;
this.peerDHT = peerDHT;
peerDHT.peerBean().keyPair(keyPair);
- messageBroker = (message, peerAddress) -> {
- };
}
-
///////////////////////////////////////////////////////////////////////////////////////////
// Public methods
///////////////////////////////////////////////////////////////////////////////////////////
- public Observable bootstrap(MessageBroker messageBroker, KeyPair keyPair) {
+ public Observable bootstrap(KeyPair keyPair, MessageBroker messageBroker) {
checkNotNull(keyPair, "keyPair must not be null.");
- checkNotNull(messageBroker, "messageBroker must not be null.");
- this.messageBroker = messageBroker;
this.keyPair = keyPair;
bootstrappedPeerBuilder.setKeyPair(keyPair);
@@ -128,7 +119,7 @@ public class TomP2PNode implements ClientNode {
if (peerDHT != null) {
TomP2PNode.this.peerDHT = peerDHT;
setupTimerForIPCheck();
- setupReplyHandler();
+ setupReplyHandler(messageBroker);
try {
storeAddress();
} catch (NetworkException e) {
@@ -152,10 +143,6 @@ public class TomP2PNode implements ClientNode {
return bootstrapStateSubject.asObservable();
}
- public void shutDown() {
- if (peerDHT != null)
- peerDHT.shutdown();
- }
///////////////////////////////////////////////////////////////////////////////////////////
// Generic DHT methods
@@ -302,7 +289,7 @@ public class TomP2PNode implements ClientNode {
// Private
///////////////////////////////////////////////////////////////////////////////////////////
- private void setupReplyHandler() {
+ private void setupReplyHandler(MessageBroker messageBroker) {
peerDHT.peer().objectDataReply((sender, request) -> {
log.debug("handleMessage peerAddress " + sender);
log.debug("handleMessage message " + request);
diff --git a/gui/src/main/java/io/bitsquare/offer/tomp2p/TomP2POfferBook.java b/gui/src/main/java/io/bitsquare/offer/tomp2p/TomP2POfferBook.java
index 0d2f38cf45..07342c8b00 100644
--- a/gui/src/main/java/io/bitsquare/offer/tomp2p/TomP2POfferBook.java
+++ b/gui/src/main/java/io/bitsquare/offer/tomp2p/TomP2POfferBook.java
@@ -17,7 +17,7 @@
package io.bitsquare.offer.tomp2p;
-import io.bitsquare.msg.tomp2p.TomP2PNode;
+import io.bitsquare.network.tomp2p.TomP2PNode;
import io.bitsquare.offer.Offer;
import io.bitsquare.offer.RemoteOfferBook;
import io.bitsquare.util.handlers.FaultHandler;
@@ -30,8 +30,6 @@ import java.util.List;
import java.util.Map;
import java.util.concurrent.Executor;
-import javax.inject.Inject;
-
import javafx.beans.property.LongProperty;
import javafx.beans.property.SimpleLongProperty;
@@ -55,12 +53,11 @@ public class TomP2POfferBook implements RemoteOfferBook {
private final List offerRepositoryListeners = new ArrayList<>();
private final LongProperty invalidationTimestamp = new SimpleLongProperty(0);
- private final TomP2PNode p2pNode;
+ private final TomP2PNode tomP2PNode;
private Executor executor;
- @Inject
- public TomP2POfferBook(TomP2PNode p2pNode) {
- this.p2pNode = p2pNode;
+ public TomP2POfferBook(TomP2PNode tomP2PNode) {
+ this.tomP2PNode = tomP2PNode;
}
public void setExecutor(Executor executor) {
@@ -78,7 +75,7 @@ public class TomP2POfferBook implements RemoteOfferBook {
offerData.ttlSeconds(defaultOfferTTL);
log.trace("Add offer to DHT requested. Added data: [locationKey: " + locationKey +
", hash: " + offerData.hash().toString() + "]");
- FuturePut futurePut = p2pNode.addProtectedData(locationKey, offerData);
+ FuturePut futurePut = tomP2PNode.addProtectedData(locationKey, offerData);
futurePut.addListener(new BaseFutureListener() {
@Override
public void operationComplete(BaseFuture future) throws Exception {
@@ -121,7 +118,7 @@ public class TomP2POfferBook implements RemoteOfferBook {
final Data offerData = new Data(offer);
log.trace("Remove offer from DHT requested. Removed data: [locationKey: " + locationKey +
", hash: " + offerData.hash().toString() + "]");
- FutureRemove futureRemove = p2pNode.removeFromDataMap(locationKey, offerData);
+ FutureRemove futureRemove = tomP2PNode.removeFromDataMap(locationKey, offerData);
futureRemove.addListener(new BaseFutureListener() {
@Override
public void operationComplete(BaseFuture future) throws Exception {
@@ -166,7 +163,7 @@ public class TomP2POfferBook implements RemoteOfferBook {
public void getOffers(String currencyCode) {
Number160 locationKey = Number160.createHash(currencyCode);
log.trace("Get offers from DHT requested for locationKey: " + locationKey);
- FutureGet futureGet = p2pNode.getDataMap(locationKey);
+ FutureGet futureGet = tomP2PNode.getDataMap(locationKey);
futureGet.addListener(new BaseFutureAdapter() {
@Override
public void operationComplete(BaseFuture future) throws Exception {
@@ -230,7 +227,7 @@ public class TomP2POfferBook implements RemoteOfferBook {
private void writeInvalidationTimestampToDHT(String currencyCode) {
invalidationTimestamp.set(System.currentTimeMillis());
try {
- FuturePut putFuture = p2pNode.putData(getInvalidatedLocationKey(currencyCode),
+ FuturePut putFuture = tomP2PNode.putData(getInvalidatedLocationKey(currencyCode),
new Data(invalidationTimestamp.get()));
putFuture.addListener(new BaseFutureListener() {
@Override
@@ -257,7 +254,7 @@ public class TomP2POfferBook implements RemoteOfferBook {
}
public void requestInvalidationTimeStampFromDHT(String currencyCode) {
- FutureGet futureGet = p2pNode.getData(getInvalidatedLocationKey(currencyCode));
+ FutureGet futureGet = tomP2PNode.getData(getInvalidatedLocationKey(currencyCode));
futureGet.addListener(new BaseFutureListener() {
@Override
public void operationComplete(BaseFuture future) throws Exception {
diff --git a/gui/src/main/java/io/bitsquare/offer/tomp2p/TomP2POfferModule.java b/gui/src/main/java/io/bitsquare/offer/tomp2p/TomP2POfferModule.java
index 935670be59..9bf44a1171 100644
--- a/gui/src/main/java/io/bitsquare/offer/tomp2p/TomP2POfferModule.java
+++ b/gui/src/main/java/io/bitsquare/offer/tomp2p/TomP2POfferModule.java
@@ -17,7 +17,7 @@
package io.bitsquare.offer.tomp2p;
-import io.bitsquare.msg.tomp2p.TomP2PNode;
+import io.bitsquare.network.tomp2p.TomP2PNode;
import io.bitsquare.offer.OfferModule;
import io.bitsquare.offer.RemoteOfferBook;
@@ -45,8 +45,8 @@ class RemoteOfferBookProvider implements Provider {
private final TomP2POfferBook remoteOfferBook;
@Inject
- public RemoteOfferBookProvider(TomP2PNode p2pNode) {
- remoteOfferBook = new TomP2POfferBook(p2pNode);
+ public RemoteOfferBookProvider(TomP2PNode tomP2PNode) {
+ remoteOfferBook = new TomP2POfferBook(tomP2PNode);
remoteOfferBook.setExecutor(Platform::runLater);
}
diff --git a/gui/src/main/java/io/bitsquare/trade/TradeManager.java b/gui/src/main/java/io/bitsquare/trade/TradeManager.java
index ffad461f81..49854a50e4 100644
--- a/gui/src/main/java/io/bitsquare/trade/TradeManager.java
+++ b/gui/src/main/java/io/bitsquare/trade/TradeManager.java
@@ -22,15 +22,14 @@ import io.bitsquare.bank.BankAccount;
import io.bitsquare.btc.BlockChainService;
import io.bitsquare.btc.WalletService;
import io.bitsquare.crypto.SignatureService;
-import io.bitsquare.msg.Message;
-import io.bitsquare.msg.MessageService;
-import io.bitsquare.msg.listeners.OutgoingMessageListener;
+import io.bitsquare.network.Message;
import io.bitsquare.network.Peer;
import io.bitsquare.offer.Direction;
import io.bitsquare.offer.Offer;
import io.bitsquare.offer.RemoteOfferBook;
import io.bitsquare.persistence.Persistence;
import io.bitsquare.trade.handlers.TransactionResultHandler;
+import io.bitsquare.trade.listeners.OutgoingMessageListener;
import io.bitsquare.trade.protocol.placeoffer.PlaceOfferProtocol;
import io.bitsquare.trade.protocol.trade.TradeMessage;
import io.bitsquare.trade.protocol.trade.offerer.BuyerAcceptsOfferProtocol;
@@ -80,7 +79,7 @@ public class TradeManager {
private final User user;
private final AccountSettings accountSettings;
private final Persistence persistence;
- private final MessageService messageService;
+ private final TradeMessageService tradeMessageService;
private final BlockChainService blockChainService;
private final WalletService walletService;
private final SignatureService signatureService;
@@ -105,13 +104,13 @@ public class TradeManager {
@Inject
public TradeManager(User user, AccountSettings accountSettings, Persistence persistence,
- MessageService messageService, BlockChainService blockChainService,
+ TradeMessageService tradeMessageService, BlockChainService blockChainService,
WalletService walletService, SignatureService signatureService,
RemoteOfferBook remoteOfferBook) {
this.user = user;
this.accountSettings = accountSettings;
this.persistence = persistence;
- this.messageService = messageService;
+ this.tradeMessageService = tradeMessageService;
this.blockChainService = blockChainService;
this.walletService = walletService;
this.signatureService = signatureService;
@@ -132,7 +131,7 @@ public class TradeManager {
closedTrades.putAll((Map) closedTradesObject);
}
- messageService.addIncomingMessageListener(this::onIncomingTradeMessage);
+ tradeMessageService.addIncomingMessageListener(this::onIncomingTradeMessage);
}
@@ -141,7 +140,7 @@ public class TradeManager {
///////////////////////////////////////////////////////////////////////////////////////////
public void cleanup() {
- messageService.removeIncomingMessageListener(this::onIncomingTradeMessage);
+ tradeMessageService.removeIncomingMessageListener(this::onIncomingTradeMessage);
}
@@ -250,7 +249,7 @@ public class TradeManager {
BuyerAcceptsOfferProtocol buyerAcceptsOfferProtocol = new BuyerAcceptsOfferProtocol(trade,
sender,
- messageService,
+ tradeMessageService,
walletService,
blockChainService,
signatureService,
@@ -380,7 +379,7 @@ public class TradeManager {
};
SellerTakesOfferProtocol sellerTakesOfferProtocol = new SellerTakesOfferProtocol(
- trade, listener, messageService, walletService, blockChainService, signatureService,
+ trade, listener, tradeMessageService, walletService, blockChainService, signatureService,
user);
takerAsSellerProtocolMap.put(trade.getId(), sellerTakesOfferProtocol);
sellerTakesOfferProtocol.start();
@@ -429,7 +428,7 @@ public class TradeManager {
boolean isOfferOpen = getTrade(tradeId) == null;
RespondToIsOfferAvailableMessage replyMessage =
new RespondToIsOfferAvailableMessage(tradeId, isOfferOpen);
- messageService.sendMessage(sender, replyMessage, new OutgoingMessageListener() {
+ tradeMessageService.sendMessage(sender, replyMessage, new OutgoingMessageListener() {
@Override
public void onResult() {
log.trace("RespondToTakeOfferRequestMessage successfully arrived at peer");
diff --git a/gui/src/main/java/io/bitsquare/trade/TradeMessage.java b/gui/src/main/java/io/bitsquare/trade/TradeMessage.java
index bc2e7ff492..beb1cde648 100644
--- a/gui/src/main/java/io/bitsquare/trade/TradeMessage.java
+++ b/gui/src/main/java/io/bitsquare/trade/TradeMessage.java
@@ -17,10 +17,12 @@
package io.bitsquare.trade;
+import io.bitsquare.network.Message;
+
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-public class TradeMessage {
+public class TradeMessage implements Message {
private static final Logger log = LoggerFactory.getLogger(TradeMessage.class);
public TradeMessage() {
diff --git a/gui/src/main/java/io/bitsquare/trade/TradeMessageModule.java b/gui/src/main/java/io/bitsquare/trade/TradeMessageModule.java
new file mode 100644
index 0000000000..6caea470fc
--- /dev/null
+++ b/gui/src/main/java/io/bitsquare/trade/TradeMessageModule.java
@@ -0,0 +1,37 @@
+/*
+ * This file is part of Bitsquare.
+ *
+ * Bitsquare is free software: you can redistribute it and/or modify it
+ * under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * Bitsquare is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public
+ * License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with Bitsquare. If not, see .
+ */
+
+package io.bitsquare.trade;
+
+import io.bitsquare.BitsquareModule;
+
+import org.springframework.core.env.Environment;
+
+public abstract class TradeMessageModule extends BitsquareModule {
+
+ protected TradeMessageModule(Environment env) {
+ super(env);
+ }
+
+ @Override
+ protected final void configure() {
+ doConfigure();
+ }
+
+ protected void doConfigure() {
+ }
+}
diff --git a/gui/src/main/java/io/bitsquare/msg/MessageService.java b/gui/src/main/java/io/bitsquare/trade/TradeMessageService.java
similarity index 62%
rename from gui/src/main/java/io/bitsquare/msg/MessageService.java
rename to gui/src/main/java/io/bitsquare/trade/TradeMessageService.java
index 375189cac9..5668472d35 100644
--- a/gui/src/main/java/io/bitsquare/msg/MessageService.java
+++ b/gui/src/main/java/io/bitsquare/trade/TradeMessageService.java
@@ -15,39 +15,24 @@
* along with Bitsquare. If not, see .
*/
-package io.bitsquare.msg;
+package io.bitsquare.trade;
-import io.bitsquare.arbitrator.Arbitrator;
-import io.bitsquare.msg.listeners.ArbitratorListener;
-import io.bitsquare.msg.listeners.GetPeerAddressListener;
-import io.bitsquare.msg.listeners.IncomingMessageListener;
-import io.bitsquare.msg.listeners.OutgoingMessageListener;
-import io.bitsquare.network.BootstrapState;
+import io.bitsquare.network.Message;
+import io.bitsquare.network.MessageBroker;
+import io.bitsquare.trade.listeners.GetPeerAddressListener;
+import io.bitsquare.trade.listeners.IncomingMessageListener;
+import io.bitsquare.trade.listeners.OutgoingMessageListener;
import io.bitsquare.network.Peer;
import java.security.PublicKey;
-import java.util.Locale;
-
-import rx.Observable;
-
-public interface MessageService extends MessageBroker {
+public interface TradeMessageService extends MessageBroker {
void sendMessage(Peer peer, Message message, OutgoingMessageListener listener);
- void shutDown();
-
- void addArbitrator(Arbitrator arbitrator);
-
void addIncomingMessageListener(IncomingMessageListener listener);
void removeIncomingMessageListener(IncomingMessageListener listener);
- void addArbitratorListener(ArbitratorListener listener);
-
- void getArbitrators(Locale defaultLanguageLocale);
-
- Observable init();
-
void getPeerAddress(PublicKey messagePublicKey, GetPeerAddressListener getPeerAddressListener);
}
diff --git a/gui/src/main/java/io/bitsquare/msg/listeners/GetPeerAddressListener.java b/gui/src/main/java/io/bitsquare/trade/listeners/GetPeerAddressListener.java
similarity index 95%
rename from gui/src/main/java/io/bitsquare/msg/listeners/GetPeerAddressListener.java
rename to gui/src/main/java/io/bitsquare/trade/listeners/GetPeerAddressListener.java
index 2500f6de62..bbeae7b739 100644
--- a/gui/src/main/java/io/bitsquare/msg/listeners/GetPeerAddressListener.java
+++ b/gui/src/main/java/io/bitsquare/trade/listeners/GetPeerAddressListener.java
@@ -15,7 +15,7 @@
* along with Bitsquare. If not, see .
*/
-package io.bitsquare.msg.listeners;
+package io.bitsquare.trade.listeners;
import io.bitsquare.network.Peer;
diff --git a/gui/src/main/java/io/bitsquare/msg/listeners/IncomingMessageListener.java b/gui/src/main/java/io/bitsquare/trade/listeners/IncomingMessageListener.java
similarity index 91%
rename from gui/src/main/java/io/bitsquare/msg/listeners/IncomingMessageListener.java
rename to gui/src/main/java/io/bitsquare/trade/listeners/IncomingMessageListener.java
index 25bc85f927..52891a2e62 100644
--- a/gui/src/main/java/io/bitsquare/msg/listeners/IncomingMessageListener.java
+++ b/gui/src/main/java/io/bitsquare/trade/listeners/IncomingMessageListener.java
@@ -15,9 +15,9 @@
* along with Bitsquare. If not, see .
*/
-package io.bitsquare.msg.listeners;
+package io.bitsquare.trade.listeners;
-import io.bitsquare.msg.Message;
+import io.bitsquare.network.Message;
import io.bitsquare.network.Peer;
public interface IncomingMessageListener {
diff --git a/gui/src/main/java/io/bitsquare/msg/listeners/OutgoingMessageListener.java b/gui/src/main/java/io/bitsquare/trade/listeners/OutgoingMessageListener.java
similarity index 95%
rename from gui/src/main/java/io/bitsquare/msg/listeners/OutgoingMessageListener.java
rename to gui/src/main/java/io/bitsquare/trade/listeners/OutgoingMessageListener.java
index 63d1896141..c33e8c63ff 100644
--- a/gui/src/main/java/io/bitsquare/msg/listeners/OutgoingMessageListener.java
+++ b/gui/src/main/java/io/bitsquare/trade/listeners/OutgoingMessageListener.java
@@ -15,7 +15,7 @@
* along with Bitsquare. If not, see .
*/
-package io.bitsquare.msg.listeners;
+package io.bitsquare.trade.listeners;
public interface OutgoingMessageListener {
void onFailed();
diff --git a/gui/src/main/java/io/bitsquare/msg/listeners/TakeOfferRequestListener.java b/gui/src/main/java/io/bitsquare/trade/listeners/TakeOfferRequestListener.java
similarity index 95%
rename from gui/src/main/java/io/bitsquare/msg/listeners/TakeOfferRequestListener.java
rename to gui/src/main/java/io/bitsquare/trade/listeners/TakeOfferRequestListener.java
index 21c58beabc..1b8b59bea7 100644
--- a/gui/src/main/java/io/bitsquare/msg/listeners/TakeOfferRequestListener.java
+++ b/gui/src/main/java/io/bitsquare/trade/listeners/TakeOfferRequestListener.java
@@ -15,7 +15,7 @@
* along with Bitsquare. If not, see .
*/
-package io.bitsquare.msg.listeners;
+package io.bitsquare.trade.listeners;
import net.tomp2p.peers.PeerAddress;
diff --git a/gui/src/main/java/io/bitsquare/trade/protocol/trade/TradeMessage.java b/gui/src/main/java/io/bitsquare/trade/protocol/trade/TradeMessage.java
index ca8a239b4e..9f81a099a7 100644
--- a/gui/src/main/java/io/bitsquare/trade/protocol/trade/TradeMessage.java
+++ b/gui/src/main/java/io/bitsquare/trade/protocol/trade/TradeMessage.java
@@ -17,7 +17,7 @@
package io.bitsquare.trade.protocol.trade;
-import io.bitsquare.msg.Message;
+import io.bitsquare.network.Message;
public interface TradeMessage extends Message {
public String getTradeId();
diff --git a/gui/src/main/java/io/bitsquare/trade/protocol/trade/offerer/BuyerAcceptsOfferProtocol.java b/gui/src/main/java/io/bitsquare/trade/protocol/trade/offerer/BuyerAcceptsOfferProtocol.java
index 5ed28a5247..5e3036867c 100644
--- a/gui/src/main/java/io/bitsquare/trade/protocol/trade/offerer/BuyerAcceptsOfferProtocol.java
+++ b/gui/src/main/java/io/bitsquare/trade/protocol/trade/offerer/BuyerAcceptsOfferProtocol.java
@@ -22,11 +22,11 @@ import io.bitsquare.btc.BlockChainService;
import io.bitsquare.btc.FeePolicy;
import io.bitsquare.btc.WalletService;
import io.bitsquare.crypto.SignatureService;
-import io.bitsquare.msg.MessageService;
import io.bitsquare.network.Peer;
import io.bitsquare.offer.Offer;
import io.bitsquare.trade.Contract;
import io.bitsquare.trade.Trade;
+import io.bitsquare.trade.TradeMessageService;
import io.bitsquare.trade.protocol.trade.offerer.tasks.CreateDepositTx;
import io.bitsquare.trade.protocol.trade.offerer.tasks.HandleTakeOfferRequest;
import io.bitsquare.trade.protocol.trade.offerer.tasks.RequestTakerDepositPayment;
@@ -96,7 +96,7 @@ public class BuyerAcceptsOfferProtocol {
// provided
private final Trade trade;
private final Peer peer;
- private final MessageService messageService;
+ private final TradeMessageService tradeMessageService;
private final WalletService walletService;
private final BlockChainService blockChainService;
private final SignatureService signatureService;
@@ -139,7 +139,7 @@ public class BuyerAcceptsOfferProtocol {
public BuyerAcceptsOfferProtocol(Trade trade,
Peer peer,
- MessageService messageService,
+ TradeMessageService tradeMessageService,
WalletService walletService,
BlockChainService blockChainService,
SignatureService signatureService,
@@ -148,7 +148,7 @@ public class BuyerAcceptsOfferProtocol {
this.trade = trade;
this.peer = peer;
this.listener = listener;
- this.messageService = messageService;
+ this.tradeMessageService = tradeMessageService;
this.walletService = walletService;
this.blockChainService = blockChainService;
this.signatureService = signatureService;
@@ -175,7 +175,7 @@ public class BuyerAcceptsOfferProtocol {
public void start() {
log.debug("start called " + step++);
state = State.HandleTakeOfferRequest;
- HandleTakeOfferRequest.run(this::onResultHandleTakeOfferRequest, this::onFault, peer, messageService,
+ HandleTakeOfferRequest.run(this::onResultHandleTakeOfferRequest, this::onFault, peer, tradeMessageService,
trade.getState(), tradeId);
}
@@ -239,7 +239,7 @@ public class BuyerAcceptsOfferProtocol {
RequestTakerDepositPayment.run(this::onResultRequestTakerDepositPayment,
this::onFault,
peer,
- messageService,
+ tradeMessageService,
tradeId,
bankAccount,
accountId,
@@ -338,7 +338,7 @@ public class BuyerAcceptsOfferProtocol {
listener.onDepositTxPublished(depositTransaction);
state = State.SendDepositTxIdToTaker;
- SendDepositTxIdToTaker.run(this::onResultSendDepositTxIdToTaker, this::onFault, peer, messageService,
+ SendDepositTxIdToTaker.run(this::onResultSendDepositTxIdToTaker, this::onFault, peer, tradeMessageService,
tradeId, depositTransaction);
}
@@ -381,7 +381,7 @@ public class BuyerAcceptsOfferProtocol {
SendSignedPayoutTx.run(this::onResultSendSignedPayoutTx,
this::onFault,
peer,
- messageService,
+ tradeMessageService,
walletService,
tradeId,
peersPayoutAddress,
diff --git a/gui/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/HandleTakeOfferRequest.java b/gui/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/HandleTakeOfferRequest.java
index dd7727285d..03b92613db 100644
--- a/gui/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/HandleTakeOfferRequest.java
+++ b/gui/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/HandleTakeOfferRequest.java
@@ -17,10 +17,10 @@
package io.bitsquare.trade.protocol.trade.offerer.tasks;
-import io.bitsquare.msg.MessageService;
-import io.bitsquare.msg.listeners.OutgoingMessageListener;
+import io.bitsquare.trade.TradeMessageService;
import io.bitsquare.network.Peer;
import io.bitsquare.trade.Trade;
+import io.bitsquare.trade.listeners.OutgoingMessageListener;
import io.bitsquare.trade.protocol.trade.offerer.messages.RespondToTakeOfferRequestMessage;
import io.bitsquare.util.handlers.ExceptionHandler;
@@ -31,7 +31,7 @@ public class HandleTakeOfferRequest {
private static final Logger log = LoggerFactory.getLogger(HandleTakeOfferRequest.class);
public static void run(ResultHandler resultHandler, ExceptionHandler exceptionHandler, Peer peer,
- MessageService messageService, Trade.State tradeState, String tradeId) {
+ TradeMessageService tradeMessageService, Trade.State tradeState, String tradeId) {
log.trace("Run task");
boolean isTradeIsOpen = tradeState == Trade.State.OPEN;
if (!isTradeIsOpen) {
@@ -39,7 +39,7 @@ public class HandleTakeOfferRequest {
}
RespondToTakeOfferRequestMessage tradeMessage =
new RespondToTakeOfferRequestMessage(tradeId, isTradeIsOpen);
- messageService.sendMessage(peer, tradeMessage, new OutgoingMessageListener() {
+ tradeMessageService.sendMessage(peer, tradeMessage, new OutgoingMessageListener() {
@Override
public void onResult() {
log.trace("RespondToTakeOfferRequestMessage successfully arrived at peer");
diff --git a/gui/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/RequestTakerDepositPayment.java b/gui/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/RequestTakerDepositPayment.java
index 569bf3c73e..aeca92c385 100644
--- a/gui/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/RequestTakerDepositPayment.java
+++ b/gui/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/RequestTakerDepositPayment.java
@@ -18,8 +18,8 @@
package io.bitsquare.trade.protocol.trade.offerer.tasks;
import io.bitsquare.bank.BankAccount;
-import io.bitsquare.msg.MessageService;
-import io.bitsquare.msg.listeners.OutgoingMessageListener;
+import io.bitsquare.trade.TradeMessageService;
+import io.bitsquare.trade.listeners.OutgoingMessageListener;
import io.bitsquare.network.Peer;
import io.bitsquare.trade.protocol.trade.offerer.messages.RequestTakerDepositPaymentMessage;
import io.bitsquare.util.handlers.ExceptionHandler;
@@ -34,7 +34,7 @@ public class RequestTakerDepositPayment {
public static void run(ResultHandler resultHandler,
ExceptionHandler exceptionHandler,
Peer peer,
- MessageService messageService,
+ TradeMessageService tradeMessageService,
String tradeId,
BankAccount bankAccount,
String accountId,
@@ -44,7 +44,7 @@ public class RequestTakerDepositPayment {
log.trace("Run task");
RequestTakerDepositPaymentMessage tradeMessage = new RequestTakerDepositPaymentMessage(
tradeId, bankAccount, accountId, offererPubKey, preparedOffererDepositTxAsHex, offererTxOutIndex);
- messageService.sendMessage(peer, tradeMessage, new OutgoingMessageListener() {
+ tradeMessageService.sendMessage(peer, tradeMessage, new OutgoingMessageListener() {
@Override
public void onResult() {
log.trace("RequestTakerDepositPaymentMessage successfully arrived at peer");
diff --git a/gui/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/SendDepositTxIdToTaker.java b/gui/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/SendDepositTxIdToTaker.java
index 55e513111c..699106e974 100644
--- a/gui/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/SendDepositTxIdToTaker.java
+++ b/gui/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/SendDepositTxIdToTaker.java
@@ -17,8 +17,8 @@
package io.bitsquare.trade.protocol.trade.offerer.tasks;
-import io.bitsquare.msg.MessageService;
-import io.bitsquare.msg.listeners.OutgoingMessageListener;
+import io.bitsquare.trade.TradeMessageService;
+import io.bitsquare.trade.listeners.OutgoingMessageListener;
import io.bitsquare.network.Peer;
import io.bitsquare.trade.protocol.trade.offerer.messages.DepositTxPublishedMessage;
import io.bitsquare.util.handlers.ExceptionHandler;
@@ -34,12 +34,12 @@ public class SendDepositTxIdToTaker {
private static final Logger log = LoggerFactory.getLogger(SendDepositTxIdToTaker.class);
public static void run(ResultHandler resultHandler, ExceptionHandler exceptionHandler, Peer peer,
- MessageService messageService, String tradeId, Transaction depositTransaction) {
+ TradeMessageService tradeMessageService, String tradeId, Transaction depositTransaction) {
log.trace("Run task");
DepositTxPublishedMessage tradeMessage =
new DepositTxPublishedMessage(tradeId, Utils.HEX.encode(depositTransaction.bitcoinSerialize()));
- messageService.sendMessage(peer, tradeMessage, new OutgoingMessageListener() {
+ tradeMessageService.sendMessage(peer, tradeMessage, new OutgoingMessageListener() {
@Override
public void onResult() {
log.trace("DepositTxPublishedMessage successfully arrived at peer");
diff --git a/gui/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/SendSignedPayoutTx.java b/gui/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/SendSignedPayoutTx.java
index 63b7540968..536e331ffe 100644
--- a/gui/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/SendSignedPayoutTx.java
+++ b/gui/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/SendSignedPayoutTx.java
@@ -18,8 +18,8 @@
package io.bitsquare.trade.protocol.trade.offerer.tasks;
import io.bitsquare.btc.WalletService;
-import io.bitsquare.msg.MessageService;
-import io.bitsquare.msg.listeners.OutgoingMessageListener;
+import io.bitsquare.trade.TradeMessageService;
+import io.bitsquare.trade.listeners.OutgoingMessageListener;
import io.bitsquare.network.Peer;
import io.bitsquare.trade.protocol.trade.offerer.messages.BankTransferInitedMessage;
import io.bitsquare.util.handlers.ExceptionHandler;
@@ -39,7 +39,7 @@ public class SendSignedPayoutTx {
public static void run(ResultHandler resultHandler,
ExceptionHandler exceptionHandler,
Peer peer,
- MessageService messageService,
+ TradeMessageService tradeMessageService,
WalletService walletService,
String tradeId,
String takerPayoutAddress,
@@ -68,7 +68,7 @@ public class SendSignedPayoutTx {
takerPaybackAmount,
offererPayoutAddress);
- messageService.sendMessage(peer, tradeMessage, new OutgoingMessageListener() {
+ tradeMessageService.sendMessage(peer, tradeMessage, new OutgoingMessageListener() {
@Override
public void onResult() {
log.trace("BankTransferInitedMessage successfully arrived at peer");
diff --git a/gui/src/main/java/io/bitsquare/trade/protocol/trade/taker/SellerTakesOfferProtocol.java b/gui/src/main/java/io/bitsquare/trade/protocol/trade/taker/SellerTakesOfferProtocol.java
index 1614c6ac7a..6dafa3dfc9 100644
--- a/gui/src/main/java/io/bitsquare/trade/protocol/trade/taker/SellerTakesOfferProtocol.java
+++ b/gui/src/main/java/io/bitsquare/trade/protocol/trade/taker/SellerTakesOfferProtocol.java
@@ -21,11 +21,11 @@ import io.bitsquare.bank.BankAccount;
import io.bitsquare.btc.BlockChainService;
import io.bitsquare.btc.WalletService;
import io.bitsquare.crypto.SignatureService;
-import io.bitsquare.msg.MessageService;
import io.bitsquare.network.Peer;
import io.bitsquare.offer.Offer;
import io.bitsquare.trade.Contract;
import io.bitsquare.trade.Trade;
+import io.bitsquare.trade.TradeMessageService;
import io.bitsquare.trade.protocol.trade.offerer.messages.BankTransferInitedMessage;
import io.bitsquare.trade.protocol.trade.offerer.messages.DepositTxPublishedMessage;
import io.bitsquare.trade.protocol.trade.offerer.messages.RequestTakerDepositPaymentMessage;
@@ -86,7 +86,7 @@ public class SellerTakesOfferProtocol {
// provided data
private final Trade trade;
private final SellerTakesOfferProtocolListener listener;
- private final MessageService messageService;
+ private final TradeMessageService tradeMessageService;
private final WalletService walletService;
private final BlockChainService blockChainService;
private final SignatureService signatureService;
@@ -133,14 +133,14 @@ public class SellerTakesOfferProtocol {
public SellerTakesOfferProtocol(Trade trade,
SellerTakesOfferProtocolListener listener,
- MessageService messageService,
+ TradeMessageService tradeMessageService,
WalletService walletService,
BlockChainService blockChainService,
SignatureService signatureService,
User user) {
this.trade = trade;
this.listener = listener;
- this.messageService = messageService;
+ this.tradeMessageService = tradeMessageService;
this.walletService = walletService;
this.blockChainService = blockChainService;
this.signatureService = signatureService;
@@ -164,10 +164,13 @@ public class SellerTakesOfferProtocol {
state = State.Init;
}
+ // 1. GetPeerAddress
+ // Async
+ // In case of an error: No rollback activity needed
public void start() {
log.debug("start called " + step++);
state = State.GetPeerAddress;
- GetPeerAddress.run(this::onResultGetPeerAddress, this::onFault, messageService, peersMessagePublicKey);
+ GetPeerAddress.run(this::onResultGetPeerAddress, this::onFault, tradeMessageService, peersMessagePublicKey);
}
public void onResultGetPeerAddress(Peer peer) {
@@ -175,7 +178,7 @@ public class SellerTakesOfferProtocol {
this.peer = peer;
state = State.RequestTakeOffer;
- RequestTakeOffer.run(this::onResultRequestTakeOffer, this::onFault, peer, messageService, tradeId);
+ RequestTakeOffer.run(this::onResultRequestTakeOffer, this::onFault, peer, tradeMessageService, tradeId);
}
public void onResultRequestTakeOffer() {
@@ -211,7 +214,7 @@ public class SellerTakesOfferProtocol {
state = State.SendTakeOfferFeePayedTxId;
SendTakeOfferFeePayedTxId.run(this::onResultSendTakeOfferFeePayedTxId, this::onFault, peer,
- messageService, tradeId, takeOfferFeeTxId, tradeAmount, pubKeyForThatTrade);
+ tradeMessageService, tradeId, takeOfferFeeTxId, tradeAmount, pubKeyForThatTrade);
}
public void onResultSendTakeOfferFeePayedTxId() {
@@ -291,7 +294,7 @@ public class SellerTakesOfferProtocol {
SendSignedTakerDepositTxAsHex.run(this::onResultSendSignedTakerDepositTxAsHex,
this::onFault,
peer,
- messageService,
+ tradeMessageService,
walletService,
bankAccount,
accountId,
@@ -385,7 +388,7 @@ public class SellerTakesOfferProtocol {
listener.onPayoutTxPublished(trade, transaction);
state = State.SendPayoutTxToOfferer;
- SendPayoutTxToOfferer.run(this::onResultSendPayoutTxToOfferer, this::onFault, peer, messageService,
+ SendPayoutTxToOfferer.run(this::onResultSendPayoutTxToOfferer, this::onFault, peer, tradeMessageService,
tradeId, payoutTxAsHex);
}
diff --git a/gui/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/GetPeerAddress.java b/gui/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/GetPeerAddress.java
index 2a8c5b9cf6..d3cc279ae7 100644
--- a/gui/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/GetPeerAddress.java
+++ b/gui/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/GetPeerAddress.java
@@ -17,9 +17,9 @@
package io.bitsquare.trade.protocol.trade.taker.tasks;
-import io.bitsquare.msg.MessageService;
-import io.bitsquare.msg.listeners.GetPeerAddressListener;
import io.bitsquare.network.Peer;
+import io.bitsquare.trade.TradeMessageService;
+import io.bitsquare.trade.listeners.GetPeerAddressListener;
import io.bitsquare.util.handlers.ExceptionHandler;
import java.security.PublicKey;
@@ -29,11 +29,11 @@ import org.slf4j.LoggerFactory;
public class GetPeerAddress {
private static final Logger log = LoggerFactory.getLogger(GetPeerAddress.class);
-
+
public static void run(ResultHandler resultHandler, ExceptionHandler exceptionHandler,
- MessageService messageService, PublicKey messagePublicKey) {
- log.trace("Run task");
- messageService.getPeerAddress(messagePublicKey, new GetPeerAddressListener() {
+ TradeMessageService tradeMessageService, PublicKey messagePublicKey) {
+ log.trace("Run GetPeerAddress task");
+ tradeMessageService.getPeerAddress(messagePublicKey, new GetPeerAddressListener() {
@Override
public void onResult(Peer peer) {
log.trace("Received peer = " + peer.toString());
@@ -42,8 +42,8 @@ public class GetPeerAddress {
@Override
public void onFailed() {
- log.error("Lookup for peer address faultHandler.onFault.");
- exceptionHandler.handleException(new Exception("Lookup for peer address faultHandler.onFault."));
+ log.error("Lookup for peer address failed.");
+ exceptionHandler.handleException(new Exception("Lookup for peer address failed."));
}
});
}
diff --git a/gui/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/RequestTakeOffer.java b/gui/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/RequestTakeOffer.java
index cb44799953..6ea91d8287 100644
--- a/gui/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/RequestTakeOffer.java
+++ b/gui/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/RequestTakeOffer.java
@@ -17,8 +17,8 @@
package io.bitsquare.trade.protocol.trade.taker.tasks;
-import io.bitsquare.msg.MessageService;
-import io.bitsquare.msg.listeners.OutgoingMessageListener;
+import io.bitsquare.trade.TradeMessageService;
+import io.bitsquare.trade.listeners.OutgoingMessageListener;
import io.bitsquare.network.Peer;
import io.bitsquare.trade.protocol.trade.taker.messages.RequestTakeOfferMessage;
import io.bitsquare.util.handlers.ExceptionHandler;
@@ -31,9 +31,9 @@ public class RequestTakeOffer {
private static final Logger log = LoggerFactory.getLogger(RequestTakeOffer.class);
public static void run(ResultHandler resultHandler, ExceptionHandler exceptionHandler, Peer peer,
- MessageService messageService, String tradeId) {
+ TradeMessageService tradeMessageService, String tradeId) {
log.trace("Run task");
- messageService.sendMessage(peer, new RequestTakeOfferMessage(tradeId),
+ tradeMessageService.sendMessage(peer, new RequestTakeOfferMessage(tradeId),
new OutgoingMessageListener() {
@Override
public void onResult() {
diff --git a/gui/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/SendPayoutTxToOfferer.java b/gui/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/SendPayoutTxToOfferer.java
index dc0e9bf3ce..db10ceed58 100644
--- a/gui/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/SendPayoutTxToOfferer.java
+++ b/gui/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/SendPayoutTxToOfferer.java
@@ -17,8 +17,8 @@
package io.bitsquare.trade.protocol.trade.taker.tasks;
-import io.bitsquare.msg.MessageService;
-import io.bitsquare.msg.listeners.OutgoingMessageListener;
+import io.bitsquare.trade.TradeMessageService;
+import io.bitsquare.trade.listeners.OutgoingMessageListener;
import io.bitsquare.network.Peer;
import io.bitsquare.trade.protocol.trade.taker.messages.PayoutTxPublishedMessage;
import io.bitsquare.util.handlers.ExceptionHandler;
@@ -31,10 +31,10 @@ public class SendPayoutTxToOfferer {
private static final Logger log = LoggerFactory.getLogger(SendPayoutTxToOfferer.class);
public static void run(ResultHandler resultHandler, ExceptionHandler exceptionHandler, Peer peer,
- MessageService messageService, String tradeId, String payoutTxAsHex) {
+ TradeMessageService tradeMessageService, String tradeId, String payoutTxAsHex) {
log.trace("Run task");
PayoutTxPublishedMessage tradeMessage = new PayoutTxPublishedMessage(tradeId, payoutTxAsHex);
- messageService.sendMessage(peer, tradeMessage, new OutgoingMessageListener() {
+ tradeMessageService.sendMessage(peer, tradeMessage, new OutgoingMessageListener() {
@Override
public void onResult() {
log.trace("PayoutTxPublishedMessage successfully arrived at peer");
diff --git a/gui/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/SendSignedTakerDepositTxAsHex.java b/gui/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/SendSignedTakerDepositTxAsHex.java
index dbc1673725..2c02530cae 100644
--- a/gui/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/SendSignedTakerDepositTxAsHex.java
+++ b/gui/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/SendSignedTakerDepositTxAsHex.java
@@ -19,8 +19,8 @@ package io.bitsquare.trade.protocol.trade.taker.tasks;
import io.bitsquare.bank.BankAccount;
import io.bitsquare.btc.WalletService;
-import io.bitsquare.msg.MessageService;
-import io.bitsquare.msg.listeners.OutgoingMessageListener;
+import io.bitsquare.trade.TradeMessageService;
+import io.bitsquare.trade.listeners.OutgoingMessageListener;
import io.bitsquare.network.Peer;
import io.bitsquare.trade.protocol.trade.taker.messages.RequestOffererPublishDepositTxMessage;
import io.bitsquare.util.handlers.ExceptionHandler;
@@ -40,7 +40,7 @@ public class SendSignedTakerDepositTxAsHex {
public static void run(ResultHandler resultHandler,
ExceptionHandler exceptionHandler,
Peer peer,
- MessageService messageService,
+ TradeMessageService tradeMessageService,
WalletService walletService,
BankAccount bankAccount,
String accountId,
@@ -68,7 +68,7 @@ public class SendSignedTakerDepositTxAsHex {
walletService.getAddressInfoByTradeID(tradeId).getAddressString(),
takerTxOutIndex,
offererTxOutIndex);
- messageService.sendMessage(peer, tradeMessage, new OutgoingMessageListener() {
+ tradeMessageService.sendMessage(peer, tradeMessage, new OutgoingMessageListener() {
@Override
public void onResult() {
log.trace("RequestOffererDepositPublicationMessage successfully arrived at peer");
diff --git a/gui/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/SendTakeOfferFeePayedTxId.java b/gui/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/SendTakeOfferFeePayedTxId.java
index 08b2708c4c..4c605a1893 100644
--- a/gui/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/SendTakeOfferFeePayedTxId.java
+++ b/gui/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/SendTakeOfferFeePayedTxId.java
@@ -17,8 +17,8 @@
package io.bitsquare.trade.protocol.trade.taker.tasks;
-import io.bitsquare.msg.MessageService;
-import io.bitsquare.msg.listeners.OutgoingMessageListener;
+import io.bitsquare.trade.TradeMessageService;
+import io.bitsquare.trade.listeners.OutgoingMessageListener;
import io.bitsquare.network.Peer;
import io.bitsquare.trade.protocol.trade.taker.messages.TakeOfferFeePayedMessage;
import io.bitsquare.util.handlers.ExceptionHandler;
@@ -35,7 +35,7 @@ public class SendTakeOfferFeePayedTxId {
public static void run(ResultHandler resultHandler,
ExceptionHandler exceptionHandler,
Peer peer,
- MessageService messageService,
+ TradeMessageService tradeMessageService,
String tradeId,
String takeOfferFeeTxId,
Coin tradeAmount,
@@ -44,7 +44,7 @@ public class SendTakeOfferFeePayedTxId {
TakeOfferFeePayedMessage msg = new TakeOfferFeePayedMessage(tradeId, takeOfferFeeTxId, tradeAmount,
pubKeyForThatTradeAsHex);
- messageService.sendMessage(peer, msg, new OutgoingMessageListener() {
+ tradeMessageService.sendMessage(peer, msg, new OutgoingMessageListener() {
@Override
public void onResult() {
log.trace("TakeOfferFeePayedMessage successfully arrived at peer");
diff --git a/gui/src/main/java/io/bitsquare/trade/tomp2p/TomP2PTradeMessageModule.java b/gui/src/main/java/io/bitsquare/trade/tomp2p/TomP2PTradeMessageModule.java
new file mode 100644
index 0000000000..dd044c4d4f
--- /dev/null
+++ b/gui/src/main/java/io/bitsquare/trade/tomp2p/TomP2PTradeMessageModule.java
@@ -0,0 +1,43 @@
+/*
+ * This file is part of Bitsquare.
+ *
+ * Bitsquare is free software: you can redistribute it and/or modify it
+ * under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * Bitsquare is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public
+ * License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with Bitsquare. If not, see .
+ */
+
+package io.bitsquare.trade.tomp2p;
+
+import io.bitsquare.trade.TradeMessageModule;
+import io.bitsquare.trade.TradeMessageService;
+
+import com.google.inject.Injector;
+import com.google.inject.Singleton;
+
+import org.springframework.core.env.Environment;
+
+public class TomP2PTradeMessageModule extends TradeMessageModule {
+
+ public TomP2PTradeMessageModule(Environment env) {
+ super(env);
+ }
+
+ @Override
+ protected void doConfigure() {
+ bind(TradeMessageService.class).to(TomP2PTradeMessageService.class).in(Singleton.class);
+ }
+
+ @Override
+ protected void doClose(Injector injector) {
+ super.doClose(injector);
+ }
+}
diff --git a/gui/src/main/java/io/bitsquare/trade/tomp2p/TomP2PTradeMessageService.java b/gui/src/main/java/io/bitsquare/trade/tomp2p/TomP2PTradeMessageService.java
new file mode 100644
index 0000000000..abefb1250e
--- /dev/null
+++ b/gui/src/main/java/io/bitsquare/trade/tomp2p/TomP2PTradeMessageService.java
@@ -0,0 +1,156 @@
+/*
+ * This file is part of Bitsquare.
+ *
+ * Bitsquare is free software: you can redistribute it and/or modify it
+ * under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * Bitsquare is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public
+ * License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with Bitsquare. If not, see .
+ */
+
+package io.bitsquare.trade.tomp2p;
+
+import io.bitsquare.network.Message;
+import io.bitsquare.network.Peer;
+import io.bitsquare.network.tomp2p.TomP2PNode;
+import io.bitsquare.network.tomp2p.TomP2PPeer;
+import io.bitsquare.trade.TradeMessageService;
+import io.bitsquare.trade.listeners.GetPeerAddressListener;
+import io.bitsquare.trade.listeners.IncomingMessageListener;
+import io.bitsquare.trade.listeners.OutgoingMessageListener;
+import io.bitsquare.user.User;
+
+import java.security.PublicKey;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.inject.Inject;
+
+import javafx.application.Platform;
+
+import net.tomp2p.dht.FutureGet;
+import net.tomp2p.futures.BaseFuture;
+import net.tomp2p.futures.BaseFutureAdapter;
+import net.tomp2p.futures.BaseFutureListener;
+import net.tomp2p.futures.FutureDirect;
+import net.tomp2p.peers.Number160;
+import net.tomp2p.utils.Utils;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+/**
+ * That service delivers direct messaging and DHT functionality from the TomP2P library
+ * It is the translating domain specific functionality to the messaging layer.
+ * The TomP2P library codebase shall not be used outside that service.
+ * That way we limit the dependency of the TomP2P library only to that class (and it's sub components).
+ *
+ * TODO: improve callbacks that Platform.runLater is not necessary. We call usually that methods form teh UI thread.
+ */
+public class TomP2PTradeMessageService implements TradeMessageService {
+ private static final Logger log = LoggerFactory.getLogger(TomP2PTradeMessageService.class);
+
+ private final TomP2PNode tomP2PNode;
+ private final User user;
+
+ private final List incomingMessageListeners = new ArrayList<>();
+
+
+ ///////////////////////////////////////////////////////////////////////////////////////////
+ // Constructor
+ ///////////////////////////////////////////////////////////////////////////////////////////
+
+ @Inject
+ public TomP2PTradeMessageService(User user, TomP2PNode tomP2PNode) {
+ this.user = user;
+ this.tomP2PNode = tomP2PNode;
+ }
+
+
+ ///////////////////////////////////////////////////////////////////////////////////////////
+ // Find peer address by publicKey
+ ///////////////////////////////////////////////////////////////////////////////////////////
+
+ public void getPeerAddress(PublicKey publicKey, GetPeerAddressListener listener) {
+ final Number160 locationKey = Utils.makeSHAHash(publicKey.getEncoded());
+ FutureGet futureGet = tomP2PNode.getDomainProtectedData(locationKey, publicKey);
+
+ futureGet.addListener(new BaseFutureAdapter() {
+ @Override
+ public void operationComplete(BaseFuture baseFuture) throws Exception {
+ if (baseFuture.isSuccess() && futureGet.data() != null) {
+ final Peer peer = (Peer) futureGet.data().object();
+ Platform.runLater(() -> listener.onResult(peer));
+ }
+ else {
+ log.error("getPeerAddress failed. failedReason = " + baseFuture.failedReason());
+ Platform.runLater(listener::onFailed);
+ }
+ }
+ });
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////////////////
+ // Trade process
+ ///////////////////////////////////////////////////////////////////////////////////////////
+
+ public void sendMessage(Peer peer, Message message,
+ OutgoingMessageListener listener) {
+ if (!(peer instanceof TomP2PPeer)) {
+ throw new IllegalArgumentException("peer must be of type TomP2PPeer");
+ }
+ FutureDirect futureDirect = tomP2PNode.sendData(((TomP2PPeer) peer).getPeerAddress(), message);
+ futureDirect.addListener(new BaseFutureListener() {
+ @Override
+ public void operationComplete(BaseFuture future) throws Exception {
+ if (future.isSuccess()) {
+ Platform.runLater(listener::onResult);
+ }
+ else {
+ log.error("sendMessage failed with reason " + futureDirect.failedReason());
+ Platform.runLater(listener::onFailed);
+ }
+ }
+
+ @Override
+ public void exceptionCaught(Throwable t) throws Exception {
+ Platform.runLater(listener::onFailed);
+ }
+ });
+ }
+
+
+ ///////////////////////////////////////////////////////////////////////////////////////////
+ // Event Listeners
+ ///////////////////////////////////////////////////////////////////////////////////////////
+
+ public void addIncomingMessageListener(IncomingMessageListener listener) {
+ incomingMessageListeners.add(listener);
+ }
+
+ public void removeIncomingMessageListener(IncomingMessageListener listener) {
+ incomingMessageListeners.remove(listener);
+ }
+
+
+ ///////////////////////////////////////////////////////////////////////////////////////////
+ // Incoming message handler
+ ///////////////////////////////////////////////////////////////////////////////////////////
+
+ @Override
+ public void handleMessage(Object message, Peer sender) {
+ if (message instanceof Message) {
+ Platform.runLater(() -> incomingMessageListeners.stream().forEach(e ->
+ e.onMessage((Message) message, sender)));
+ }
+ }
+}
diff --git a/gui/src/test/java/io/bitsquare/msg/tomp2p/TomP2PNodeTest.java b/gui/src/test/java/io/bitsquare/network/tomp2p/TomP2PNodeTest.java
similarity index 99%
rename from gui/src/test/java/io/bitsquare/msg/tomp2p/TomP2PNodeTest.java
rename to gui/src/test/java/io/bitsquare/network/tomp2p/TomP2PNodeTest.java
index 6ed6abb0f6..bd38baf0d4 100644
--- a/gui/src/test/java/io/bitsquare/msg/tomp2p/TomP2PNodeTest.java
+++ b/gui/src/test/java/io/bitsquare/network/tomp2p/TomP2PNodeTest.java
@@ -15,7 +15,7 @@
* along with Bitsquare. If not, see .
*/
-package io.bitsquare.msg.tomp2p;
+package io.bitsquare.network.tomp2p;
import java.io.IOException;
diff --git a/gui/src/test/java/io/bitsquare/trade/protocol/placeoffer/PlaceOfferProtocolTest.java b/gui/src/test/java/io/bitsquare/trade/protocol/placeoffer/PlaceOfferProtocolTest.java
index 21d4d1f096..36b028bc65 100644
--- a/gui/src/test/java/io/bitsquare/trade/protocol/placeoffer/PlaceOfferProtocolTest.java
+++ b/gui/src/test/java/io/bitsquare/trade/protocol/placeoffer/PlaceOfferProtocolTest.java
@@ -25,17 +25,18 @@ import io.bitsquare.btc.UserAgent;
import io.bitsquare.btc.WalletService;
import io.bitsquare.locale.CountryUtil;
import io.bitsquare.locale.LanguageUtil;
-import io.bitsquare.msg.tomp2p.BootstrappedPeerBuilder;
-import io.bitsquare.msg.tomp2p.TomP2PMessageService;
-import io.bitsquare.msg.tomp2p.TomP2PNode;
import io.bitsquare.network.BootstrapState;
import io.bitsquare.network.Node;
+import io.bitsquare.network.tomp2p.BootstrappedPeerBuilder;
+import io.bitsquare.network.tomp2p.TomP2PNode;
import io.bitsquare.offer.Direction;
import io.bitsquare.offer.Offer;
import io.bitsquare.offer.RemoteOfferBook;
import io.bitsquare.offer.tomp2p.TomP2POfferBook;
import io.bitsquare.persistence.Persistence;
+import io.bitsquare.trade.TradeMessageService;
import io.bitsquare.trade.handlers.TransactionResultHandler;
+import io.bitsquare.trade.tomp2p.TomP2PTradeMessageService;
import io.bitsquare.user.User;
import io.bitsquare.util.DSAKeyUtil;
import io.bitsquare.util.handlers.FaultHandler;
@@ -80,11 +81,13 @@ public class PlaceOfferProtocolTest {
private static final Logger log = LoggerFactory.getLogger(PlaceOfferProtocolTest.class);
private WalletService walletService;
- private TomP2PMessageService messageService;
+ private TradeMessageService tradeMessageService;
private RemoteOfferBook remoteOfferBook;
private final File dir = new File("./temp");
private final static String OFFER_ID = "offerID";
private Address address;
+ private TomP2PNode tomP2PNode;
+ private BootstrappedPeerBuilder bootstrappedPeerBuilder;
@Before
public void setup() throws InterruptedException {
@@ -98,11 +101,11 @@ public class PlaceOfferProtocolTest {
Node bootstrapNode = Node.at("localhost", "127.0.0.1");
User user = new User();
user.applyPersistedUser(null);
- BootstrappedPeerBuilder bootstrappedPeerBuilder = new BootstrappedPeerBuilder(Node.DEFAULT_PORT, false, bootstrapNode, "");
- TomP2PNode p2pNode = new TomP2PNode(bootstrappedPeerBuilder);
- messageService = new TomP2PMessageService(user, p2pNode);
+ bootstrappedPeerBuilder = new BootstrappedPeerBuilder(Node.DEFAULT_PORT, false, bootstrapNode, "");
+ tomP2PNode = new TomP2PNode(bootstrappedPeerBuilder);
+ tradeMessageService = new TomP2PTradeMessageService(user, tomP2PNode);
- Observable messageObservable = messageService.init();
+ Observable messageObservable = tomP2PNode.bootstrap(user.getMessageKeyPair(), tradeMessageService);
messageObservable.publish();
messageObservable.subscribe(
state -> log.trace("state changed: " + state),
@@ -112,7 +115,7 @@ public class PlaceOfferProtocolTest {
() -> {
log.trace("message completed");
- remoteOfferBook = new TomP2POfferBook(p2pNode);
+ remoteOfferBook = new TomP2POfferBook(tomP2PNode);
remoteOfferBook.setExecutor(Threading.SAME_THREAD);
}
);
@@ -161,7 +164,7 @@ public class PlaceOfferProtocolTest {
@After
public void shutDown() throws IOException, InterruptedException {
walletService.shutDown();
- messageService.shutDown();
+ bootstrappedPeerBuilder.shutDown();
}
@Test