package network.thunder.core.communication.objects.messages.impl.factories;
import network.thunder.core.communication.objects.messages.impl.*;
import network.thunder.core.communication.objects.messages.impl.blockchainlistener.MockBlockchainHelper;
import network.thunder.core.communication.objects.messages.impl.routing.LNRoutingHelperImpl;
import network.thunder.core.communication.objects.messages.interfaces.factories.*;
import network.thunder.core.communication.objects.messages.interfaces.helper.*;
import network.thunder.core.communication.processor.implementations.AuthenticationProcessorImpl;
import network.thunder.core.communication.processor.implementations.EncryptionProcessorImpl;
import network.thunder.core.communication.processor.implementations.LNEstablishProcessorImpl;
import network.thunder.core.communication.processor.implementations.PeerSeedProcessorImpl;
import network.thunder.core.communication.processor.implementations.gossip.BroadcastHelper;
import network.thunder.core.communication.processor.implementations.gossip.GossipProcessorImpl;
import network.thunder.core.communication.processor.implementations.gossip.GossipSubject;
import network.thunder.core.communication.processor.implementations.gossip.GossipSubjectImpl;
import network.thunder.core.communication.processor.implementations.lnpayment.LNPaymentLogicImpl;
import network.thunder.core.communication.processor.implementations.lnpayment.LNPaymentProcessorImpl;
import network.thunder.core.communication.processor.implementations.sync.SyncProcessorImpl;
import network.thunder.core.communication.processor.implementations.sync.SynchronizationHelper;
import network.thunder.core.communication.processor.interfaces.*;
import network.thunder.core.communication.processor.interfaces.lnpayment.LNPaymentLogic;
import network.thunder.core.communication.processor.interfaces.lnpayment.LNPaymentProcessor;
import network.thunder.core.database.DBHandler;
import network.thunder.core.mesh.NodeClient;
import network.thunder.core.mesh.NodeServer;
import org.bitcoinj.core.Wallet;
/**
* Created by matsjerratsch on 18/01/2016.
*/
public class ContextFactoryImpl implements ContextFactory {
DBHandler dbHandler;
LNEventHelper eventHelper;
SynchronizationHelper syncHelper;
GossipSubject gossipSubject;
BroadcastHelper broadcastHelper;
WalletHelper walletHelper;
LNPaymentHelper paymentHelper;
LNOnionHelper onionHelper = new LNOnionHelperImpl();
NodeServer nodeServer;
BlockchainHelper blockchainHelper;
ChannelManager channelManager;
public ContextFactoryImpl (NodeServer node, DBHandler dbHandler, Wallet wallet, LNEventHelper eventHelper) {
this.nodeServer = node;
this.dbHandler = dbHandler;
this.eventHelper = eventHelper;
this.walletHelper = new WalletHelperImpl(wallet);
GossipSubjectImpl gossipSubject = new GossipSubjectImpl(dbHandler, eventHelper);
this.gossipSubject = gossipSubject;
this.broadcastHelper = gossipSubject;
this.syncHelper = new SynchronizationHelper(dbHandler);
this.paymentHelper = new LNPaymentHelperImpl(this, dbHandler);
this.blockchainHelper = new MockBlockchainHelper();
this.channelManager = new ChannelManagerImpl(getBlockchainHelper());
}
@Override
public MessageSerializer getMessageSerializer () {
return new MessageSerializerImpl();
}
@Override
public MessageEncrypter getMessageEncrypter () {
return new MessageEncrypterImpl(getMessageSerializer());
}
@Override
public EncryptionProcessor getEncryptionProcessor (NodeClient node) {
return new EncryptionProcessorImpl(this, node);
}
@Override
public AuthenticationProcessor getAuthenticationProcessor (NodeClient node) {
return new AuthenticationProcessorImpl(this, node);
}
@Override
public PeerSeedProcessor getPeerSeedProcessor (NodeClient node) {
return new PeerSeedProcessorImpl(this, dbHandler, node);
}
@Override
public SyncProcessor getSyncProcessor (NodeClient node) {
return new SyncProcessorImpl(this, node);
}
@Override
public GossipProcessor getGossipProcessor (NodeClient node) {
return new GossipProcessorImpl(this, dbHandler, node);
}
@Override
public LNEstablishProcessor getLNEstablishProcessor (NodeClient node) {
return new LNEstablishProcessorImpl(this, dbHandler, node);
}
@Override
public LNPaymentProcessor getLNPaymentProcessor (NodeClient node) {
return new LNPaymentProcessorImpl(this, dbHandler, node);
}
@Override
public LNPaymentHelper getPaymentHelper () {
return paymentHelper;
}
@Override
public LNOnionHelper getOnionHelper () {
return onionHelper;
}
@Override
public LNEventHelper getEventHelper () {
return eventHelper;
}
@Override
public BroadcastHelper getBroadcastHelper () {
return broadcastHelper;
}
@Override
public SynchronizationHelper getSyncHelper () {
return syncHelper;
}
@Override
public WalletHelper getWalletHelper () {
return walletHelper;
}
@Override
public GossipSubject getGossipSubject () {
return gossipSubject;
}
@Override
public LNPaymentLogic getLNPaymentLogic () {
return new LNPaymentLogicImpl(getLNPaymentMessageFactory(), dbHandler);
}
@Override
public NodeServer getServerSettings () {
return nodeServer;
}
@Override
public EncryptionMessageFactory getEncryptionMessageFactory () {
return new EncryptionMessageFactoryImpl();
}
@Override
public AuthenticationMessageFactory getAuthenticationMessageFactory () {
return new AuthenticationMessageFactoryImpl();
}
@Override
public PeerSeedMessageFactory getPeerSeedMessageFactory () {
return new PeerSeedMessageFactoryImpl();
}
@Override
public SyncMessageFactory getSyncMessageFactory () {
return new SyncMessageFactoryImpl();
}
@Override
public GossipMessageFactory getGossipMessageFactory () {
return new GossipMessageFactoryImpl();
}
@Override
public LNEstablishMessageFactory getLNEstablishMessageFactory () {
return new LNEstablishMessageFactoryImpl();
}
@Override
public LNPaymentMessageFactory getLNPaymentMessageFactory () {
return new LNPaymentMessageFactoryImpl(dbHandler);
}
@Override
public LNRoutingHelper getLNRoutingHelper () {
return new LNRoutingHelperImpl(dbHandler);
}
@Override
public BlockchainHelper getBlockchainHelper () {
return blockchainHelper;
}
@Override
public ChannelManager getChannelManager () {
return channelManager;
}
}