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;
}
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));
}
Aggregations