Sync
* Completely revised communication between client and server. * Added synchronization functionality. * Added Message State updates * Added UserStatus updates
This commit is contained in:
@ -27,9 +27,9 @@ import envoy.client.Chat;
|
||||
import envoy.client.Client;
|
||||
import envoy.client.LocalDB;
|
||||
import envoy.schema.Message;
|
||||
import envoy.schema.Messages;
|
||||
import envoy.schema.Sync;
|
||||
import envoy.schema.User;
|
||||
import envoy.schema.Users;
|
||||
|
||||
|
||||
/**
|
||||
* Project: <strong>envoy-client</strong><br>
|
||||
@ -147,18 +147,17 @@ public class ChatWindow extends JFrame {
|
||||
|
||||
postButton.addActionListener((evt) -> {
|
||||
if (!client.hasRecipient()) {
|
||||
JOptionPane.showMessageDialog(this, "Please select a recipient!", "Cannot send message", JOptionPane.INFORMATION_MESSAGE);
|
||||
return;
|
||||
JOptionPane.showMessageDialog(this,
|
||||
"Please select a recipient!",
|
||||
"Cannot send message",
|
||||
JOptionPane.INFORMATION_MESSAGE);
|
||||
}
|
||||
|
||||
if (!messageEnterTextfield.getText().isEmpty()) try {
|
||||
|
||||
// Create and send message object
|
||||
final Message message = client.createMessage(messageEnterTextfield.getText());
|
||||
client.sendMessage(message);
|
||||
|
||||
// Append message object to chat
|
||||
currentChat.appendMessage(message);
|
||||
client.addWaitingMessageToLocalDB(message, currentChat);
|
||||
messageList.setModel(currentChat.getModel());
|
||||
|
||||
// Clear text field
|
||||
@ -200,16 +199,23 @@ public class ChatWindow extends JFrame {
|
||||
final User user = selectedUserList.getSelectedValue();
|
||||
client.setRecipient(user);
|
||||
|
||||
currentChat = localDB.getChats().stream().filter(chat -> chat.getRecipient().getID() == user.getID()).findFirst().get();
|
||||
currentChat = localDB.getChats()
|
||||
.stream()
|
||||
.filter(chat -> chat.getRecipient().getID() == user.getID())
|
||||
.findFirst()
|
||||
.get();
|
||||
|
||||
client.setRecipient(user);
|
||||
|
||||
textPane.setText(currentChat.getRecipient().getName());
|
||||
|
||||
messageList.setModel(currentChat.getModel());
|
||||
contentPane.revalidate();
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
|
||||
|
||||
userList.setSelectionForeground(new Color(255, 255, 255));
|
||||
userList.setSelectionBackground(new Color(102, 0, 153));
|
||||
userList.setForeground(new Color(255, 255, 255));
|
||||
@ -227,6 +233,7 @@ public class ChatWindow extends JFrame {
|
||||
contentPane.add(userList, gbc_userList);
|
||||
contentPane.revalidate();
|
||||
|
||||
|
||||
loadUsersAndChats();
|
||||
startReceiverThread(5000);
|
||||
|
||||
@ -239,9 +246,9 @@ public class ChatWindow extends JFrame {
|
||||
*/
|
||||
private void loadUsersAndChats() {
|
||||
new Thread(() -> {
|
||||
Users users = client.getUsersListXml();
|
||||
Sync users = client.getUsersListXml();
|
||||
DefaultListModel<User> userListModel = new DefaultListModel<>();
|
||||
users.getUser().forEach(user -> {
|
||||
users.getUsers().forEach(user -> {
|
||||
userListModel.addElement(user);
|
||||
|
||||
// Check if user exists in local DB
|
||||
@ -253,18 +260,34 @@ public class ChatWindow extends JFrame {
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks for new messages and adds them to the chat list.
|
||||
* For detailed information see Javadoc of corresponding methods.
|
||||
*
|
||||
* @param timeout the amount of time that passes between two requests sent to
|
||||
* the server
|
||||
* @since Envoy v0.1-alpha
|
||||
*/
|
||||
private void startReceiverThread(int timeout) {
|
||||
new Timer(timeout, (evt) -> {
|
||||
Messages unreadMessages = client.getUnreadMessages(client.getSender().getID());
|
||||
for (int i = 0; i < unreadMessages.getMessage().size(); i++)
|
||||
for (int j = 0; j < localDB.getChats().size(); j++)
|
||||
if (localDB.getChats().get(j).getRecipient().getID() == unreadMessages.getMessage().get(i).getMetaData().getSender())
|
||||
localDB.getChats().get(j).appendMessage(unreadMessages.getMessage().get(i));
|
||||
}).start();
|
||||
if(currentChat != null) {
|
||||
client.setMessagesToRead(currentChat);
|
||||
}
|
||||
client.sendSync(client.getSender().getID(), localDB);
|
||||
client.addUnreadMessagesToLocalDB(localDB);
|
||||
client.clearUnreadMessagesSync();
|
||||
|
||||
for (int i = 0; i < userList.getModel().getSize(); i++) {
|
||||
for (int j = 0; j < localDB.getChats().size(); j++) {
|
||||
if(userList.getModel().getElementAt(i).getID() == localDB.getChats().get(j).getRecipient().getID()) {
|
||||
userList.getModel().getElementAt(i).setStatus(localDB.getChats().get(j).getRecipient().getStatus());
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
contentPane.revalidate();
|
||||
contentPane.repaint();
|
||||
userList.revalidate();
|
||||
userList.repaint();
|
||||
}).start();
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user