From f1169489d3ff49fc256877bec7b75fea404115fe Mon Sep 17 00:00:00 2001 From: maderamaps Date: Fri, 19 May 2017 22:33:31 +0700 Subject: [PATCH] Made Rama_1301154203_if3907 Done --- .gitignore | 1 + nbproject/build-impl.xml | 21 ++-- nbproject/genfiles.properties | 4 +- nbproject/private/private.properties | 2 +- nbproject/private/private.xml | 13 ++- nbproject/project.properties | 2 +- src/ConsoleApp/ConnectionThread.java | 50 +++++++++ src/ConsoleApp/ConsoleApplication.java | 67 +++++++++++++ src/Driver/DriveClientConsole.java | 21 ++++ src/Driver/DriverClientGui.java | 20 ++++ src/Driver/DriverServer.java | 31 ++++++ src/chatGUI/ChatView.form | 72 +++++++++++++ src/chatGUI/ChatView.java | 134 +++++++++++++++++++++++++ src/chatGUI/JChatController.java | 61 +++++++++++ src/javaChat/ClientConnection.java | 2 +- src/javaChat/Connection.java | 2 +- src/javaChat/ServerConnection.java | 2 +- 17 files changed, 485 insertions(+), 20 deletions(-) create mode 100644 .gitignore create mode 100644 src/ConsoleApp/ConnectionThread.java create mode 100644 src/ConsoleApp/ConsoleApplication.java create mode 100644 src/Driver/DriveClientConsole.java create mode 100644 src/Driver/DriverClientGui.java create mode 100644 src/Driver/DriverServer.java create mode 100644 src/chatGUI/ChatView.form create mode 100644 src/chatGUI/ChatView.java create mode 100644 src/chatGUI/JChatController.java diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..f3d6549 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +/build/ \ No newline at end of file diff --git a/nbproject/build-impl.xml b/nbproject/build-impl.xml index 4abce43..f071bc4 100644 --- a/nbproject/build-impl.xml +++ b/nbproject/build-impl.xml @@ -46,8 +46,8 @@ is divided into following sections: - - + + @@ -76,7 +76,7 @@ is divided into following sections: - + @@ -156,6 +156,7 @@ is divided into following sections: + @@ -840,7 +841,7 @@ is divided into following sections: - + @@ -852,7 +853,7 @@ is divided into following sections: - + @@ -975,15 +976,15 @@ is divided into following sections: - + - + - + @@ -991,7 +992,7 @@ is divided into following sections: - + @@ -1186,7 +1187,7 @@ is divided into following sections: Must select one file in the IDE or set run.class - + Must select one file in the IDE or set applet.url diff --git a/nbproject/genfiles.properties b/nbproject/genfiles.properties index cb2d623..a1e02d5 100644 --- a/nbproject/genfiles.properties +++ b/nbproject/genfiles.properties @@ -4,5 +4,5 @@ build.xml.stylesheet.CRC32=8064a381@1.75.1.48 # This file is used by a NetBeans-based IDE to track changes in generated files such as build-impl.xml. # Do not edit this file. You may delete it but then the IDE will never regenerate such files for you. nbproject/build-impl.xml.data.CRC32=6d39ee20 -nbproject/build-impl.xml.script.CRC32=681df6e3 -nbproject/build-impl.xml.stylesheet.CRC32=05530350@1.79.1.48 +nbproject/build-impl.xml.script.CRC32=5c486f47 +nbproject/build-impl.xml.stylesheet.CRC32=830a3534@1.80.1.48 diff --git a/nbproject/private/private.properties b/nbproject/private/private.properties index 1b6c36a..7dc5a09 100644 --- a/nbproject/private/private.properties +++ b/nbproject/private/private.properties @@ -1,2 +1,2 @@ compile.on.save=true -user.properties.file=C:\\Users\\ANDITYAARIFIANTO\\AppData\\Roaming\\NetBeans\\8.1\\build.properties +user.properties.file=C:\\Users\\GL552JX\\AppData\\Roaming\\NetBeans\\8.2\\build.properties diff --git a/nbproject/private/private.xml b/nbproject/private/private.xml index 52e3867..343fb41 100644 --- a/nbproject/private/private.xml +++ b/nbproject/private/private.xml @@ -3,9 +3,16 @@ - file:/C:/Users/ANDITYAARIFIANTO/Documents/GitHub/Task_4/src/javaChat/ClientConnection.java - file:/C:/Users/ANDITYAARIFIANTO/Documents/GitHub/Task_4/src/javaChat/ServerConnection.java - file:/C:/Users/ANDITYAARIFIANTO/Documents/GitHub/Task_4/src/javaChat/Connection.java + file:/C:/Users/GL552JX/Desktop/New%20folder%20(2)/Task_4/src/Driver/DriveClientConsole.java + file:/C:/Users/GL552JX/Desktop/New%20folder%20(2)/Task_4/src/chatGUI/JChatController.java + file:/C:/Users/GL552JX/Desktop/New%20folder%20(2)/Task_4/src/chatGUI/ChatView.java + file:/C:/Users/GL552JX/Desktop/New%20folder%20(2)/Task_4/src/ConsoleApp/ConnectionThread.java + file:/C:/Users/GL552JX/Desktop/New%20folder%20(2)/Task_4/src/javaChat/Connection.java + file:/C:/Users/GL552JX/Desktop/New%20folder%20(2)/Task_4/src/javaChat/ClientConnection.java + file:/C:/Users/GL552JX/Desktop/New%20folder%20(2)/Task_4/src/ConsoleApp/ConsoleApplication.java + file:/C:/Users/GL552JX/Desktop/New%20folder%20(2)/Task_4/src/Driver/DriverClientGui.java + file:/C:/Users/GL552JX/Desktop/New%20folder%20(2)/Task_4/src/Driver/DriverServer.java + file:/C:/Users/GL552JX/Desktop/New%20folder%20(2)/Task_4/src/javaChat/ServerConnection.java diff --git a/nbproject/project.properties b/nbproject/project.properties index de16b77..1e9778d 100644 --- a/nbproject/project.properties +++ b/nbproject/project.properties @@ -53,7 +53,7 @@ javadoc.splitindex=true javadoc.use=true javadoc.version=false javadoc.windowtitle= -main.class=task.Task +main.class=Driver.DriveClientConsole manifest.file=manifest.mf meta.inf.dir=${src.dir}/META-INF mkdist.disabled=false diff --git a/src/ConsoleApp/ConnectionThread.java b/src/ConsoleApp/ConnectionThread.java new file mode 100644 index 0000000..0c5cc51 --- /dev/null +++ b/src/ConsoleApp/ConnectionThread.java @@ -0,0 +1,50 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package ConsoleApp; + +import java.io.IOException; +import java.net.Socket; +import javaChat.Connection; + +/** + * + * @author GL552JX + */ +public class ConnectionThread extends Thread { + + private Socket client; + private Connection connection; + + public ConnectionThread(Socket newClient) throws IOException{ + this.client = newClient; + connection = new Connection(client); + } + + public void run(){ + try { + connection.startChat(" Start The Chat "); + System.out.println(" ---------------- "); + System.out.println(" new cilent connected "); + System.out.println(" client information "); + System.out.println(connection.getClientInformation()); + + String inputan; + String message; + while((inputan = connection.readStream()) != null && inputan.equals("Quit")){ + message = "Client " + connection.getIpClient() + "Said : " + inputan; + System.out.println(message); + connection.sendToAll(message); + } + + message = "Client from IP : " + connection.getIpClient() + "Quit the chat room"; + System.out.println(message); + connection.sendToAll(message); + connection.disconnect(); + } catch (Exception e) { + System.out.println("Error"); + } + } +} diff --git a/src/ConsoleApp/ConsoleApplication.java b/src/ConsoleApp/ConsoleApplication.java new file mode 100644 index 0000000..89a7ce7 --- /dev/null +++ b/src/ConsoleApp/ConsoleApplication.java @@ -0,0 +1,67 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package ConsoleApp; + +import javaChat.ClientConnection; + +/** + * + * @author GL552JX + */ +public class ConsoleApplication { + + private ClientConnection client; + + public class ReadInput extends Thread{ + + public void run(){ + + try { + String inputKeyboard; + do { + System.out.println(">> "); + inputKeyboard = client.inputString(); + client.writeStream(inputKeyboard); + } while(!inputKeyboard.equals("Quit")); + client.disconnect(); + } catch (Exception e) { + System.out.println("Error"); + } + } + } + + public class WriteInput extends Thread{ + + public void run(){ + + try { + String inputan; + while ((inputan = client.readStream()) != null){ + System.out.println(inputan); + System.out.println(">>"); + } + } catch (Exception e) { + System.out.println("Error"); + } + } + } + + public void startChat(){ + try { + client = new ClientConnection(); + System.out.println("Input server IP : "); + String ip = client.inputString(); + client.connect(ip); + ReadInput in = new ReadInput(); + WriteInput out = new WriteInput(); + in.start(); + out.start(); + } catch (Exception e) { + System.out.println("Error"); + } + } +} + diff --git a/src/Driver/DriveClientConsole.java b/src/Driver/DriveClientConsole.java new file mode 100644 index 0000000..cfa90e8 --- /dev/null +++ b/src/Driver/DriveClientConsole.java @@ -0,0 +1,21 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package Driver; + +import ConsoleApp.ConsoleApplication; + +/** + * + * @author GL552JX + */ +public class DriveClientConsole { + + public static void main(String[] args) { + + ConsoleApplication ca = new ConsoleApplication(); + ca.startChat(); + } +} diff --git a/src/Driver/DriverClientGui.java b/src/Driver/DriverClientGui.java new file mode 100644 index 0000000..352b4a1 --- /dev/null +++ b/src/Driver/DriverClientGui.java @@ -0,0 +1,20 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package Driver; + +import chatGUI.JChatController; + +/** + * + * @author GL552JX + */ +public class DriverClientGui { + + public static void main(String[] args) { + + JChatController jcc = new JChatController(); + } +} diff --git a/src/Driver/DriverServer.java b/src/Driver/DriverServer.java new file mode 100644 index 0000000..fb08966 --- /dev/null +++ b/src/Driver/DriverServer.java @@ -0,0 +1,31 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package Driver; + +import ConsoleApp.ConnectionThread; +import javaChat.ServerConnection; + +/** + * + * @author GL552JX + */ +public class DriverServer { + + public static void main(String[] args) { + + try { + ServerConnection server = new ServerConnection(); + System.out.println("Server Information"); + System.out.println(server.getServerInformation()); + while (true) { + ConnectionThread connection = new ConnectionThread(server.getClient()); + connection.start(); + } + } catch (Exception e) { + System.out.println("Error"); + } + } +} diff --git a/src/chatGUI/ChatView.form b/src/chatGUI/ChatView.form new file mode 100644 index 0000000..a5a6552 --- /dev/null +++ b/src/chatGUI/ChatView.form @@ -0,0 +1,72 @@ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
diff --git a/src/chatGUI/ChatView.java b/src/chatGUI/ChatView.java new file mode 100644 index 0000000..1542e76 --- /dev/null +++ b/src/chatGUI/ChatView.java @@ -0,0 +1,134 @@ +package chatGUI; + +import java.awt.event.ActionListener; + +/** + * + * @author GL552JX + */ +public class ChatView extends javax.swing.JFrame { + + /** + * Creates new form JFrameChatView + */ + public ChatView() { + initComponents(); + } + + /** + * This method is called from within the constructor to initialize the form. + * WARNING: Do NOT modify this code. The content of this method is always + * regenerated by the Form Editor. + */ + @SuppressWarnings("unchecked") + // //GEN-BEGIN:initComponents + private void initComponents() { + + jScrollPane1 = new javax.swing.JScrollPane(); + txAreaChat = new javax.swing.JTextArea(); + txFieldChat = new javax.swing.JTextField(); + + setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); + + txAreaChat.setEditable(false); + txAreaChat.setColumns(20); + txAreaChat.setRows(5); + txAreaChat.setText("Input Server IP Address:"); + jScrollPane1.setViewportView(txAreaChat); + + txFieldChat.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + txFieldChatActionPerformed(evt); + } + }); + + javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); + getContentPane().setLayout(layout); + layout.setHorizontalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addContainerGap() + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(txFieldChat, javax.swing.GroupLayout.Alignment.TRAILING) + .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 380, Short.MAX_VALUE)) + .addContainerGap()) + ); + layout.setVerticalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addGap(16, 16, 16) + .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 178, javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addComponent(txFieldChat, javax.swing.GroupLayout.PREFERRED_SIZE, 45, javax.swing.GroupLayout.PREFERRED_SIZE) + .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + ); + + pack(); + }// //GEN-END:initComponents + + private void txFieldChatActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_txFieldChatActionPerformed + // TODO add your handling code here: + }//GEN-LAST:event_txFieldChatActionPerformed + + /** + * @param args the command line arguments + */ + public static void main(String args[]) { + /* Set the Nimbus look and feel */ + // + /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel. + * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html + */ + try { + for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) { + if ("Nimbus".equals(info.getName())) { + javax.swing.UIManager.setLookAndFeel(info.getClassName()); + break; + } + } + } catch (ClassNotFoundException ex) { + java.util.logging.Logger.getLogger(ChatView.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); + } catch (InstantiationException ex) { + java.util.logging.Logger.getLogger(ChatView.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); + } catch (IllegalAccessException ex) { + java.util.logging.Logger.getLogger(ChatView.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); + } catch (javax.swing.UnsupportedLookAndFeelException ex) { + java.util.logging.Logger.getLogger(ChatView.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); + } + // + // + + /* Create and display the form */ + java.awt.EventQueue.invokeLater(new Runnable() { + public void run() { + new ChatView().setVisible(true); + } + }); + } + + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JScrollPane jScrollPane1; + private javax.swing.JTextArea txAreaChat; + private javax.swing.JTextField txFieldChat; + // End of variables declaration//GEN-END:variables + + public void setTxAreaChat(String message) { + txAreaChat.append(message + "\n"); + } + + public Object getTxFieldChat() { + return txFieldChat; + } + + public String getStringChat() { + return txFieldChat.getText(); + } + + public void setTxFieldChat(String message) { + this.txFieldChat.setText(message); + } + + public void addListener(ActionListener e) { + txFieldChat.addActionListener(e); + } +} diff --git a/src/chatGUI/JChatController.java b/src/chatGUI/JChatController.java new file mode 100644 index 0000000..9f66964 --- /dev/null +++ b/src/chatGUI/JChatController.java @@ -0,0 +1,61 @@ +package chatGUI; + +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import javaChat.ClientConnection; +import java.io.IOException; +import javax.swing.text.View; + +/** + * + * @author GL552JX + */ +public class JChatController implements ActionListener{ + + private ChatView view; + private ClientConnection client; + + public JChatController() { + view = new ChatView(); + view.setVisible(true); + view.addListener(this); + client = null; + } + + public class WriteOutput extends Thread{ + + public void run(){ + String inputan; + try { + while((inputan = client.readStream()) != null){ + view.setTxAreaChat(inputan); + } + } catch (Exception e) { + System.out.println("Error"); + } + } + } + + public void actionPerformed(ActionEvent ae){ + + Object source = ae.getSource(); + + if (source.equals(view.getTxFieldChat())){ + if (client == null){ + try { + client = new ClientConnection(); + String ip = view.getStringChat(); + client.connect(ip); + WriteOutput w = new WriteOutput(); + w.start(); + } catch (Exception e) { + System.out.println("Error"); + } + }else{ + String input = view.getStringChat(); + client.writeStream(input); + view.setTxFieldChat(""); + } + } + } +} diff --git a/src/javaChat/ClientConnection.java b/src/javaChat/ClientConnection.java index e79488e..c4f294d 100644 --- a/src/javaChat/ClientConnection.java +++ b/src/javaChat/ClientConnection.java @@ -13,7 +13,7 @@ /** * - * @author dee + * @author GL552JX */ public class ClientConnection { diff --git a/src/javaChat/Connection.java b/src/javaChat/Connection.java index b049aaa..6e4abfa 100644 --- a/src/javaChat/Connection.java +++ b/src/javaChat/Connection.java @@ -17,7 +17,7 @@ /** * - * @author dee + * @author GL552JX */ public class Connection { diff --git a/src/javaChat/ServerConnection.java b/src/javaChat/ServerConnection.java index 8a1902e..4c3b57e 100644 --- a/src/javaChat/ServerConnection.java +++ b/src/javaChat/ServerConnection.java @@ -12,7 +12,7 @@ /** * - * @author dee + * @author GL552JX */ public class ServerConnection {