package com.faforever.client.remote; import com.faforever.client.game.Faction; import com.faforever.client.game.NewGameInfo; import com.faforever.client.net.ConnectionState; import com.faforever.client.relay.GpgClientMessage; import com.faforever.client.remote.domain.Avatar; import com.faforever.client.remote.domain.GameLaunchMessage; import com.faforever.client.remote.domain.LoginMessage; import com.faforever.client.remote.domain.ServerMessage; import javafx.beans.property.ReadOnlyObjectProperty; import org.jetbrains.annotations.Nullable; import java.net.InetSocketAddress; import java.net.URL; import java.util.List; import java.util.concurrent.CompletionStage; import java.util.function.Consumer; /** * Entry class for all communication with the FAF server. */ public interface FafServerAccessor { @SuppressWarnings("unchecked") <T extends ServerMessage> void addOnMessageListener(Class<T> type, Consumer<T> listener); @SuppressWarnings("unchecked") <T extends ServerMessage> void removeOnMessageListener(Class<T> type, Consumer<T> listener); ReadOnlyObjectProperty<ConnectionState> connectionStateProperty(); CompletionStage<LoginMessage> connectAndLogIn(String username, String password); CompletionStage<GameLaunchMessage> requestHostGame(NewGameInfo newGameInfo, @Nullable InetSocketAddress relayAddress, int externalPort); CompletionStage<GameLaunchMessage> requestJoinGame(int gameId, String password, @Nullable InetSocketAddress relayAddress, int externalPort); void disconnect(); void reconnect(); void addFriend(int playerId); void addFoe(int playerId); CompletionStage<GameLaunchMessage> startSearchRanked1v1(Faction faction, int gamePort, @Nullable InetSocketAddress relayAddress); void stopSearchingRanked(); @Nullable Long getSessionId(); void sendGpgMessage(GpgClientMessage message); void initConnectivityTest(int port); void removeFriend(int playerId); void removeFoe(int playerId); void selectAvatar(URL url); List<Avatar> getAvailableAvatars(); }