diff --git a/pom.xml b/pom.xml index d036d0d..0c98aab 100644 --- a/pom.xml +++ b/pom.xml @@ -28,7 +28,7 @@ com.github.informatik-ag-ngl envoy-common - develop-SNAPSHOT + f~compatibility_verification-SNAPSHOT org.openjfx diff --git a/src/main/java/envoy/client/data/Chat.java b/src/main/java/envoy/client/data/Chat.java index 7efbd7b..022904c 100644 --- a/src/main/java/envoy/client/data/Chat.java +++ b/src/main/java/envoy/client/data/Chat.java @@ -9,7 +9,7 @@ import java.util.Objects; import envoy.client.net.WriteProxy; import envoy.data.*; import envoy.data.Message.MessageStatus; -import envoy.event.MessageStatusChangeEvent; +import envoy.event.MessageStatusChange; /** * Represents a chat between two {@link User}s
@@ -71,7 +71,7 @@ public final class Chat implements Serializable { * * @param writeProxy the write proxy instance used to notify the server about * the message status changes - * @throws IOException if a {@link MessageStatusChangeEvent} could not be + * @throws IOException if a {@link MessageStatusChange} could not be * delivered to the server * @since Envoy Client v0.3-alpha */ @@ -81,7 +81,7 @@ public final class Chat implements Serializable { if (m.getSenderID() == recipient.getID()) if (m.getStatus() == MessageStatus.READ) break; else { m.setStatus(MessageStatus.READ); - writeProxy.writeMessageStatusChangeEvent(new MessageStatusChangeEvent(m)); + writeProxy.writeMessageStatusChange(new MessageStatusChange(m)); } } } diff --git a/src/main/java/envoy/client/data/ClientConfig.java b/src/main/java/envoy/client/data/ClientConfig.java index 0b11e40..cde6b9a 100644 --- a/src/main/java/envoy/client/data/ClientConfig.java +++ b/src/main/java/envoy/client/data/ClientConfig.java @@ -4,6 +4,7 @@ import java.io.File; import java.util.function.Function; import java.util.logging.Level; +import envoy.client.ui.Startup; import envoy.data.Config; import envoy.data.ConfigItem; import envoy.data.LoginCredentials; @@ -109,5 +110,5 @@ public class ClientConfig extends Config { * the registration option * @since Envoy Client v0.3-alpha */ - public LoginCredentials getLoginCredentials() { return new LoginCredentials(getUser(), getPassword(), false); } + public LoginCredentials getLoginCredentials() { return new LoginCredentials(getUser(), getPassword(), false, Startup.VERSION); } } diff --git a/src/main/java/envoy/client/data/LocalDB.java b/src/main/java/envoy/client/data/LocalDB.java index 38aeea4..b8dc3c9 100644 --- a/src/main/java/envoy/client/data/LocalDB.java +++ b/src/main/java/envoy/client/data/LocalDB.java @@ -3,9 +3,9 @@ package envoy.client.data; import java.util.*; import envoy.data.*; -import envoy.event.GroupResizeEvent; -import envoy.event.MessageStatusChangeEvent; -import envoy.event.NameChangeEvent; +import envoy.event.GroupResize; +import envoy.event.MessageStatusChange; +import envoy.event.NameChange; /** * Stores information about the current {@link User} and their {@link Chat}s. @@ -25,7 +25,7 @@ public abstract class LocalDB { protected List chats = new ArrayList<>(); protected IDGenerator idGenerator; protected Cache messageCache = new Cache<>(); - protected Cache statusCache = new Cache<>(); + protected Cache statusCache = new Cache<>(); /** * Initializes a storage space for a user-specific list of chats. @@ -136,13 +136,13 @@ public abstract class LocalDB { * @return the offline status cache * @since Envoy Client v0.3-alpha */ - public Cache getStatusCache() { return statusCache; } + public Cache getStatusCache() { return statusCache; } /** * @param statusCache the offline status cache to set * @since Envoy Client v0.3-alpha */ - public void setStatusCache(Cache statusCache) { this.statusCache = statusCache; } + public void setStatusCache(Cache statusCache) { this.statusCache = statusCache; } /** * Searches for a message by ID. @@ -169,20 +169,20 @@ public abstract class LocalDB { /** * Performs a contact name change if the corresponding contact is present. * - * @param event the {@link NameChangeEvent} to process + * @param event the {@link NameChange} to process * @since Envoy Client v0.1-beta */ - public void replaceContactName(NameChangeEvent event) { + public void replaceContactName(NameChange event) { chats.stream().map(Chat::getRecipient).filter(c -> c.getID() == event.getID()).findAny().ifPresent(c -> c.setName(event.get())); } /** * Performs a group resize operation if the corresponding group is present. * - * @param event the {@link GroupResizeEvent} to process + * @param event the {@link GroupResize} to process * @since Envoy Client v0.1-beta */ - public void updateGroup(GroupResizeEvent event) { + public void updateGroup(GroupResize event) { chats.stream() .map(Chat::getRecipient) .filter(Group.class::isInstance) diff --git a/src/main/java/envoy/client/net/Client.java b/src/main/java/envoy/client/net/Client.java index 9f9dad7..a0ad746 100644 --- a/src/main/java/envoy/client/net/Client.java +++ b/src/main/java/envoy/client/net/Client.java @@ -15,7 +15,7 @@ import envoy.client.data.LocalDB; import envoy.client.event.SendEvent; import envoy.data.*; import envoy.event.*; -import envoy.event.contact.ContactOperationEvent; +import envoy.event.contact.ContactOperation; import envoy.event.contact.ContactSearchResult; import envoy.util.EnvoyLog; import envoy.util.SerializationUtils; @@ -56,11 +56,16 @@ public class Client implements Closeable { * will block for up to 5 seconds. If the handshake does exceed this time limit, * an exception is thrown. * - * @param credentials the login credentials of the user - * @param receivedMessageCache a message cache containing all unread messages - * from the server that can be relayed after - * initialization - * @param receivedMessageStatusChangeEventCache an event cache containing all received messageStatusChangeEvents from the server that can be relayed after initialization + * @param credentials the login credentials of the user + * @param receivedMessageCache a message cache containing all unread + * messages + * from the server that can be relayed + * after + * initialization + * @param receivedMessageStatusChangeCache an event cache containing all + * received messageStatusChangeEvents + * from the server that can be relayed + * after initialization * @throws TimeoutException if the server could not be reached * @throws IOException if the login credentials could not be * written @@ -68,7 +73,7 @@ public class Client implements Closeable { * waiting for the handshake response */ public void performHandshake(LoginCredentials credentials, Cache receivedMessageCache, - Cache receivedMessageStatusChangeEventCache) + Cache receivedMessageStatusChangeCache) throws TimeoutException, IOException, InterruptedException { if (online) throw new IllegalStateException("Handshake has already been performed successfully"); // Establish TCP connection @@ -82,8 +87,8 @@ public class Client implements Closeable { // Register user creation processor, contact list processor and message cache receiver.registerProcessor(User.class, sender -> { this.sender = sender; contacts = sender.getContacts(); }); receiver.registerProcessor(Message.class, receivedMessageCache); - receiver.registerProcessor(MessageStatusChangeEvent.class, receivedMessageStatusChangeEventCache); - receiver.registerProcessor(HandshakeRejectionEvent.class, evt -> { rejected = true; eventBus.dispatch(evt); }); + receiver.registerProcessor(MessageStatusChange.class, receivedMessageStatusChangeCache); + receiver.registerProcessor(HandshakeRejection.class, evt -> { rejected = true; eventBus.dispatch(evt); }); rejected = false; @@ -121,23 +126,29 @@ public class Client implements Closeable { * Initializes the {@link Receiver} used to process data sent from the server to * this client. * - * @param localDB the local database used to persist the current - * {@link IDGenerator} - * @param receivedMessageCache a message cache containing all unread messages - * from the server that can be relayed after - * initialization - * @param receivedMessageStatusChangeEventCache an event cache containing all received messageStatusChangeEvents from the server that can be relayed after initialization + * @param localDB the local database used to persist + * the current + * {@link IDGenerator} + * @param receivedMessageCache a message cache containing all unread + * messages + * from the server that can be relayed + * after + * initialization + * @param receivedMessageStatusChangeCache an event cache containing all + * received messageStatusChangeEvents + * from the server that can be relayed + * after initialization * @throws IOException if no {@link IDGenerator} is present and none could be * requested from the server * @since Envoy Client v0.2-alpha */ public void initReceiver(LocalDB localDB, Cache receivedMessageCache, - Cache receivedMessageStatusChangeEventCache) throws IOException { + Cache receivedMessageStatusChangeCache) throws IOException { checkOnline(); // Process incoming messages final ReceivedMessageProcessor receivedMessageProcessor = new ReceivedMessageProcessor(); - final MessageStatusChangeEventProcessor messageStatusChangeEventProcessor = new MessageStatusChangeEventProcessor(); + final MessageStatusChangeProcessor messageStatusChangeEventProcessor = new MessageStatusChangeProcessor(); receiver.registerProcessor(Message.class, receivedMessageProcessor); @@ -145,26 +156,26 @@ public class Client implements Closeable { receivedMessageCache.setProcessor(receivedMessageProcessor); // Process message status changes - receiver.registerProcessor(MessageStatusChangeEvent.class, messageStatusChangeEventProcessor); - receivedMessageStatusChangeEventCache.setProcessor(messageStatusChangeEventProcessor); + receiver.registerProcessor(MessageStatusChange.class, messageStatusChangeEventProcessor); + receivedMessageStatusChangeCache.setProcessor(messageStatusChangeEventProcessor); // Process user status changes - receiver.registerProcessor(UserStatusChangeEvent.class, eventBus::dispatch); + receiver.registerProcessor(UserStatusChange.class, eventBus::dispatch); // Process message ID generation receiver.registerProcessor(IDGenerator.class, localDB::setIDGenerator); // Process name changes - receiver.registerProcessor(NameChangeEvent.class, evt -> { localDB.replaceContactName(evt); eventBus.dispatch(evt); }); + receiver.registerProcessor(NameChange.class, evt -> { localDB.replaceContactName(evt); eventBus.dispatch(evt); }); // Process contact searches receiver.registerProcessor(ContactSearchResult.class, eventBus::dispatch); // Process contact operations - receiver.registerProcessor(ContactOperationEvent.class, eventBus::dispatch); + receiver.registerProcessor(ContactOperation.class, eventBus::dispatch); // Process group size changes - receiver.registerProcessor(GroupResizeEvent.class, evt -> { localDB.updateGroup(evt); eventBus.dispatch(evt); }); + receiver.registerProcessor(GroupResize.class, evt -> { localDB.updateGroup(evt); eventBus.dispatch(evt); }); // Send event eventBus.register(SendEvent.class, evt -> { diff --git a/src/main/java/envoy/client/net/MessageStatusChangeEventProcessor.java b/src/main/java/envoy/client/net/MessageStatusChangeProcessor.java similarity index 67% rename from src/main/java/envoy/client/net/MessageStatusChangeEventProcessor.java rename to src/main/java/envoy/client/net/MessageStatusChangeProcessor.java index ce53139..106cda4 100644 --- a/src/main/java/envoy/client/net/MessageStatusChangeEventProcessor.java +++ b/src/main/java/envoy/client/net/MessageStatusChangeProcessor.java @@ -5,30 +5,30 @@ import java.util.logging.Logger; import envoy.data.Message.MessageStatus; import envoy.event.EventBus; -import envoy.event.MessageStatusChangeEvent; +import envoy.event.MessageStatusChange; import envoy.util.EnvoyLog; /** * Project: envoy-client
- * File: MessageStatusChangeEventProcessor.java
+ * File: MessageStatusChangeProcessor.java
* Created: 4 Feb 2020
* * @author Kai S. K. Engelbart * @since Envoy Client v0.3-alpha */ -public class MessageStatusChangeEventProcessor implements Consumer { +public class MessageStatusChangeProcessor implements Consumer { - private static final Logger logger = EnvoyLog.getLogger(MessageStatusChangeEventProcessor.class); + private static final Logger logger = EnvoyLog.getLogger(MessageStatusChangeProcessor.class); /** - * Dispatches a {@link MessageStatusChangeEvent} if the status is + * Dispatches a {@link MessageStatusChange} if the status is * {@code RECEIVED} or {@code READ}. * * @param evt the status change event * @since Envoy Client v0.3-alpha */ @Override - public void accept(MessageStatusChangeEvent evt) { + public void accept(MessageStatusChange evt) { if (evt.get().ordinal() < MessageStatus.RECEIVED.ordinal()) logger.warning("Received invalid message status change " + evt); else EventBus.getInstance().dispatch(evt); } diff --git a/src/main/java/envoy/client/net/WriteProxy.java b/src/main/java/envoy/client/net/WriteProxy.java index 97848df..372180b 100644 --- a/src/main/java/envoy/client/net/WriteProxy.java +++ b/src/main/java/envoy/client/net/WriteProxy.java @@ -6,12 +6,12 @@ import java.util.logging.Logger; import envoy.client.data.LocalDB; import envoy.data.Message; -import envoy.event.MessageStatusChangeEvent; +import envoy.event.MessageStatusChange; import envoy.util.EnvoyLog; /** * Implements methods to send {@link Message}s and - * {@link MessageStatusChangeEvent}s to the server or cache them inside a + * {@link MessageStatusChange}s to the server or cache them inside a * {@link LocalDB} depending on the online status.
*
* Project: envoy-client
@@ -65,7 +65,7 @@ public class WriteProxy { } /** - * Sends cached {@link Message}s and {@link MessageStatusChangeEvent}s to the + * Sends cached {@link Message}s and {@link MessageStatusChange}s to the * server. * * @since Envoy Client v0.3-alpha @@ -99,7 +99,7 @@ public class WriteProxy { * @throws IOException if the event could not be sent * @since Envoy Client v0.3-alpha */ - public void writeMessageStatusChangeEvent(MessageStatusChangeEvent evt) throws IOException { + public void writeMessageStatusChange(MessageStatusChange evt) throws IOException { if (client.isOnline()) client.sendEvent(evt); else localDB.getStatusCache().accept(evt); } diff --git a/src/main/java/envoy/client/ui/MessageListCell.java b/src/main/java/envoy/client/ui/MessageListCell.java index 7b7a479..16759ea 100644 --- a/src/main/java/envoy/client/ui/MessageListCell.java +++ b/src/main/java/envoy/client/ui/MessageListCell.java @@ -1,7 +1,7 @@ package envoy.client.ui; import java.io.IOException; -import java.text.SimpleDateFormat; +import java.time.format.DateTimeFormatter; import java.util.Map; import javafx.scene.control.Label; @@ -26,7 +26,7 @@ import envoy.data.Message.MessageStatus; */ public class MessageListCell extends ListCell { - private static final SimpleDateFormat dateFormat = new SimpleDateFormat("dd.MM.yyyy HH:mm"); + private static final DateTimeFormatter dateFormat = DateTimeFormatter.ofPattern("dd.MM.yyyy HH:mm"); private static Map statusImages; static { diff --git a/src/main/java/envoy/client/ui/Startup.java b/src/main/java/envoy/client/ui/Startup.java index dbadfc3..30ee7b2 100644 --- a/src/main/java/envoy/client/ui/Startup.java +++ b/src/main/java/envoy/client/ui/Startup.java @@ -16,7 +16,7 @@ import envoy.client.net.Client; import envoy.client.ui.SceneContext.SceneInfo; import envoy.client.ui.controller.LoginScene; import envoy.data.Message; -import envoy.event.MessageStatusChangeEvent; +import envoy.event.MessageStatusChange; import envoy.exception.EnvoyException; import envoy.util.EnvoyLog; @@ -33,10 +33,17 @@ import envoy.util.EnvoyLog; */ public final class Startup extends Application { - private LocalDB localDB; - private Client client; - private Cache messageCache; - private Cache messageStatusCache; + /** + * The version of this client. Used to verify compatibility with the server. + * + * @since Envoy Client v0.1-beta + */ + public static final String VERSION = "0.1-beta"; + + private LocalDB localDB; + private Client client; + private Cache messageCache; + private Cache messageStatusCache; private static final ClientConfig config = ClientConfig.getInstance(); private static final Logger logger = EnvoyLog.getLogger(Startup.class); @@ -89,8 +96,8 @@ public final class Startup extends Application { } // Initialize client and unread message cache - client = new Client(); - messageCache = new Cache<>(); + client = new Client(); + messageCache = new Cache<>(); messageStatusCache = new Cache<>(); stage.setTitle("Envoy"); diff --git a/src/main/java/envoy/client/ui/controller/ChatScene.java b/src/main/java/envoy/client/ui/controller/ChatScene.java index c25b2f8..727bdc1 100644 --- a/src/main/java/envoy/client/ui/controller/ChatScene.java +++ b/src/main/java/envoy/client/ui/controller/ChatScene.java @@ -25,9 +25,9 @@ import envoy.client.ui.MessageListCell; import envoy.client.ui.SceneContext; import envoy.data.*; import envoy.event.EventBus; -import envoy.event.MessageStatusChangeEvent; -import envoy.event.UserStatusChangeEvent; -import envoy.event.contact.ContactOperationEvent; +import envoy.event.MessageStatusChange; +import envoy.event.UserStatusChange; +import envoy.event.contact.ContactOperation; import envoy.util.EnvoyLog; /** @@ -103,8 +103,7 @@ public final class ChatScene { }); // Listen to message status changes - eventBus.register(MessageStatusChangeEvent.class, e -> - localDB.getMessage(e.getID()).ifPresent(message -> { + eventBus.register(MessageStatusChange.class, e -> localDB.getMessage(e.getID()).ifPresent(message -> { message.setStatus(e.get()); // Update UI if in current chat @@ -112,19 +111,15 @@ public final class ChatScene { })); // Listen to user status changes - eventBus.register(UserStatusChangeEvent.class, e -> - userList.getItems() - .stream() - .filter(c -> c.getID() == e.getID()) - .findAny() - .ifPresent(u -> { - ((User) u).setStatus(e.get()); - Platform.runLater(userList::refresh); - }) - ); + eventBus.register(UserStatusChange.class, + e -> userList.getItems() + .stream() + .filter(c -> c.getID() == e.getID()) + .findAny() + .ifPresent(u -> { ((User) u).setStatus(e.get()); Platform.runLater(userList::refresh); })); // Listen to contacts changes - eventBus.register(ContactOperationEvent.class, e -> { + eventBus.register(ContactOperation.class, e -> { final var contact = e.get(); switch (e.getOperationType()) { case ADD: @@ -174,8 +169,7 @@ public final class ChatScene { // LEON: JFC <===> JAVA FRIED CHICKEN <=/=> Java Foundation Classes // Load the chat or create a new one and add it to the LocalDB - currentChat = localDB - .getChat(user.getID()) + currentChat = localDB.getChat(user.getID()) .orElseGet(() -> { final var chat = new Chat(user); localDB.getChats().add(chat); return chat; }); messageList.setItems(FXCollections.observableList(currentChat.getMessages())); diff --git a/src/main/java/envoy/client/ui/controller/ContactSearchScene.java b/src/main/java/envoy/client/ui/controller/ContactSearchScene.java index f2976c9..a5d4457 100644 --- a/src/main/java/envoy/client/ui/controller/ContactSearchScene.java +++ b/src/main/java/envoy/client/ui/controller/ContactSearchScene.java @@ -15,7 +15,7 @@ import envoy.client.ui.SceneContext; import envoy.data.Contact; import envoy.event.ElementOperation; import envoy.event.EventBus; -import envoy.event.contact.ContactOperationEvent; +import envoy.event.contact.ContactOperation; import envoy.event.contact.ContactSearchRequest; import envoy.event.contact.ContactSearchResult; import envoy.util.EnvoyLog; @@ -57,6 +57,7 @@ public class ContactSearchScene { /** * @param sceneContext enables the user to return to the chat scene + * @param localDB the local database to which new contacts are added * @since Envoy Client v0.1-beta */ public void initializeData(SceneContext sceneContext, LocalDB localDB) { @@ -108,7 +109,7 @@ public class ContactSearchScene { } /** - * Sends an {@link ContactOperationEvent} for every selected contact to the + * Sends an {@link ContactOperation} for every selected contact to the * server. * * @since Envoy Client v0.1-beta @@ -121,7 +122,7 @@ public class ContactSearchScene { alert.setTitle("Add Contact to Contact List"); alert.setHeaderText("Add the user " + contact.getName() + " to your contact list?"); alert.showAndWait().filter(btn -> btn == ButtonType.OK).ifPresent(btn -> { - final var event = new ContactOperationEvent(contact, ElementOperation.ADD); + final var event = new ContactOperation(contact, ElementOperation.ADD); // Sends the event to the server eventBus.dispatch(new SendEvent(event)); // Updates the UI diff --git a/src/main/java/envoy/client/ui/controller/GroupCreationScene.java b/src/main/java/envoy/client/ui/controller/GroupCreationScene.java index af91d91..ea4a58e 100644 --- a/src/main/java/envoy/client/ui/controller/GroupCreationScene.java +++ b/src/main/java/envoy/client/ui/controller/GroupCreationScene.java @@ -13,7 +13,7 @@ import envoy.client.ui.SceneContext; import envoy.data.Contact; import envoy.data.User; import envoy.event.EventBus; -import envoy.event.GroupCreationEvent; +import envoy.event.GroupCreation; /** * Project: envoy-client
@@ -39,7 +39,7 @@ public class GroupCreationScene { private SceneContext sceneContext; - private static EventBus eventBus = EventBus.getInstance(); + private static EventBus eventBus = EventBus.getInstance(); @FXML private void initialize() { @@ -49,10 +49,12 @@ public class GroupCreationScene { /** * @param sceneContext enables the user to return to the chat scene + * @param localDB the local database from which potential group members can + * be selected * @since Envoy Client v0.1-beta */ public void initializeData(SceneContext sceneContext, LocalDB localDB) { - this.sceneContext = sceneContext; + this.sceneContext = sceneContext; Platform.runLater(() -> contactList.getItems() .addAll(localDB.getUsers() .values() @@ -62,13 +64,13 @@ public class GroupCreationScene { } /** - * Sends a {@link GroupCreationEvent} to the server. + * Sends a {@link GroupCreation} to the server. * * @since Envoy Client v0.1-beta */ @FXML private void sendGroupObject() { - eventBus.dispatch(new SendEvent(new GroupCreationEvent(groupNameBar.getText(), + eventBus.dispatch(new SendEvent(new GroupCreation(groupNameBar.getText(), contactList.getSelectionModel().getSelectedItems().stream().map(Contact::getID).collect(Collectors.toSet())))); } diff --git a/src/main/java/envoy/client/ui/controller/LoginScene.java b/src/main/java/envoy/client/ui/controller/LoginScene.java index f015b6e..c772874 100644 --- a/src/main/java/envoy/client/ui/controller/LoginScene.java +++ b/src/main/java/envoy/client/ui/controller/LoginScene.java @@ -15,13 +15,14 @@ import envoy.client.data.ClientConfig; import envoy.client.data.LocalDB; import envoy.client.net.Client; import envoy.client.ui.SceneContext; +import envoy.client.ui.Startup; import envoy.data.LoginCredentials; import envoy.data.Message; import envoy.data.User; import envoy.data.User.UserStatus; import envoy.event.EventBus; -import envoy.event.HandshakeRejectionEvent; -import envoy.event.MessageStatusChangeEvent; +import envoy.event.HandshakeRejection; +import envoy.event.MessageStatusChange; import envoy.exception.EnvoyException; import envoy.util.EnvoyLog; @@ -54,11 +55,11 @@ public final class LoginScene { @FXML private Label connectionLabel; - private Client client; - private LocalDB localDB; - private Cache receivedMessageCache; - private Cache receivedMessageStatusChangeEventCache; - private SceneContext sceneContext; + private Client client; + private LocalDB localDB; + private Cache receivedMessageCache; + private Cache receivedMessageStatusChangeCache; + private SceneContext sceneContext; private static final Logger logger = EnvoyLog.getLogger(LoginScene.class); private static final EventBus eventBus = EventBus.getInstance(); @@ -69,29 +70,36 @@ public final class LoginScene { connectionLabel.setText("Server: " + config.getServer() + ":" + config.getPort()); // Show an alert after an unsuccessful handshake - eventBus.register(HandshakeRejectionEvent.class, + eventBus.register( + HandshakeRejection.class, e -> Platform.runLater(() -> { clearPasswordFields(); new Alert(AlertType.ERROR, e.get()).showAndWait(); })); } /** * Loads the login dialog using the FXML file {@code LoginDialog.fxml}. * - * @param client the client used to perform the handshake - * @param localDB the local database used for offline login - * @param receivedMessageCache the cache storing messages received during - * the handshake - * @param receivedMessageStatusChangeEventCache the cache storing messageStatusChangeEvents received during handshake - * @param sceneContext the scene context used to initialize the chat - * scene + * @param client the client used to perform the + * handshake + * @param localDB the local database used for offline + * login + * @param receivedMessageCache the cache storing messages received + * during + * the handshake + * @param receivedMessageStatusChangeCache the cache storing + * messageStatusChangeEvents received + * during handshake + * @param sceneContext the scene context used to initialize + * the chat + * scene * @since Envoy Client v0.1-beta */ public void initializeData(Client client, LocalDB localDB, Cache receivedMessageCache, - Cache receivedMessageStatusChangeEventCache, SceneContext sceneContext) { - this.client = client; - this.localDB = localDB; - this.receivedMessageCache = receivedMessageCache; - this.receivedMessageStatusChangeEventCache = receivedMessageStatusChangeEventCache; - this.sceneContext = sceneContext; + Cache receivedMessageStatusChangeCache, SceneContext sceneContext) { + this.client = client; + this.localDB = localDB; + this.receivedMessageCache = receivedMessageCache; + this.receivedMessageStatusChangeCache = receivedMessageStatusChangeCache; + this.sceneContext = sceneContext; // Prepare handshake localDB.loadIDGenerator(); @@ -110,12 +118,13 @@ public final class LoginScene { if (registerCheckBox.isSelected() && !passwordField.getText().equals(repeatPasswordField.getText())) { clearPasswordFields(); new Alert(AlertType.ERROR, "The entered password is unequal to the repeated one").showAndWait(); - } else performHandshake(new LoginCredentials(userTextField.getText(), passwordField.getText().toCharArray(), registerCheckBox.isSelected())); + } else performHandshake( + new LoginCredentials(userTextField.getText(), passwordField.getText().toCharArray(), registerCheckBox.isSelected(), Startup.VERSION)); } @FXML private void offlineModeButtonPressed() { - attemptOfflineMode(new LoginCredentials(userTextField.getText(), passwordField.getText().toCharArray(), false)); + attemptOfflineMode(new LoginCredentials(userTextField.getText(), passwordField.getText().toCharArray(), false, Startup.VERSION)); } @FXML @@ -135,9 +144,9 @@ public final class LoginScene { private void performHandshake(LoginCredentials credentials) { try { - client.performHandshake(credentials, receivedMessageCache, receivedMessageStatusChangeEventCache); + client.performHandshake(credentials, receivedMessageCache, receivedMessageStatusChangeCache); if (client.isOnline()) { - client.initReceiver(localDB, receivedMessageCache, receivedMessageStatusChangeEventCache); + client.initReceiver(localDB, receivedMessageCache, receivedMessageStatusChangeCache); loadChatScene(); } } catch (IOException | InterruptedException | TimeoutException e) { @@ -200,7 +209,7 @@ public final class LoginScene { // Relay unread messages from cache if (receivedMessageCache != null && client.isOnline()) receivedMessageCache.relay(); - if (receivedMessageStatusChangeEventCache != null && client.isOnline()) receivedMessageStatusChangeEventCache.relay(); + if (receivedMessageStatusChangeCache != null && client.isOnline()) receivedMessageStatusChangeCache.relay(); } private void clearPasswordFields() {