From 3e15d6aaddc7cf31f401c299fea249e8d1b4abc9 Mon Sep 17 00:00:00 2001 From: jegyuzzang Date: Thu, 14 Dec 2023 11:06:53 +0900 Subject: [PATCH 1/5] refactor/xmlParser --- src/main/java/client/domain/ClientInfo.java | 25 +++++++++++ src/main/java/client/domain/ClientThread.java | 37 ++++++++++++++--- src/main/java/server/domain/ServerInfo.java | 41 ++++++++++++++++--- src/main/java/server/domain/ServerThread.java | 5 +++ .../java/server/domain/ServerThreadPool.java | 5 +++ 5 files changed, 102 insertions(+), 11 deletions(-) diff --git a/src/main/java/client/domain/ClientInfo.java b/src/main/java/client/domain/ClientInfo.java index 13c27de..de7fc81 100644 --- a/src/main/java/client/domain/ClientInfo.java +++ b/src/main/java/client/domain/ClientInfo.java @@ -1,5 +1,11 @@ package client.domain; +import org.w3c.dom.Document; +import org.w3c.dom.Element; + +import javax.xml.parsers.DocumentBuilder; +import javax.xml.parsers.DocumentBuilderFactory; +import javax.xml.parsers.ParserConfigurationException; import java.io.IOException; import java.io.InputStream; import java.util.Properties; @@ -27,4 +33,23 @@ public String getKey() { return key; } + public Document toXmlDocument() { + try { + DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); + DocumentBuilder builder = factory.newDocumentBuilder(); + + Document document = builder.newDocument(); + Element rootElement = document.createElement("ClientInfo"); + document.appendChild(rootElement); + + Element keyElement = document.createElement("key"); + keyElement.appendChild(document.createTextNode(key)); + rootElement.appendChild(keyElement); + + return document; + } catch (ParserConfigurationException e) { + e.printStackTrace(); + return null; + } + } } diff --git a/src/main/java/client/domain/ClientThread.java b/src/main/java/client/domain/ClientThread.java index 8148770..136b321 100644 --- a/src/main/java/client/domain/ClientThread.java +++ b/src/main/java/client/domain/ClientThread.java @@ -1,6 +1,5 @@ package client.domain; - import client.view.ClientMultiGUI; import java.io.BufferedReader; @@ -8,9 +7,15 @@ import java.io.InputStreamReader; import java.net.Socket; +import org.w3c.dom.Document; +import org.xml.sax.InputSource; + +import javax.xml.parsers.DocumentBuilder; +import javax.xml.parsers.DocumentBuilderFactory; + public class ClientThread extends Thread { - Socket socket; - ClientMultiGUI clientMultiGUI; + private Socket socket; + private ClientMultiGUI clientMultiGUI; public ClientThread(Socket socket, ClientMultiGUI clientMultiGUI) { this.socket = socket; @@ -24,13 +29,33 @@ public void run() { BufferedReader reader = new BufferedReader(inputStreamReader); while (true) { - String message = reader.readLine(); - if (message == null) + String xmlMessage = reader.readLine(); + if (xmlMessage == null) break; - clientMultiGUI.append(message + "\n"); + + Document messageDocument = parseXML(xmlMessage); + handleMessage(messageDocument); } } catch (Exception e) { System.out.println(e.getMessage()); } } + + private Document parseXML(String xmlString) { + try { + DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); + DocumentBuilder builder = factory.newDocumentBuilder(); + InputSource inputSource = new InputSource(new java.io.StringReader(xmlString)); + return builder.parse(inputSource); + } catch (Exception e) { + e.printStackTrace(); + return null; + } + } + + private void handleMessage(Document messageDocument) { + // Handle the received XML message as needed + // For example, you can extract information and update the GUI + // clientMultiGUI.append(message + "\n"); + } } diff --git a/src/main/java/server/domain/ServerInfo.java b/src/main/java/server/domain/ServerInfo.java index 1421263..e353849 100644 --- a/src/main/java/server/domain/ServerInfo.java +++ b/src/main/java/server/domain/ServerInfo.java @@ -6,10 +6,16 @@ import java.net.UnknownHostException; import java.util.Properties; +import org.w3c.dom.Document; +import javax.xml.parsers.DocumentBuilder; +import javax.xml.parsers.DocumentBuilderFactory; + public class ServerInfo { - int port; - String address; + private int port; + private String address; + private String password; + private String key; { try { @@ -19,9 +25,6 @@ public class ServerInfo { } } - String password; - String key; - public ServerInfo() { loadProperties(); } @@ -55,4 +58,32 @@ public String getKey() { return key; } + public Document toXmlDocument() { + try { + DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); + DocumentBuilder builder = factory.newDocumentBuilder(); + Document document = builder.newDocument(); + + // Create root element + org.w3c.dom.Element serverInfoElement = document.createElement("ServerInfo"); + document.appendChild(serverInfoElement); + + // Add elements to the XML document + appendElement(document, serverInfoElement, "Address", address); + appendElement(document, serverInfoElement, "Port", Integer.toString(port)); + appendElement(document, serverInfoElement, "Password", password); + appendElement(document, serverInfoElement, "Key", key); + + return document; + } catch (Exception e) { + e.printStackTrace(); + return null; + } + } + + private void appendElement(Document document, org.w3c.dom.Element parent, String tagName, String textContent) { + org.w3c.dom.Element element = document.createElement(tagName); + element.appendChild(document.createTextNode(textContent)); + parent.appendChild(element); + } } diff --git a/src/main/java/server/domain/ServerThread.java b/src/main/java/server/domain/ServerThread.java index 176f13c..c87821b 100644 --- a/src/main/java/server/domain/ServerThread.java +++ b/src/main/java/server/domain/ServerThread.java @@ -92,4 +92,9 @@ private void sendAll(String message) { private void addUser(String name) { serverGUI.updateUserList(name); } + + /*public Document toXmlDocument() { + // Implement this method to convert ServerThread state to XML if needed + return null; + }*/ } diff --git a/src/main/java/server/domain/ServerThreadPool.java b/src/main/java/server/domain/ServerThreadPool.java index c6fde26..0fd8eff 100644 --- a/src/main/java/server/domain/ServerThreadPool.java +++ b/src/main/java/server/domain/ServerThreadPool.java @@ -32,4 +32,9 @@ public void startServer() { e.printStackTrace(); } } + + /*public Document toXmlDocument() { + // Implement this method to convert ServerThreadPool state to XML if needed + return null; + }*/ } From 902c3a380241b1897f758b73d8294f9f8d994e1b Mon Sep 17 00:00:00 2001 From: jegyuzzang Date: Mon, 18 Dec 2023 12:41:08 +0900 Subject: [PATCH 2/5] refactor/ui --- src/main/java/client/view/ClientMultiGUI.java | 148 ++++++++++++------ 1 file changed, 98 insertions(+), 50 deletions(-) diff --git a/src/main/java/client/view/ClientMultiGUI.java b/src/main/java/client/view/ClientMultiGUI.java index 7d667b1..7adbcb2 100644 --- a/src/main/java/client/view/ClientMultiGUI.java +++ b/src/main/java/client/view/ClientMultiGUI.java @@ -1,11 +1,12 @@ package client.view; - import client.domain.ClientInfo; import client.domain.ClientThread; import client.utils.EncryptionUtils; import javax.swing.*; +import javax.swing.event.DocumentEvent; +import javax.swing.event.DocumentListener; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; @@ -16,12 +17,10 @@ import static client.utils.OutputMessage.STRING_WELCOME_MESSAGE; public class ClientMultiGUI extends JFrame implements ActionListener { - private JLabel label; - private JTextField client; - private JTextField clientName, clientPassword; - private JTextField clientServer, clientPort; - private JButton connect; - private JButton disconnect; + private JFrame loginFrame; + private JTextField clientName, clientPassword, clientServer, clientPort; + private JButton connectButton; + private JTextArea client; // 수정된 부분 private JTextArea clientMessage; private boolean connected; private PrintWriter writer; @@ -29,44 +28,82 @@ public class ClientMultiGUI extends JFrame implements ActionListener { private final static String ClientName = "메신저 서버"; private final static String Message = "보낼 메시지"; - private final static String IPAddress = "서버 주소: "; - private final static String PortNumber = "포트 번호: "; - private final static String UserName = "이름: "; - private final static String PassWord = "비밀번호: "; public ClientMultiGUI() { - super(ClientName); + initLoginWindow(); + } + + private void initLoginWindow() { + loginFrame = new JFrame("로그인"); + loginFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + loginFrame.setSize(300, 400); + + // 로그인 창의 배경을 노란색으로 설정하는 부분 시작 + loginFrame.getContentPane().setBackground(Color.YELLOW); + // 로그인 창의 배경을 노란색으로 설정하는 부분 끝 + + loginFrame.setLayout(new GridLayout(5, 2, 10, 10)); + + clientServer = new JTextField(""); + clientPort = new JTextField(""); + clientName = new JTextField(""); + clientPassword = new JTextField(""); + + connectButton = new JButton("연결"); + connectButton.addActionListener(this); + + loginFrame.add(new JLabel("서버 주소:")); + loginFrame.add(clientServer); + loginFrame.add(new JLabel("포트 번호:")); + loginFrame.add(clientPort); + loginFrame.add(new JLabel("닉네임:")); + loginFrame.add(clientName); + loginFrame.add(new JLabel("비밀번호:")); + loginFrame.add(clientPassword); + loginFrame.add(new JLabel("")); + loginFrame.add(connectButton); + + loginFrame.setVisible(true); + } + + private void initChatWindow() { + getContentPane().removeAll(); + JPanel northPanel = new JPanel(new GridLayout(3, 1)); - JPanel southPanel = new JPanel(new GridLayout(3, 1)); + JPanel southPanel = new JPanel(new GridLayout(2, 1)); JPanel server = new JPanel(new GridLayout(1, 3, 1, 3)); JPanel Port = new JPanel(new GridLayout(1, 3, 1, 3)); - JPanel massage = new JPanel(new GridLayout(1, 1)); - clientServer = new JTextField("IpAddress"); - clientPort = new JTextField("PortNumber"); - massage.add(new JLabel(Message)); - server.add(new JLabel(IPAddress)); + JPanel messagePanel = new JPanel(new GridLayout(1, 1)); + server.add(new JLabel("보낼 메시지")); server.add(clientServer); - Port.add(new JLabel(PortNumber)); - + Port.add(new JLabel("서버 주소: ")); Port.add(clientPort); northPanel.add(server); northPanel.add(Port); - southPanel.add(massage); - - JPanel userAndConnect = new JPanel(new GridLayout(1, 5, 1, 3)); - - connect = new JButton("연결"); - disconnect = new JButton("나가기"); - connect.addActionListener(this); - userAndConnect.add(new JLabel(UserName)); - clientName = new JTextField("nickname"); - userAndConnect.add(clientName); - userAndConnect.add(new JLabel(PassWord)); - clientPassword = new JTextField("password"); - userAndConnect.add(clientPassword); - userAndConnect.add(connect); - client = new JTextField(""); + southPanel.add(messagePanel); + + client = new JTextArea(""); + client.setLineWrap(true); + // 수정된 부분 시작 + client.getDocument().addDocumentListener(new DocumentListener() { + @Override + public void insertUpdate(DocumentEvent e) { + // 사용자가 텍스트를 입력할 때마다 처리할 내용 + } + + @Override + public void removeUpdate(DocumentEvent e) { + // 사용자가 텍스트를 삭제할 때마다 처리할 내용 + } + + @Override + public void changedUpdate(DocumentEvent e) { + // 스타일이나 속성이 변경될 때 처리할 내용 + } + }); + // 수정된 부분 끝 + float hue = 209f; float saturation = 13f; float brightness = 96f; @@ -74,16 +111,20 @@ public ClientMultiGUI() { Color customColor = Color.getHSBColor(hue / 360f, saturation / 100f, brightness / 100f); client.setBackground(customColor); - southPanel.add(client); - southPanel.add(disconnect); - userAndConnect.add(new JLabel("")); - northPanel.add(userAndConnect); + southPanel.add(new JScrollPane(client)); + + JButton sendButton = new JButton("전송"); + sendButton.addActionListener(this); + southPanel.add(sendButton); + sendButton.addActionListener(this); + northPanel.add(southPanel); - add(northPanel, BorderLayout.NORTH); - add(southPanel, BorderLayout.SOUTH); + JButton disconnectButton = new JButton("나가기"); + disconnectButton.addActionListener(this); + northPanel.add(disconnectButton); - disconnect.addActionListener(new ActionListener() { + disconnectButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { System.exit(0); @@ -101,24 +142,27 @@ public void actionPerformed(ActionEvent e) { setSize(600, 600); setVisible(true); client.requestFocus(); - } public void append(String message) { - clientMessage.append(message); + clientMessage.append(message + "\n"); clientMessage.setCaretPosition(clientMessage.getText().length() - 1); } public void actionPerformed(ActionEvent e) { Object o = e.getSource(); if (connected) { - writer.println(client.getText()); - writer.flush(); - client.setText(""); + // 수정된 부분 시작 + if (o instanceof JButton && ((JButton) o).getText().equals("전송")) { + writer.println(client.getText()); + writer.flush(); + client.setText(""); + } + // 수정된 부분 끝 return; } - if (o == connect) { + if (o == connectButton) { String username = clientName.getText().trim(); String password = clientPassword.getText().trim(); if (username.length() == 0) @@ -159,12 +203,16 @@ public void actionPerformed(ActionEvent e) { receiver.start(); connected = true; - connect.setEnabled(false); + connectButton.setEnabled(false); clientServer.setEditable(false); clientPort.setEditable(false); clientName.setEditable(false); clientPassword.setEditable(false); - client.addActionListener(this); + initChatWindow(); + loginFrame.dispose(); // Close the login window } } } + + + From 726716d3bef773b8f73411798f503b773d0cbfdc Mon Sep 17 00:00:00 2001 From: jegyuzzang Date: Mon, 18 Dec 2023 13:45:12 +0900 Subject: [PATCH 3/5] refactor/ui --- src/main/java/client/view/ClientMultiGUI.java | 46 +++++-------------- 1 file changed, 12 insertions(+), 34 deletions(-) diff --git a/src/main/java/client/view/ClientMultiGUI.java b/src/main/java/client/view/ClientMultiGUI.java index 7adbcb2..b42fbb0 100644 --- a/src/main/java/client/view/ClientMultiGUI.java +++ b/src/main/java/client/view/ClientMultiGUI.java @@ -70,39 +70,11 @@ private void initChatWindow() { getContentPane().removeAll(); JPanel northPanel = new JPanel(new GridLayout(3, 1)); - JPanel southPanel = new JPanel(new GridLayout(2, 1)); - JPanel server = new JPanel(new GridLayout(1, 3, 1, 3)); - JPanel Port = new JPanel(new GridLayout(1, 3, 1, 3)); - - JPanel messagePanel = new JPanel(new GridLayout(1, 1)); - server.add(new JLabel("보낼 메시지")); - server.add(clientServer); - Port.add(new JLabel("서버 주소: ")); - Port.add(clientPort); - northPanel.add(server); - northPanel.add(Port); - southPanel.add(messagePanel); + JPanel southPanel = new JPanel(new GridLayout(3, 1)); // 수정된 부분 + // 수정된 부분 시작 client = new JTextArea(""); client.setLineWrap(true); - // 수정된 부분 시작 - client.getDocument().addDocumentListener(new DocumentListener() { - @Override - public void insertUpdate(DocumentEvent e) { - // 사용자가 텍스트를 입력할 때마다 처리할 내용 - } - - @Override - public void removeUpdate(DocumentEvent e) { - // 사용자가 텍스트를 삭제할 때마다 처리할 내용 - } - - @Override - public void changedUpdate(DocumentEvent e) { - // 스타일이나 속성이 변경될 때 처리할 내용 - } - }); - // 수정된 부분 끝 float hue = 209f; float saturation = 13f; @@ -116,8 +88,8 @@ public void changedUpdate(DocumentEvent e) { JButton sendButton = new JButton("전송"); sendButton.addActionListener(this); southPanel.add(sendButton); + // 추가된 부분 끝 - sendButton.addActionListener(this); northPanel.add(southPanel); JButton disconnectButton = new JButton("나가기"); @@ -131,11 +103,15 @@ public void actionPerformed(ActionEvent e) { } }); + // 수정된 부분 시작 clientMessage = new JTextArea(STRING_WELCOME_MESSAGE.getMessage(), 40, 40); - JPanel centerPanel = new JPanel(new GridLayout(1, 1)); - centerPanel.add(new JScrollPane(clientMessage)); - + JScrollPane messageScrollPane = new JScrollPane(clientMessage); clientMessage.setEditable(false); + southPanel.add(messageScrollPane); + // 수정된 부분 끝 + + JPanel centerPanel = new JPanel(new GridLayout(1, 1)); + centerPanel.add(northPanel); add(centerPanel, BorderLayout.CENTER); setDefaultCloseOperation(EXIT_ON_CLOSE); @@ -144,6 +120,8 @@ public void actionPerformed(ActionEvent e) { client.requestFocus(); } + + public void append(String message) { clientMessage.append(message + "\n"); clientMessage.setCaretPosition(clientMessage.getText().length() - 1); From 1545003c150c5ba72e7f67feaf297e425c6ccf65 Mon Sep 17 00:00:00 2001 From: jegyuzzang Date: Mon, 18 Dec 2023 13:53:01 +0900 Subject: [PATCH 4/5] refactor/ui --- src/main/java/client/view/ClientMultiGUI.java | 22 +++++++++---------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/src/main/java/client/view/ClientMultiGUI.java b/src/main/java/client/view/ClientMultiGUI.java index b42fbb0..61769b8 100644 --- a/src/main/java/client/view/ClientMultiGUI.java +++ b/src/main/java/client/view/ClientMultiGUI.java @@ -72,6 +72,13 @@ private void initChatWindow() { JPanel northPanel = new JPanel(new GridLayout(3, 1)); JPanel southPanel = new JPanel(new GridLayout(3, 1)); // 수정된 부분 + // 수정된 부분 시작 + clientMessage = new JTextArea(STRING_WELCOME_MESSAGE.getMessage(), 40, 40); + JScrollPane messageScrollPane = new JScrollPane(clientMessage); + clientMessage.setEditable(false); + northPanel.add(messageScrollPane); + // 수정된 부분 끝 + // 수정된 부분 시작 client = new JTextArea(""); client.setLineWrap(true); @@ -84,17 +91,15 @@ private void initChatWindow() { client.setBackground(customColor); southPanel.add(new JScrollPane(client)); + // 수정된 부분 끝 JButton sendButton = new JButton("전송"); sendButton.addActionListener(this); southPanel.add(sendButton); - // 추가된 부분 끝 - - northPanel.add(southPanel); JButton disconnectButton = new JButton("나가기"); disconnectButton.addActionListener(this); - northPanel.add(disconnectButton); + southPanel.add(disconnectButton); disconnectButton.addActionListener(new ActionListener() { @Override @@ -103,15 +108,9 @@ public void actionPerformed(ActionEvent e) { } }); - // 수정된 부분 시작 - clientMessage = new JTextArea(STRING_WELCOME_MESSAGE.getMessage(), 40, 40); - JScrollPane messageScrollPane = new JScrollPane(clientMessage); - clientMessage.setEditable(false); - southPanel.add(messageScrollPane); - // 수정된 부분 끝 - JPanel centerPanel = new JPanel(new GridLayout(1, 1)); centerPanel.add(northPanel); + centerPanel.add(southPanel); // 수정된 부분 add(centerPanel, BorderLayout.CENTER); setDefaultCloseOperation(EXIT_ON_CLOSE); @@ -122,6 +121,7 @@ public void actionPerformed(ActionEvent e) { + public void append(String message) { clientMessage.append(message + "\n"); clientMessage.setCaretPosition(clientMessage.getText().length() - 1); From b2dcb456ecd7a7f1cd0f87cf7c53139ddc844c68 Mon Sep 17 00:00:00 2001 From: JunYoung Jang Date: Tue, 19 Dec 2023 15:50:59 +0900 Subject: [PATCH 5/5] =?UTF-8?q?refactor:=ED=81=B4=EB=9D=BC=EC=9D=B4?= =?UTF-8?q?=EC=96=B8=ED=8A=B8=20=EC=A0=80=EC=9E=A5=20=EB=B0=A9=EC=8B=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/client/view/ClientMultiGUI.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/main/java/client/view/ClientMultiGUI.java b/src/main/java/client/view/ClientMultiGUI.java index 61769b8..8b1b79a 100644 --- a/src/main/java/client/view/ClientMultiGUI.java +++ b/src/main/java/client/view/ClientMultiGUI.java @@ -120,19 +120,20 @@ public void actionPerformed(ActionEvent e) { } - - public void append(String message) { clientMessage.append(message + "\n"); clientMessage.setCaretPosition(clientMessage.getText().length() - 1); } + public void actionPerformed(ActionEvent e) { Object o = e.getSource(); if (connected) { // 수정된 부분 시작 if (o instanceof JButton && ((JButton) o).getText().equals("전송")) { - writer.println(client.getText()); + String message = client.getText(); + append("You: " + message); + writer.println(message); writer.flush(); client.setText(""); }