package org.infinispan.client.hotrod.impl.transport;
import java.net.SocketAddress;
import java.util.Collection;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.atomic.AtomicInteger;
import javax.net.ssl.SSLContext;
import org.infinispan.client.hotrod.CacheTopologyInfo;
import org.infinispan.client.hotrod.configuration.Configuration;
import org.infinispan.client.hotrod.event.ClientListenerNotifier;
import org.infinispan.client.hotrod.impl.consistenthash.ConsistentHash;
import org.infinispan.client.hotrod.impl.consistenthash.ConsistentHashFactory;
import org.infinispan.client.hotrod.impl.operations.AddClientListenerOperation;
import org.infinispan.client.hotrod.impl.protocol.Codec;
import org.infinispan.client.hotrod.impl.transport.tcp.TcpTransportFactory.ClusterSwitchStatus;
import org.infinispan.commons.marshall.Marshaller;
/**
* Transport factory for building and managing {@link org.infinispan.client.hotrod.impl.transport.Transport} objects.
*
* @author Mircea.Markus@jboss.com
* @since 4.1
*/
public interface TransportFactory {
Transport getTransport(Set<SocketAddress> failedServers, byte[] cacheName);
Transport getAddressTransport(SocketAddress server);
SocketAddress getSocketAddress(Object key, byte[] cacheName);
void releaseTransport(Transport transport);
void start(Codec codec, Configuration configuration, AtomicInteger topologyId, ClientListenerNotifier listenerNotifier);
void updateServers(Collection<SocketAddress> newServers, byte[] cacheName, boolean quiet);
void destroy();
CacheTopologyInfo getCacheTopologyInfo(byte[] cacheName);
/**
* @deprecated Only called for Hot Rod 1.x protocol.
*/
@Deprecated
void updateHashFunction(Map<SocketAddress, Set<Integer>> servers2Hash, int numKeyOwners, short hashFunctionVersion, int hashSpace,
byte[] cacheName, AtomicInteger topologyId);
void updateHashFunction(SocketAddress[][] segmentOwners, int numSegments, short hashFunctionVersion,
byte[] cacheName, AtomicInteger topologyId);
ConsistentHash getConsistentHash(byte[] cacheName);
ConsistentHashFactory getConsistentHashFactory();
Transport getTransport(Object key, Set<SocketAddress> failedServers, byte[] cacheName);
boolean isTcpNoDelay();
boolean isTcpKeepAlive();
int getMaxRetries();
int getSoTimeout();
int getConnectTimeout();
void invalidateTransport(SocketAddress serverAddress, Transport transport);
SSLContext getSSLContext();
void reset(byte[] cacheName);
AtomicInteger createTopologyId(byte[] cacheName);
int getTopologyId(byte[] cacheName);
ClusterSwitchStatus trySwitchCluster(String failedClusterName, byte[] cacheName);
Marshaller getMarshaller();
boolean switchToCluster(String clusterName);
String getCurrentClusterName();
int getTopologyAge();
String getSniHostName();
void addDisconnectedListener(AddClientListenerOperation listener) throws InterruptedException;
}