Search in sources :

Example 1 with InitSessionMessage

use of com.faforever.client.remote.domain.InitSessionMessage in project downlords-faf-client by FAForever.

the class FafServerAccessorImpl method connectAndLogIn.

@Override
public CompletableFuture<LoginMessage> connectAndLogIn(String username, String password) {
    sessionFuture = new CompletableFuture<>();
    loginFuture = new CompletableFuture<>();
    this.username = username;
    this.password = password;
    // TODO extract class?
    fafConnectionTask = new Task<Void>() {

        @Override
        protected Void call() throws Exception {
            while (!isCancelled()) {
                Server server = clientProperties.getServer();
                String serverHost = server.getHost();
                int serverPort = server.getPort();
                logger.info("Trying to connect to FAF server at {}:{}", serverHost, serverPort);
                Platform.runLater(() -> connectionState.set(ConnectionState.CONNECTING));
                try (Socket fafServerSocket = new Socket(serverHost, serverPort);
                    OutputStream outputStream = fafServerSocket.getOutputStream()) {
                    FafServerAccessorImpl.this.fafServerSocket = fafServerSocket;
                    fafServerSocket.setKeepAlive(true);
                    localIp = fafServerSocket.getLocalAddress().getHostAddress();
                    serverWriter = createServerWriter(outputStream);
                    writeToServer(new InitSessionMessage(Version.VERSION));
                    logger.info("FAF server connection established");
                    Platform.runLater(() -> connectionState.set(ConnectionState.CONNECTED));
                    blockingReadServer(fafServerSocket);
                } catch (IOException e) {
                    Platform.runLater(() -> connectionState.set(ConnectionState.DISCONNECTED));
                    if (isCancelled()) {
                        logger.debug("Connection to FAF server has been closed");
                    } else {
                        logger.warn("Lost connection to FAF server, trying to reconnect in " + RECONNECT_DELAY / 1000 + "s", e);
                        Thread.sleep(RECONNECT_DELAY);
                    }
                }
            }
            return null;
        }

        @Override
        protected void cancelled() {
            IOUtils.closeQuietly(serverWriter);
            IOUtils.closeQuietly(fafServerSocket);
            logger.debug("Closed connection to FAF lobby server");
        }
    };
    executeInBackground(fafConnectionTask);
    return loginFuture;
}
Also used : IceServer(com.faforever.client.remote.domain.IceServersServerMessage.IceServer) Server(com.faforever.client.config.ClientProperties.Server) OutputStream(java.io.OutputStream) InitSessionMessage(com.faforever.client.remote.domain.InitSessionMessage) IOException(java.io.IOException) IOException(java.io.IOException) LoginFailedException(com.faforever.client.login.LoginFailedException) JsonSyntaxException(com.google.gson.JsonSyntaxException) Socket(java.net.Socket)

Example 2 with InitSessionMessage

use of com.faforever.client.remote.domain.InitSessionMessage in project downlords-faf-client by FAForever.

the class ServerAccessorImplTest method testConnectAndLogIn.

@Test
public void testConnectAndLogIn() throws Exception {
    int playerUid = 123;
    String username = "JunitUser";
    String password = "JunitPassword";
    long sessionId = 456;
    CompletableFuture<LoginMessage> loginFuture = instance.connectAndLogIn(username, password).toCompletableFuture();
    String json = messagesReceivedByFafServer.poll(TIMEOUT, TIMEOUT_UNIT);
    InitSessionMessage initSessionMessage = gson.fromJson(json, InitSessionMessage.class);
    assertThat(initSessionMessage.getCommand(), is(ClientMessageType.ASK_SESSION));
    SessionMessage sessionMessage = new SessionMessage();
    sessionMessage.setSession(sessionId);
    sendFromServer(sessionMessage);
    json = messagesReceivedByFafServer.poll(TIMEOUT, TIMEOUT_UNIT);
    LoginClientMessage loginClientMessage = gson.fromJson(json, LoginClientMessage.class);
    assertThat(loginClientMessage.getCommand(), is(ClientMessageType.LOGIN));
    assertThat(loginClientMessage.getLogin(), is(username));
    assertThat(loginClientMessage.getPassword(), is(Hashing.sha256().hashString(password, UTF_8).toString()));
    assertThat(loginClientMessage.getSession(), is(sessionId));
    assertThat(loginClientMessage.getUniqueId(), is("encrypteduidstring"));
    LoginMessage loginServerMessage = new LoginMessage();
    loginServerMessage.setId(playerUid);
    loginServerMessage.setLogin(username);
    sendFromServer(loginServerMessage);
    LoginMessage result = loginFuture.get(TIMEOUT, TIMEOUT_UNIT);
    assertThat(result.getMessageType(), is(FafServerMessageType.WELCOME));
    assertThat(result.getId(), is(playerUid));
    assertThat(result.getLogin(), is(username));
}
Also used : InitSessionMessage(com.faforever.client.remote.domain.InitSessionMessage) SessionMessage(com.faforever.client.remote.domain.SessionMessage) LoginMessage(com.faforever.client.remote.domain.LoginMessage) InitSessionMessage(com.faforever.client.remote.domain.InitSessionMessage) LoginClientMessage(com.faforever.client.remote.domain.LoginClientMessage) Test(org.junit.Test) AbstractPlainJavaFxTest(com.faforever.client.test.AbstractPlainJavaFxTest)

Aggregations

InitSessionMessage (com.faforever.client.remote.domain.InitSessionMessage)2 Server (com.faforever.client.config.ClientProperties.Server)1 LoginFailedException (com.faforever.client.login.LoginFailedException)1 IceServer (com.faforever.client.remote.domain.IceServersServerMessage.IceServer)1 LoginClientMessage (com.faforever.client.remote.domain.LoginClientMessage)1 LoginMessage (com.faforever.client.remote.domain.LoginMessage)1 SessionMessage (com.faforever.client.remote.domain.SessionMessage)1 AbstractPlainJavaFxTest (com.faforever.client.test.AbstractPlainJavaFxTest)1 JsonSyntaxException (com.google.gson.JsonSyntaxException)1 IOException (java.io.IOException)1 OutputStream (java.io.OutputStream)1 Socket (java.net.Socket)1 Test (org.junit.Test)1