Integrated WriteProxy into the sending process
This commit is contained in:
		@@ -3,7 +3,7 @@ package envoy.client.data;
 | 
			
		||||
import java.io.IOException;
 | 
			
		||||
import java.io.Serializable;
 | 
			
		||||
 | 
			
		||||
import envoy.client.net.Client;
 | 
			
		||||
import envoy.client.net.WriteProxy;
 | 
			
		||||
import envoy.client.ui.list.ComponentListModel;
 | 
			
		||||
import envoy.data.Message;
 | 
			
		||||
import envoy.data.Message.MessageStatus;
 | 
			
		||||
@@ -52,22 +52,20 @@ public class Chat implements Serializable {
 | 
			
		||||
	 * {@code READ} starting from the bottom and stopping once a read message is
 | 
			
		||||
	 * found.
 | 
			
		||||
	 *
 | 
			
		||||
	 * @param client the client instance used to notify the server about the message
 | 
			
		||||
	 *               status changes
 | 
			
		||||
	 * @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
 | 
			
		||||
	 *                     delivered to the server
 | 
			
		||||
	 * @since Envoy v0.3-alpha
 | 
			
		||||
	 */
 | 
			
		||||
	public void read(Client client) throws IOException {
 | 
			
		||||
	public void read(WriteProxy writeProxy) throws IOException {
 | 
			
		||||
		for (int i = model.size() - 1; i >= 0; --i) {
 | 
			
		||||
			final Message m = model.get(i);
 | 
			
		||||
			if (m.getSenderId() == recipient.getId()) {
 | 
			
		||||
				if (m.getStatus() == MessageStatus.READ) break;
 | 
			
		||||
				else {
 | 
			
		||||
					m.setStatus(MessageStatus.READ);
 | 
			
		||||
 | 
			
		||||
					// TODO: Cache events in offline mode
 | 
			
		||||
					client.sendEvent(new MessageStatusChangeEvent(m));
 | 
			
		||||
					writeProxy.writeMessageStatusChangeEvent(new MessageStatusChangeEvent(m));
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 
 | 
			
		||||
@@ -16,6 +16,7 @@ import envoy.client.data.LocalDb;
 | 
			
		||||
import envoy.client.event.MessageCreationEvent;
 | 
			
		||||
import envoy.client.event.ThemeChangeEvent;
 | 
			
		||||
import envoy.client.net.Client;
 | 
			
		||||
import envoy.client.net.WriteProxy;
 | 
			
		||||
import envoy.client.ui.list.ComponentList;
 | 
			
		||||
import envoy.client.ui.settings.SettingsScreen;
 | 
			
		||||
import envoy.client.util.EnvoyLog;
 | 
			
		||||
@@ -39,8 +40,9 @@ import envoy.event.MessageStatusChangeEvent;
 | 
			
		||||
public class ChatWindow extends JFrame {
 | 
			
		||||
 | 
			
		||||
	// User specific objects
 | 
			
		||||
	private Client	client;
 | 
			
		||||
	private LocalDb	localDb;
 | 
			
		||||
	private Client		client;
 | 
			
		||||
	private WriteProxy	writeProxy;
 | 
			
		||||
	private LocalDb		localDb;
 | 
			
		||||
 | 
			
		||||
	// GUI components
 | 
			
		||||
	private JPanel					contentPane				= new JPanel();
 | 
			
		||||
@@ -211,7 +213,7 @@ public class ChatWindow extends JFrame {
 | 
			
		||||
 | 
			
		||||
		// Listen to received messages
 | 
			
		||||
		EventBus.getInstance().register(MessageCreationEvent.class, (evt) -> {
 | 
			
		||||
			Message message = ((MessageCreationEvent) evt).get();
 | 
			
		||||
			Message	message	= ((MessageCreationEvent) evt).get();
 | 
			
		||||
			Chat	chat	= localDb.getChats().stream().filter(c -> c.getRecipient().getId() == message.getSenderId()).findFirst().get();
 | 
			
		||||
			chat.appendMessage(message);
 | 
			
		||||
 | 
			
		||||
@@ -301,8 +303,7 @@ public class ChatWindow extends JFrame {
 | 
			
		||||
				.build();
 | 
			
		||||
 | 
			
		||||
			// Send message
 | 
			
		||||
			// TODO: Store offline messages
 | 
			
		||||
			client.sendMessage(message);
 | 
			
		||||
			writeProxy.writeMessage(message);
 | 
			
		||||
 | 
			
		||||
			// Add message to PersistentLocalDb and update UI
 | 
			
		||||
			currentChat.appendMessage(message);
 | 
			
		||||
@@ -345,7 +346,7 @@ public class ChatWindow extends JFrame {
 | 
			
		||||
 | 
			
		||||
	private void readCurrentChat() {
 | 
			
		||||
		try {
 | 
			
		||||
			currentChat.read(client);
 | 
			
		||||
			currentChat.read(writeProxy);
 | 
			
		||||
			messageList.synchronizeModel();
 | 
			
		||||
		} catch (IOException e) {
 | 
			
		||||
			e.printStackTrace();
 | 
			
		||||
@@ -354,24 +355,23 @@ public class ChatWindow extends JFrame {
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
	 * Sets the {@link Client} used by this {@link ChatWindow}.
 | 
			
		||||
	 * Initializes the components responsible server communication and
 | 
			
		||||
	 * persistence.<br>
 | 
			
		||||
	 * <br>
 | 
			
		||||
	 * This will trigger the display of the contact list.
 | 
			
		||||
	 *
 | 
			
		||||
	 * @param client the {@link Client} used to send and receive messages
 | 
			
		||||
	 * @since Envoy v0.2-alpha
 | 
			
		||||
	 * @param client     the client used to send and receive messages
 | 
			
		||||
	 * @param localDb    the local database used to manage stored messages
 | 
			
		||||
	 *                   and users
 | 
			
		||||
	 * @param writeProxy the write proxy used to send messages and status change
 | 
			
		||||
	 *                   events to the server or cache them inside the local
 | 
			
		||||
	 *                   database
 | 
			
		||||
	 * @since Envoy v0.3-alpha
 | 
			
		||||
	 */
 | 
			
		||||
	public void setClient(Client client) { this.client = client; }
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
	 * Sets the {@link LocalDb} used by this {@link ChatWindow}. After
 | 
			
		||||
	 * invoking this
 | 
			
		||||
	 * method, users and chats will be loaded from the database into the GUI.
 | 
			
		||||
	 *
 | 
			
		||||
	 * @param localDb the {@link LocalDb} used to manage stored messages
 | 
			
		||||
	 *                and users
 | 
			
		||||
	 * @since Envoy v0.2-alpha
 | 
			
		||||
	 */
 | 
			
		||||
	public void setLocalDB(LocalDb localDb) {
 | 
			
		||||
		this.localDb = localDb;
 | 
			
		||||
	public void initContent(Client client, LocalDb localDb, WriteProxy writeProxy) {
 | 
			
		||||
		this.client		= client;
 | 
			
		||||
		this.localDb	= localDb;
 | 
			
		||||
		this.writeProxy	= writeProxy;
 | 
			
		||||
		loadUsersAndChats();
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -15,6 +15,7 @@ import envoy.client.Config;
 | 
			
		||||
import envoy.client.Settings;
 | 
			
		||||
import envoy.client.data.*;
 | 
			
		||||
import envoy.client.net.Client;
 | 
			
		||||
import envoy.client.net.WriteProxy;
 | 
			
		||||
import envoy.client.util.EnvoyLog;
 | 
			
		||||
import envoy.data.LoginCredentials;
 | 
			
		||||
import envoy.data.Message;
 | 
			
		||||
@@ -148,14 +149,19 @@ public class Startup {
 | 
			
		||||
					JOptionPane.WARNING_MESSAGE);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		// Save all users to the local database
 | 
			
		||||
		if (client.isOnline()) localDb.setUsers(client.getUsers());
 | 
			
		||||
		// Initialize write proxy
 | 
			
		||||
		final WriteProxy writeProxy = client.createWriteProxy(localDb);
 | 
			
		||||
 | 
			
		||||
		// Save all users to the local database and flush cache
 | 
			
		||||
		if (client.isOnline()) {
 | 
			
		||||
			localDb.setUsers(client.getUsers());
 | 
			
		||||
			writeProxy.flushCache();
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		// Display ChatWindow and StatusTrayIcon
 | 
			
		||||
		EventQueue.invokeLater(() -> {
 | 
			
		||||
			try {
 | 
			
		||||
				chatWindow.setClient(client);
 | 
			
		||||
				chatWindow.setLocalDB(localDb);
 | 
			
		||||
				chatWindow.initContent(client, localDb, writeProxy);
 | 
			
		||||
 | 
			
		||||
				try {
 | 
			
		||||
					new StatusTrayIcon(chatWindow).show();
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user