restored compatibility with envoy common (and envoy server standalone)
This commit is contained in:
parent
9460b224b9
commit
ba67af613d
2
pom.xml
2
pom.xml
@ -28,7 +28,7 @@
|
||||
<dependency>
|
||||
<groupId>com.github.informatik-ag-ngl</groupId>
|
||||
<artifactId>envoy-common</artifactId>
|
||||
<version>develop-SNAPSHOT</version>
|
||||
<version>f~groups-SNAPSHOT</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.openjfx</groupId>
|
||||
|
@ -3,7 +3,9 @@ package envoy.client.data;
|
||||
import java.util.*;
|
||||
|
||||
import envoy.data.*;
|
||||
import envoy.event.*;
|
||||
import envoy.event.GroupResizeEvent;
|
||||
import envoy.event.MessageStatusChangeEvent;
|
||||
import envoy.event.NameChangeEvent;
|
||||
|
||||
/**
|
||||
* Stores information about the current {@link User} and their {@link Chat}s.
|
||||
@ -19,7 +21,7 @@ import envoy.event.*;
|
||||
public abstract class LocalDB {
|
||||
|
||||
protected User user;
|
||||
protected Map<String, User> users = new HashMap<>();
|
||||
protected Map<String, Contact> users = new HashMap<>();
|
||||
protected List<Chat> chats = new ArrayList<>();
|
||||
protected IDGenerator idGenerator;
|
||||
protected Cache<Message> messageCache = new Cache<>();
|
||||
@ -69,12 +71,12 @@ public abstract class LocalDB {
|
||||
* user names as keys
|
||||
* @since Envoy Client v0.2-alpha
|
||||
*/
|
||||
public Map<String, User> getUsers() { return users; }
|
||||
public Map<String, Contact> getUsers() { return users; }
|
||||
|
||||
/**
|
||||
* @param users the users to set
|
||||
*/
|
||||
public void setUsers(Map<String, User> users) { this.users = users; }
|
||||
public void setUsers(Map<String, Contact> users) { this.users = users; }
|
||||
|
||||
/**
|
||||
* @return all saved {@link Chat} objects that list the client user as the
|
||||
@ -161,7 +163,7 @@ public abstract class LocalDB {
|
||||
* @since Envoy Client v0.1-beta
|
||||
*/
|
||||
public void replaceContactName(NameChangeEvent event) {
|
||||
chats.stream().map(Chat::getRecipient).filter(c -> c.getID() == event.getId()).findAny().ifPresent(c -> c.setName(event.get()));
|
||||
chats.stream().map(Chat::getRecipient).filter(c -> c.getID() == event.getID()).findAny().ifPresent(c -> c.setName(event.get()));
|
||||
}
|
||||
|
||||
/**
|
||||
@ -180,10 +182,10 @@ public abstract class LocalDB {
|
||||
.ifPresent(group -> {
|
||||
switch (event.getOperation()) {
|
||||
case ADD:
|
||||
group.getMemberIDs().add(event.get());
|
||||
group.getContacts().add(event.get());
|
||||
break;
|
||||
case REMOVE:
|
||||
group.getMemberIDs().remove(event.get());
|
||||
group.getContacts().remove(event.get());
|
||||
break;
|
||||
}
|
||||
});
|
||||
|
@ -5,6 +5,7 @@ import java.io.IOException;
|
||||
import java.net.Socket;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
import javax.naming.TimeLimitExceededException;
|
||||
@ -15,7 +16,8 @@ import envoy.client.data.LocalDB;
|
||||
import envoy.client.event.SendEvent;
|
||||
import envoy.data.*;
|
||||
import envoy.event.*;
|
||||
import envoy.event.ContactOperationEvent.Operation;
|
||||
import envoy.event.contact.ContactOperationEvent;
|
||||
import envoy.event.contact.ContactSearchResult;
|
||||
import envoy.util.EnvoyLog;
|
||||
import envoy.util.SerializationUtils;
|
||||
|
||||
@ -40,9 +42,9 @@ public class Client implements Closeable {
|
||||
private boolean online;
|
||||
|
||||
// Asynchronously initialized during handshake
|
||||
private volatile User sender;
|
||||
private volatile Contacts contacts;
|
||||
private volatile boolean rejected;
|
||||
private volatile User sender;
|
||||
private volatile Set<? extends Contact> contacts;
|
||||
private volatile boolean rejected;
|
||||
|
||||
// Configuration and logging
|
||||
private static final ClientConfig config = ClientConfig.getInstance();
|
||||
@ -67,7 +69,6 @@ public class Client implements Closeable {
|
||||
public void performHandshake(LoginCredentials credentials, Cache<Message> receivedMessageCache)
|
||||
throws TimeLimitExceededException, IOException, InterruptedException {
|
||||
if (online) throw new IllegalStateException("Handshake has already been performed successfully");
|
||||
|
||||
// Establish TCP connection
|
||||
logger.info(String.format("Attempting connection to server %s:%d...", config.getServer(), config.getPort()));
|
||||
socket = new Socket(config.getServer(), config.getPort());
|
||||
@ -77,8 +78,7 @@ public class Client implements Closeable {
|
||||
receiver = new Receiver(socket.getInputStream());
|
||||
|
||||
// Register user creation processor, contact list processor and message cache
|
||||
receiver.registerProcessor(User.class, sender -> this.sender = sender);
|
||||
receiver.registerProcessor(Contacts.class, contacts -> this.contacts = contacts);
|
||||
receiver.registerProcessor(User.class, sender -> { this.sender = sender; contacts = sender.getContacts(); });
|
||||
receiver.registerProcessor(Message.class, receivedMessageCache);
|
||||
receiver.registerProcessor(HandshakeRejectionEvent.class, evt -> { rejected = true; EventBus.getInstance().dispatch(evt); });
|
||||
|
||||
@ -92,7 +92,7 @@ public class Client implements Closeable {
|
||||
|
||||
// Wait for a maximum of five seconds to acquire the sender object
|
||||
long start = System.currentTimeMillis();
|
||||
while (sender == null || contacts == null) {
|
||||
while (sender == null) {
|
||||
|
||||
// Quit immediately after handshake rejection
|
||||
// This method can then be called again
|
||||
@ -151,8 +151,9 @@ public class Client implements Closeable {
|
||||
// Process contact searches
|
||||
receiver.registerProcessor(ContactSearchResult.class, EventBus.getInstance()::dispatch);
|
||||
|
||||
receiver.registerProcessor(Contacts.class,
|
||||
contacts -> EventBus.getInstance().dispatch(new ContactOperationEvent(contacts.getContacts().get(0), Operation.ADD)));
|
||||
receiver.registerProcessor(Contact.class,
|
||||
contacts -> EventBus.getInstance()
|
||||
.dispatch(new ContactOperationEvent(contacts.getContacts().iterator().next(), ElementOperation.ADD)));
|
||||
|
||||
// Process group size changes
|
||||
receiver.registerProcessor(GroupResizeEvent.class, evt -> { localDB.updateGroup(evt); EventBus.getInstance().dispatch(evt); });
|
||||
@ -218,10 +219,10 @@ public class Client implements Closeable {
|
||||
* user names as keys
|
||||
* @since Envoy Client v0.2-alpha
|
||||
*/
|
||||
public Map<String, User> getUsers() {
|
||||
public Map<String, Contact> getUsers() {
|
||||
checkOnline();
|
||||
Map<String, User> users = new HashMap<>();
|
||||
contacts.getContacts().forEach(u -> users.put(u.getName(), u));
|
||||
Map<String, Contact> users = new HashMap<>();
|
||||
contacts.forEach(u -> users.put(u.getName(), u));
|
||||
return users;
|
||||
}
|
||||
|
||||
@ -245,10 +246,10 @@ public class Client implements Closeable {
|
||||
/**
|
||||
* Sets the client user which is used to send messages.
|
||||
*
|
||||
* @param sender the client user to set
|
||||
* @param clientUser the client user to set
|
||||
* @since Envoy Client v0.2-alpha
|
||||
*/
|
||||
public void setSender(User sender) { this.sender = sender; }
|
||||
public void setSender(User clientUser) { this.sender = clientUser; }
|
||||
|
||||
/**
|
||||
* @return the {@link Receiver} used by this {@link Client}
|
||||
@ -265,11 +266,11 @@ public class Client implements Closeable {
|
||||
* @return the contacts of this {@link Client}
|
||||
* @since Envoy Client v0.3-alpha
|
||||
*/
|
||||
public Contacts getContacts() { return contacts; }
|
||||
public Set<? extends Contact> getContacts() { return contacts; }
|
||||
|
||||
/**
|
||||
* @param contacts the contacts to set
|
||||
* @since Envoy Client v0.3-alpha
|
||||
*/
|
||||
public void setContacts(Contacts contacts) { this.contacts = contacts; }
|
||||
public void setContacts(Set<? extends Contact> contacts) { this.contacts = contacts; }
|
||||
}
|
||||
|
@ -3,6 +3,7 @@ package envoy.client.net;
|
||||
import java.util.function.Consumer;
|
||||
|
||||
import envoy.client.data.LocalDB;
|
||||
import envoy.data.User;
|
||||
import envoy.event.EventBus;
|
||||
import envoy.event.UserStatusChangeEvent;
|
||||
|
||||
@ -26,7 +27,7 @@ public class UserStatusChangeProcessor implements Consumer<UserStatusChangeEvent
|
||||
|
||||
@Override
|
||||
public void accept(UserStatusChangeEvent evt) {
|
||||
localDB.getUsers().values().stream().filter(u -> u.getID() == evt.getID()).findFirst().get().setStatus(evt.get());
|
||||
localDB.getUsers().values().stream().filter(u -> u.getID() == evt.getID()).map(User.class::cast).findFirst().get().setStatus(evt.get());
|
||||
EventBus.getInstance().dispatch(evt);
|
||||
}
|
||||
}
|
||||
|
@ -3,15 +3,16 @@ package envoy.client.ui;
|
||||
import java.io.IOException;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import envoy.client.data.Chat;
|
||||
import envoy.client.data.LocalDB;
|
||||
import envoy.client.event.MessageCreationEvent;
|
||||
import envoy.client.net.Client;
|
||||
import envoy.client.net.WriteProxy;
|
||||
import envoy.data.Contact;
|
||||
import envoy.data.Message;
|
||||
import envoy.data.MessageBuilder;
|
||||
import envoy.data.User;
|
||||
import envoy.event.EventBus;
|
||||
import envoy.event.MessageStatusChangeEvent;
|
||||
import envoy.event.UserStatusChangeEvent;
|
||||
@ -26,7 +27,7 @@ import javafx.scene.input.KeyEvent;
|
||||
* Project: <strong>envoy-client</strong><br>
|
||||
* File: <strong>ChatSceneController.java</strong><br>
|
||||
* Created: <strong>26.03.2020</strong><br>
|
||||
*
|
||||
*
|
||||
* @author Kai S. K. Engelbart
|
||||
* @since Envoy Client v0.1-beta
|
||||
*/
|
||||
@ -39,7 +40,7 @@ public final class ChatSceneController {
|
||||
private ListView<Message> messageList;
|
||||
|
||||
@FXML
|
||||
private ListView<User> userList;
|
||||
private ListView<Contact> userList;
|
||||
|
||||
@FXML
|
||||
private Button postButton;
|
||||
@ -95,13 +96,13 @@ public final class ChatSceneController {
|
||||
this.writeProxy = writeProxy;
|
||||
|
||||
// TODO: handle offline mode
|
||||
userList.setItems(FXCollections.observableList(client.getContacts().getContacts()));
|
||||
// userList.getItems().addAll(localDB.getChats().stream().map(Chat::getRecipient).collect(Collectors.toList()));
|
||||
// userList.setItems(FXCollections.observableList(client.getContacts()));
|
||||
userList.setItems(FXCollections.observableList(localDB.getUser().getContacts().stream().collect(Collectors.toList())));
|
||||
}
|
||||
|
||||
@FXML
|
||||
private void userListClicked() {
|
||||
final User user = userList.getSelectionModel().getSelectedItem();
|
||||
final Contact user = userList.getSelectionModel().getSelectedItem();
|
||||
if (user != null && (currentChat == null || user.getID() != currentChat.getRecipient().getID())) {
|
||||
contactLabel.setText(user.getName());
|
||||
|
||||
|
@ -14,6 +14,7 @@ import envoy.client.net.Client;
|
||||
import envoy.client.net.WriteProxy;
|
||||
import envoy.client.ui.container.LoginDialog;
|
||||
import envoy.data.Message;
|
||||
import envoy.data.User;
|
||||
import envoy.data.User.UserStatus;
|
||||
import envoy.exception.EnvoyException;
|
||||
import envoy.util.EnvoyLog;
|
||||
@ -28,7 +29,7 @@ import javafx.stage.Stage;
|
||||
* Project: <strong>envoy-client</strong><br>
|
||||
* File: <strong>Startup.java</strong><br>
|
||||
* Created: <strong>26.03.2020</strong><br>
|
||||
*
|
||||
*
|
||||
* @author Kai S. K. Engelbart
|
||||
* @since Envoy Client v0.1-beta
|
||||
*/
|
||||
@ -121,7 +122,12 @@ public final class Startup extends Application {
|
||||
writeProxy.flushCache();
|
||||
} else
|
||||
// Set all contacts to offline mode
|
||||
localDB.getUsers().values().stream().filter(u -> u != localDB.getUser()).forEach(u -> u.setStatus(UserStatus.OFFLINE));
|
||||
localDB.getUsers()
|
||||
.values()
|
||||
.stream()
|
||||
.filter(u -> u instanceof User && u != localDB.getUser())
|
||||
.map(User.class::cast)
|
||||
.forEach(u -> u.setStatus(UserStatus.OFFLINE));
|
||||
}
|
||||
|
||||
/**
|
||||
@ -164,5 +170,6 @@ public final class Startup extends Application {
|
||||
}
|
||||
}
|
||||
|
||||
@SuppressWarnings("javadoc")
|
||||
public static void main(String[] args) { launch(args); }
|
||||
}
|
||||
|
@ -1,5 +1,6 @@
|
||||
package envoy.client.ui;
|
||||
|
||||
import envoy.data.Contact;
|
||||
import envoy.data.User;
|
||||
import javafx.scene.control.Label;
|
||||
import javafx.scene.control.ListCell;
|
||||
@ -9,22 +10,24 @@ import javafx.scene.layout.VBox;
|
||||
* Project: <strong>envoy-client</strong><br>
|
||||
* File: <strong>UserListCell.java</strong><br>
|
||||
* Created: <strong>28.03.2020</strong><br>
|
||||
*
|
||||
*
|
||||
* @author Kai S. K. Engelbart
|
||||
* @since Envoy Client v0.1-beta
|
||||
*/
|
||||
public class UserListCell extends ListCell<User> {
|
||||
public class UserListCell extends ListCell<Contact> {
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
@Override
|
||||
protected void updateItem(User user, boolean empty) {
|
||||
super.updateItem(user, empty);
|
||||
if (!empty && user != null) {
|
||||
final Label name = new Label(user.getName());
|
||||
final Label status = new Label(user.getStatus().toString());
|
||||
setGraphic(new VBox(name, status));
|
||||
protected void updateItem(Contact contact, boolean empty) {
|
||||
super.updateItem(contact, empty);
|
||||
if (!empty && contact != null) {
|
||||
final Label name = new Label(contact.getName());
|
||||
if (contact instanceof User) {
|
||||
final Label status = new Label(((User) contact).getStatus().toString());
|
||||
setGraphic(new VBox(name, status));
|
||||
} else setGraphic(new VBox(name));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -65,7 +65,7 @@ public class LoginDialog extends JDialog {
|
||||
|
||||
private static final ClientConfig config = ClientConfig.getInstance();
|
||||
private static final Logger logger = EnvoyLog.getLogger(LoginDialog.class);
|
||||
private static final long serialVersionUID = 0L;
|
||||
private static final long serialVersionUID = 0L;
|
||||
|
||||
/**
|
||||
* Displays a dialog enabling the user to enter their user name and password.
|
||||
@ -143,7 +143,7 @@ public class LoginDialog extends JDialog {
|
||||
try {
|
||||
// Try entering offline mode
|
||||
localDB.loadUsers();
|
||||
User clientUser = localDB.getUsers().get(credentials.getIdentifier());
|
||||
User clientUser = (User) localDB.getUsers().get(credentials.getIdentifier());
|
||||
if (clientUser == null) throw new EnvoyException("Could not enter offline mode: user name unknown");
|
||||
client.setSender(clientUser);
|
||||
JOptionPane.showMessageDialog(null,
|
||||
|
Reference in New Issue
Block a user