package com.faforever.client.relay;
import com.faforever.client.connectivity.DatagramGateway;
import java.net.InetSocketAddress;
import java.util.concurrent.CompletionStage;
/**
* A local relay server to which Forged Alliance can connect to. All GPG commands received from FA are forwarded to the
* FAF relay server, and vice-versa. To FA, this looks like a GPG server.
*/
public interface LocalRelayServer {
/**
* Add a listener to be called whenever the game connected to this relay server.
*/
void addOnGameConnectedListener(Runnable listener);
/**
* Returns the port number the server socket is listening on.
*/
Integer getPort();
/**
* Starts the local relay server in background and completes the returned future with the opened TCP port when
* started.
*
* @param gateway the {@link DatagramGateway} to use for incoming/outgoing datagram packets
*/
CompletionStage<Integer> start(DatagramGateway gateway);
/**
* Returns the datagram socket address (IP/port) on which the game accepts packages.
*/
InetSocketAddress getGameSocketAddress();
void close();
}