|
|
@@ -196,31 +196,37 @@ public class MainWindow extends JFrame implements RelayClient.MessageReceiver {
|
|
|
|
|
|
@Override
|
|
|
public void onMessage(Message msg) {
|
|
|
- PublicKey senderPublicKey = msg.getSenderKey();
|
|
|
- boolean found = false;
|
|
|
- for(Chat chat : chatHashMap.values()){
|
|
|
- if(chat.getTargetKey().equals(senderPublicKey)){
|
|
|
- chat.addMessage(msg);
|
|
|
- for(ChatWindow chatWindow : openChatWindows){
|
|
|
- if(chatWindow.getChat().getTargetKey().equals(senderPublicKey)){
|
|
|
- chatWindow.addMessage(msg);
|
|
|
- }
|
|
|
- }
|
|
|
- found = true;
|
|
|
+ PublicKey senderKey = msg.getSenderKey();
|
|
|
+
|
|
|
+ if (senderKey.equals(KeyManager.getPublicKey())) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ Chat chat = null;
|
|
|
+ for (Chat existingChat : chatHashMap.values()) {
|
|
|
+ if (existingChat.getTargetKey().equals(senderKey)) {
|
|
|
+ chat = existingChat;
|
|
|
+ break;
|
|
|
}
|
|
|
}
|
|
|
- if(!found && !senderPublicKey.equals(KeyManager.getPublicKey())){
|
|
|
- Chat newChat;
|
|
|
- if(!msg.isDirectMessage()){
|
|
|
- newChat = new Chat(true, Config.RELAY_SERVER_IP, Config.RELAY_SERVER_PORT, msg.getSenderKey());
|
|
|
|
|
|
- }else {
|
|
|
- newChat = new Chat(false, msg.getFromIp(), msg.getUsingPort(), msg.getSenderKey());
|
|
|
+ if (chat == null) {
|
|
|
+ if (msg.isDirectMessage()) {
|
|
|
+ chat = new Chat(false, msg.getFromIp(), msg.getUsingPort(), senderKey);
|
|
|
+ } else {
|
|
|
+ chat = new Chat(true, Config.RELAY_SERVER_IP, Config.RELAY_SERVER_PORT, senderKey);
|
|
|
}
|
|
|
- newChat.addMessage(msg);
|
|
|
- chatHashMap.put(KeyManager.publicKeyToString(senderPublicKey), newChat);
|
|
|
+ chatHashMap.put(KeyManager.publicKeyToString(senderKey).substring(0, 6), chat);
|
|
|
updateChatList();
|
|
|
}
|
|
|
+
|
|
|
+ chat.addMessage(msg);
|
|
|
+
|
|
|
+ for (ChatWindow window : openChatWindows) {
|
|
|
+ if (window.getChat().getTargetKey().equals(senderKey)) {
|
|
|
+ window.addMessage(msg);
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
public void closedWindow(ChatWindow closedWindow) {
|