Merge pull request #51 from PM2-IT21bWIN-ruiz-mach-krea/useDataObjectToSend
Use data object to send
This commit is contained in:
@@ -1,7 +1,9 @@
|
||||
package ch.zhaw.pm2.multichat.client;
|
||||
|
||||
import ch.zhaw.pm2.multichat.protocol.ConnectionHandler;
|
||||
import ch.zhaw.pm2.multichat.protocol.ConnectionHandler.State;
|
||||
import ch.zhaw.pm2.multichat.protocol.ChatProtocolException;
|
||||
import ch.zhaw.pm2.multichat.protocol.Message;
|
||||
import javafx.application.Platform;
|
||||
import javafx.beans.value.ChangeListener;
|
||||
import javafx.beans.value.ObservableValue;
|
||||
@@ -239,7 +241,7 @@ public class ChatWindowController {
|
||||
* @param message String to be added as Error
|
||||
*/
|
||||
public void addError(String message) {
|
||||
messages.addMessage(new Message(Message.MessageType.ERROR, null, null, message));
|
||||
messages.addMessage(new Message(ConnectionHandler.DATA_TYPE.DATA_TYPE_ERROR, null, null, message));
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -248,7 +250,6 @@ public class ChatWindowController {
|
||||
class WindowCloseHandler implements EventHandler<WindowEvent> {
|
||||
|
||||
/**
|
||||
*
|
||||
* @param event the event which occurred when Windows is closed
|
||||
*/
|
||||
public void handle(WindowEvent event) {
|
||||
|
||||
@@ -2,6 +2,7 @@ package ch.zhaw.pm2.multichat.client;
|
||||
|
||||
import ch.zhaw.pm2.multichat.protocol.ChatProtocolException;
|
||||
import ch.zhaw.pm2.multichat.protocol.ConnectionHandler;
|
||||
import ch.zhaw.pm2.multichat.protocol.Message;
|
||||
import ch.zhaw.pm2.multichat.protocol.NetworkHandler;
|
||||
import javafx.beans.property.SimpleIntegerProperty;
|
||||
import javafx.beans.property.SimpleObjectProperty;
|
||||
@@ -49,8 +50,8 @@ public class ClientConnectionHandler extends ConnectionHandler implements Runnab
|
||||
* Called to initialize the ClientConnectionHandler when trying to start a connection
|
||||
*
|
||||
* @param serverAddress to connect to
|
||||
* @param serverPort to connect to
|
||||
* @param userName to connect as
|
||||
* @param serverPort to connect to
|
||||
* @param userName to connect as
|
||||
* @throws IOException if connection to Server not possible
|
||||
*/
|
||||
public void initialize(String serverAddress, int serverPort, String userName) throws IOException {
|
||||
@@ -122,7 +123,7 @@ public class ClientConnectionHandler extends ConnectionHandler implements Runnab
|
||||
try {
|
||||
System.out.println("Start receiving data...");
|
||||
while (getConnection().isAvailable()) {
|
||||
String data = getConnection().receive();
|
||||
Message data = getConnection().receive();
|
||||
processData(data);
|
||||
}
|
||||
System.out.println("Stopped receiving data");
|
||||
@@ -162,95 +163,77 @@ public class ClientConnectionHandler extends ConnectionHandler implements Runnab
|
||||
*
|
||||
* @param data that is received in a form of a String and then used depending on its determined cause.
|
||||
*/
|
||||
private void processData(String data) {
|
||||
try {
|
||||
Scanner scanner = new Scanner(data);
|
||||
StringBuilder sender = new StringBuilder();
|
||||
StringBuilder receiver = new StringBuilder();
|
||||
StringBuilder type = new StringBuilder();
|
||||
StringBuilder payload = new StringBuilder();
|
||||
super.processData(scanner, sender, receiver, type, payload);
|
||||
|
||||
// dispatch operation based on type parameter
|
||||
if (type.toString().equals(getDataTypeConnect())) {
|
||||
System.err.println("Illegal connect request from server");
|
||||
} else if (type.toString().equals(getDataTypeConfirm())) {
|
||||
caseConfirm(sender.toString(), receiver.toString(), payload.toString());
|
||||
} else if (type.toString().equals(getDataTypeDisconnect())) {
|
||||
caseDisconnect(sender.toString(), receiver.toString(), payload.toString());
|
||||
} else if (type.toString().equals(getDataTypeMessage())) {
|
||||
caseMessage(sender.toString(), receiver.toString(), payload.toString());
|
||||
} else if (type.toString().equals(getDataTypeError())) {
|
||||
caseError(sender.toString(), receiver.toString(), payload.toString());
|
||||
} else {
|
||||
System.out.println("Unknown data type received: " + type);
|
||||
}
|
||||
} catch (ChatProtocolException e) {
|
||||
System.err.println("Error while processing data: " + e.getMessage());
|
||||
sendData(USER_NONE, userName.get(), getDataTypeError(), e.getMessage());
|
||||
private void processData(Message data) {
|
||||
// dispatch operation based on type parameter
|
||||
if (data.getType() == DATA_TYPE.DATA_TYPE_CONNECT) {
|
||||
System.err.println("Illegal connect request from server");
|
||||
} else if (data.getType() == DATA_TYPE.DATA_TYPE_CONFIRM) {
|
||||
caseConfirm(data);
|
||||
} else if (data.getType() == DATA_TYPE.DATA_TYPE_DISCONNECT) {
|
||||
caseDisconnect(data);
|
||||
} else if (data.getType() == DATA_TYPE.DATA_TYPE_MESSAGE) {
|
||||
caseMessage(data);
|
||||
} else if (data.getType() == DATA_TYPE.DATA_TYPE_ERROR) {
|
||||
caseError(data);
|
||||
} else {
|
||||
System.out.println("Unknown data type received: " + data.getType());
|
||||
}
|
||||
}
|
||||
|
||||
private void caseConfirm(String sender, String receiver, String payload) {
|
||||
private void caseConfirm(Message data) {
|
||||
if (state.get() == CONFIRM_CONNECT) {
|
||||
this.userName.set(receiver);
|
||||
this.userName.set(data.getReceiver());
|
||||
this.serverPort.set(getConnection().getRemotePort());
|
||||
this.serverAddress.set(getConnection().getRemoteHost());
|
||||
messages.addMessage(new Message(Message.MessageType.INFO, sender, receiver, payload));
|
||||
System.out.println("CONFIRM: " + payload);
|
||||
messages.addMessage(data);
|
||||
System.out.println("CONFIRM: " + data.getText());
|
||||
this.setState(CONNECTED);
|
||||
} else if (state.get() == CONFIRM_DISCONNECT) {
|
||||
messages.addMessage(new Message(Message.MessageType.INFO, sender, receiver, payload));
|
||||
System.out.println("CONFIRM: " + payload);
|
||||
messages.addMessage(data);
|
||||
System.out.println("CONFIRM: " + data.getText());
|
||||
this.setState(DISCONNECTED);
|
||||
} else {
|
||||
System.err.println("Got unexpected confirm message: " + payload);
|
||||
System.err.println("Got unexpected confirm message: " + data.getText());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Initiates the disconnect sequence and sends the message with all its info.
|
||||
*
|
||||
* @param sender the sender name of the message
|
||||
* @param receiver the receiver name of the message
|
||||
* @param payload the added payload that corresponds to the message
|
||||
* @param data Data which has been transmitted
|
||||
*/
|
||||
private void caseDisconnect(String sender, String receiver, String payload) {
|
||||
private void caseDisconnect(Message data) {
|
||||
if (state.get() == DISCONNECTED) {
|
||||
System.out.println("DISCONNECT: Already in disconnected: " + payload);
|
||||
System.out.println("DISCONNECT: Already in disconnected: " + data.getText());
|
||||
return;
|
||||
}
|
||||
messages.addMessage(new Message(Message.MessageType.INFO, sender, receiver, payload));
|
||||
System.out.println("DISCONNECT: " + payload);
|
||||
messages.addMessage(data);
|
||||
System.out.println("DISCONNECT: " + data.getText());
|
||||
this.setState(DISCONNECTED);
|
||||
}
|
||||
|
||||
/**
|
||||
* Initiates the procedure to send a new message and sends one as such.
|
||||
*
|
||||
* @param sender the sender name of the message
|
||||
* @param receiver the receiver name of the message
|
||||
* @param payload the added payload that corresponds to the message
|
||||
* @param data Data which has been transmitted
|
||||
*/
|
||||
private void caseMessage(String sender, String receiver, String payload) {
|
||||
private void caseMessage(Message data) {
|
||||
if (state.get() != CONNECTED) {
|
||||
System.out.println("MESSAGE: Illegal state " + state + " for message: " + payload);
|
||||
System.out.println("MESSAGE: Illegal state " + state + " for message: " + data.getText());
|
||||
return;
|
||||
}
|
||||
messages.addMessage(new Message(Message.MessageType.MESSAGE, sender, receiver, payload));
|
||||
System.out.println("MESSAGE: From " + sender + " to " + receiver + ": " + payload);
|
||||
messages.addMessage(data);
|
||||
System.out.println("MESSAGE: From " + data.getSender() + " to " + data.getReceiver() + ": " + data.getText());
|
||||
}
|
||||
|
||||
/**
|
||||
* Stores the message as an error message and displays it as such as well.
|
||||
*
|
||||
* @param sender the sender name of the message
|
||||
* @param receiver the receiver name of the message
|
||||
* @param payload the added payload that corresponds to the message
|
||||
* @param data Data which has been transmitted
|
||||
*/
|
||||
private void caseError(String sender, String receiver, String payload) {
|
||||
messages.addMessage(new Message(Message.MessageType.ERROR, sender, receiver, payload));
|
||||
System.out.println("ERROR: " + payload);
|
||||
private void caseError(Message data) {
|
||||
messages.addMessage(data);
|
||||
System.out.println("ERROR: " + data.getText());
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
package ch.zhaw.pm2.multichat.client;
|
||||
|
||||
import ch.zhaw.pm2.multichat.protocol.ConnectionHandler;
|
||||
import ch.zhaw.pm2.multichat.protocol.Message;
|
||||
import javafx.beans.property.SimpleBooleanProperty;
|
||||
|
||||
import java.util.ArrayList;
|
||||
@@ -15,6 +17,7 @@ public class ClientMessageList {
|
||||
|
||||
/**
|
||||
* Adds a new message to ArrayList and also informs Listener.
|
||||
*
|
||||
* @param message that should be added
|
||||
*/
|
||||
public void addMessage(Message message) {
|
||||
@@ -35,12 +38,10 @@ public class ClientMessageList {
|
||||
for (Message message : messages) {
|
||||
if (showAll || message.matchesFilter(filter)) {
|
||||
switch (message.getType()) {
|
||||
case MESSAGE ->
|
||||
result.append(String.format("[%s -> %s] %s\n", message.getSender(), message.getReceiver(), message.getText()));
|
||||
case ERROR -> result.append(String.format("[ERROR] %s\n", message.getText()));
|
||||
case INFO -> result.append(String.format("[INFO] %s\n", message.getText()));
|
||||
default ->
|
||||
result.append(String.format("[ERROR] %s\n", "Unexpected message type: " + message.getType()));
|
||||
case DATA_TYPE_MESSAGE -> result.append(String.format("[%s -> %s] %s\n", message.getSender(), message.getReceiver(), message.getText()));
|
||||
case DATA_TYPE_ERROR -> result.append(String.format("[ERROR] %s\n", message.getText()));
|
||||
case DATA_TYPE_CONFIRM, DATA_TYPE_DISCONNECT, DATA_TYPE_CONNECT -> result.append(String.format("[INFO] %s\n", message.getText()));
|
||||
default -> result.append(String.format("[ERROR] %s\n", "Unexpected message type: " + message.getType()));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,73 +0,0 @@
|
||||
package ch.zhaw.pm2.multichat.client;
|
||||
|
||||
/**
|
||||
* A Message object represents one Message of a client. Can be stored in ClientMessageList.
|
||||
*/
|
||||
public class Message {
|
||||
private final MessageType type;
|
||||
private final String sender;
|
||||
private final String receiver;
|
||||
private final String text;
|
||||
|
||||
/**
|
||||
* Constructor of Message. Needs all Information about a Message to save them.
|
||||
*
|
||||
* @param type Message (if it's a message typed by a user), Error or Information (if it is generated automatically, in this case sender and receiver will be null)
|
||||
* @param sender The User who has sent the message.
|
||||
* @param receiver The User who should receive the message.
|
||||
* @param text The Text of the message.
|
||||
*/
|
||||
public Message(MessageType type, String sender, String receiver, String text) {
|
||||
this.type = type;
|
||||
this.sender = sender;
|
||||
this.receiver = receiver;
|
||||
this.text = text;
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks if the Filter String is contained in one of the data fields sender, receiver or text
|
||||
*
|
||||
* @param filter The Filter String
|
||||
* @return true if it is the Filter String is contained in a data field.
|
||||
*/
|
||||
public boolean matchesFilter(String filter) {
|
||||
return (sender != null && sender.contains(filter)) ||
|
||||
(receiver != null && receiver.contains(filter)) ||
|
||||
(text != null && text.contains(filter));
|
||||
}
|
||||
|
||||
/**
|
||||
* @return The type of the message.
|
||||
*/
|
||||
public MessageType getType() {
|
||||
return type;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return The User who has sent the Message.
|
||||
*/
|
||||
public String getSender() {
|
||||
return sender;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return The Receiver who receives the Message.
|
||||
*/
|
||||
public String getReceiver() {
|
||||
return receiver;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return The Text of the Message.
|
||||
*/
|
||||
public String getText() {
|
||||
return text;
|
||||
}
|
||||
|
||||
/**
|
||||
* Enumeration of Message Types.
|
||||
*/
|
||||
public enum MessageType {
|
||||
INFO, MESSAGE, ERROR;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user