package com.faforever.client.remote; import com.faforever.client.api.Ranked1v1Stats; import com.faforever.client.api.RatingType; import com.faforever.client.chat.PlayerInfoBean; import com.faforever.client.chat.avatar.AvatarBean; import com.faforever.client.config.CacheNames; import com.faforever.client.domain.RatingHistoryDataPoint; import com.faforever.client.game.Faction; import com.faforever.client.game.NewGameInfo; import com.faforever.client.leaderboard.Ranked1v1EntryBean; import com.faforever.client.map.MapBean; import com.faforever.client.mod.ModInfoBean; import com.faforever.client.net.ConnectionState; import com.faforever.client.relay.GpgClientMessage; 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.springframework.cache.annotation.Cacheable; import java.util.List; import java.util.concurrent.CompletableFuture; import java.util.concurrent.CompletionStage; import java.util.function.Consumer; public interface FafService { @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); CompletionStage<GameLaunchMessage> requestHostGame(NewGameInfo newGameInfo); ReadOnlyObjectProperty<ConnectionState> connectionStateProperty(); CompletionStage<GameLaunchMessage> requestJoinGame(int gameId, String password); CompletionStage<GameLaunchMessage> startSearchRanked1v1(Faction faction, int port); void stopSearchingRanked(); void initConnectivityTest(int port); void sendGpgMessage(GpgClientMessage message); CompletionStage<LoginMessage> connectAndLogIn(String username, String password); void disconnect(); void addFriend(PlayerInfoBean friendId); void addFoe(PlayerInfoBean foeId); void removeFriend(PlayerInfoBean friendId); void removeFoe(PlayerInfoBean foeId); Long getSessionId(); CompletionStage<List<Ranked1v1EntryBean>> getRanked1v1Entries(); CompletionStage<Ranked1v1Stats> getRanked1v1Stats(); CompletionStage<Ranked1v1EntryBean> getRanked1v1EntryForPlayer(int playerId); void notifyGameEnded(); List<MapBean> getMaps(); MapBean findMapByName(String mapName); List<ModInfoBean> getMods(); void reconnect(); CompletionStage<List<MapBean>> getMostDownloadedMaps(int count); CompletionStage<List<MapBean>> getMostPlayedMaps(int count); CompletionStage<List<MapBean>> getMostLikedMaps(int count); CompletionStage<List<MapBean>> getNewestMaps(int count); CompletionStage<List<AvatarBean>> getAvailableAvatars(); void selectAvatar(AvatarBean avatar); void evictModsCache(); @Cacheable(CacheNames.RATING_HISTORY) CompletableFuture<List<RatingHistoryDataPoint>> getRatingHistory(RatingType ratingType, int playerId); }