SocketConnectionFactory API improvements

@NotNull, specify bind address for server socket connection,
convert classes to interfaces to enable Kotlin SAM conversions
This commit is contained in:
Dmitry Jemerov
2018-11-21 18:27:33 +01:00
parent e824cc5fa4
commit 637c4edb6d
4 changed files with 25 additions and 13 deletions
@@ -15,9 +15,11 @@
*/
package com.intellij.util.io.socketConnection;
import org.jetbrains.annotations.NotNull;
/**
* @author nik
*/
public abstract class AbstractResponseHandler<R extends AbstractResponse> {
public abstract void processResponse(R response);
public interface AbstractResponseHandler<R extends AbstractResponse> {
void processResponse(@NotNull R response);
}
@@ -15,9 +15,14 @@
*/
package com.intellij.util.io.socketConnection;
import org.jetbrains.annotations.NotNull;
/**
* @author nik
*/
public abstract class AbstractResponseToRequestHandler<R extends AbstractResponse> {
public abstract boolean processResponse(R response);
public interface AbstractResponseToRequestHandler<R extends AbstractResponse> {
/**
* @return true if no further responses to this request are expected, false if more responses are coming
*/
boolean processResponse(@NotNull R response);
}
@@ -29,14 +29,14 @@ public class SocketConnectionFactory {
}
public static <Request extends AbstractRequest, Response extends AbstractResponse>
SocketConnection<Request, Response> createServerConnection(int defaultPort, int attempts, RequestResponseExternalizerFactory<Request, Response> factory) {
return new ServerSocketConnectionImpl<>(defaultPort, attempts, factory);
SocketConnection<Request, Response> createServerConnection(int defaultPort, @Nullable InetAddress bindAddress, int attempts, RequestResponseExternalizerFactory<Request, Response> factory) {
return new ServerSocketConnectionImpl<>(defaultPort, bindAddress, attempts, factory);
}
public static <Request extends AbstractRequest, Response extends AbstractResponse>
SocketConnection<Request, Response> createServerConnection(int defaultPort, RequestResponseExternalizerFactory<Request, Response> factory) {
return new ServerSocketConnectionImpl<>(defaultPort, 1, factory);
SocketConnection<Request, Response> createServerConnection(int defaultPort, @Nullable InetAddress bindAddress, RequestResponseExternalizerFactory<Request, Response> factory) {
return new ServerSocketConnectionImpl<>(defaultPort, bindAddress, 1, factory);
}
public static <Request extends AbstractRequest, Response extends AbstractResponse>
@@ -8,8 +8,10 @@ import com.intellij.util.io.socketConnection.AbstractResponse;
import com.intellij.util.io.socketConnection.ConnectionStatus;
import com.intellij.util.io.socketConnection.RequestResponseExternalizerFactory;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.io.IOException;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;
@@ -20,14 +22,17 @@ public class ServerSocketConnectionImpl<Request extends AbstractRequest, Respons
private static final Logger LOG = Logger.getInstance("#com.intellij.util.io.socketConnection.impl.ServerSocketConnectionImpl");
private ServerSocket myServerSocket;
private final int myDefaultPort;
private final int myConnectionAttempts;
private final int myPortChoiceAttempts;
@Nullable private final InetAddress myBindAddress;
public ServerSocketConnectionImpl(int defaultPort,
int connectionAttempts,
@Nullable InetAddress bindAddress,
int portChoiceAttempts,
@NotNull RequestResponseExternalizerFactory<Request, Response> factory) {
super(factory);
myDefaultPort = defaultPort;
myConnectionAttempts = connectionAttempts;
myPortChoiceAttempts = portChoiceAttempts;
myBindAddress = bindAddress;
}
@Override
@@ -48,10 +53,10 @@ public class ServerSocketConnectionImpl<Request extends AbstractRequest, Respons
@NotNull
private ServerSocket createSocket() throws IOException {
IOException exc = null;
for (int i = 0; i < myConnectionAttempts; i++) {
for (int i = 0; i < myPortChoiceAttempts; i++) {
int port = myDefaultPort + i;
try {
return new ServerSocket(port);
return new ServerSocket(port, 0, myBindAddress);
}
catch (IOException e) {
exc = e;