import java.net.*;
import javax.swing.BorderFactory;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.SwingConstants;
import java.awt.BorderLayout;
import java.awt.Font;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.io.*;
public class ClientSide extends JFrame{
Socket clientSocket;
BufferedReader clientBuffer;
PrintWriter clientOut;
//Declare Component
private JLabel clientHeading = new JLabel("Client Messenger");
private JTextArea clientMessagTextArea = new JTextArea();
private JTextField clientMessagTextFieldInput = new JTextField();
private Font clientFont = new Font("Roboto",Font.PLAIN,20);
public ClientSide() {
try {
System.out.println("request sended to server");
clientSocket = new Socket("127.0.0.1", 7778);
System.out.println("connection established");
clientBuffer = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
// for writing data
clientOut = new PrintWriter(clientSocket.getOutputStream());
createClientGUI();
handleClientEvents();
startClientDataReading();
//startClientDataWriting();
} catch (Exception e) {
e.printStackTrace();
}
}
private void handleClientEvents(){
clientMessagTextFieldInput.addKeyListener(new KeyListener() {
@Override
public void keyTyped(KeyEvent e) {
}
@Override
public void keyPressed(KeyEvent e) {
}
@Override
public void keyReleased(KeyEvent e) {
//System.out.println("Key Released "+e.getKeyCode());
if(e.getKeyCode() == 10){
//System.out.println(("you have pressed enter button"));
String clientContentToSend = clientMessagTextFieldInput.getText();
clientMessagTextArea.append("Me:"+clientContentToSend+"\n");
clientOut.println(clientContentToSend);
clientOut.flush();
clientMessagTextFieldInput.setText("");
clientMessagTextFieldInput.requestFocus();
}
}
});
}
private void createClientGUI(){
this.setTitle("Client");
this.setSize(600,600);
this.setLocationRelativeTo(null);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//components code
clientHeading.setFont(clientFont);
clientMessagTextArea.setFont(clientFont);
clientMessagTextFieldInput.setFont(clientFont);
clientHeading.setIcon(new ImageIcon("chatlogo.png"));
clientHeading.setHorizontalTextPosition(SwingConstants.CENTER);
clientHeading.setVerticalTextPosition(SwingConstants.BOTTOM);
clientHeading.setHorizontalAlignment(SwingConstants.CENTER);
clientHeading.setBorder(BorderFactory.createEmptyBorder(20,20,20,20));
clientMessagTextArea.setEditable(false);
clientMessagTextFieldInput.setHorizontalAlignment(SwingConstants.CENTER);
//frame layout
this.setLayout(new BorderLayout());
//adding components
this.add(clientHeading,BorderLayout.NORTH);
JScrollPane clientJScrollPane = new JScrollPane(clientMessagTextArea);
this.add(clientJScrollPane,BorderLayout.CENTER);
this.add(clientMessagTextFieldInput,BorderLayout.SOUTH);
this.setVisible(true);
}
public void startClientDataReading() {
// thread - will give data after reading
Runnable ClientRun1 = () -> {
System.out.println("started reading");
try {
while (!clientSocket.isClosed()) {
String message = clientBuffer.readLine();
if (message.equals("exit")) {
System.out.println("Server ended the chat");
JOptionPane.showMessageDialog(this, "Server ended the chat");
clientMessagTextFieldInput.setEnabled(false);
clientSocket.close();
break;
}
//System.out.println("Server : " + message);
clientMessagTextArea.append("Server : " + message+"\n");
}
}catch (Exception e) {
//e.printStackTrace();
System.out.println("connection is closed");
}
};
new Thread(ClientRun1).start();
}
public void startClientDataWriting() {
System.out.println("started writing");
// thread - will take data from user and will send to the client
Runnable ClientRun2 = () -> {
try {
while (true) {
BufferedReader ClientBufferedReader = new BufferedReader(new InputStreamReader(System.in));
String ClientContent = ClientBufferedReader.readLine();
clientOut.println(ClientContent);
clientOut.flush();
if(ClientContent.equals("exit")){
clientSocket.close();
break;
}
}
System.out.println("connection is closed");
} catch (Exception e) {
e.printStackTrace();
//System.out.println("connection closed");
}
};
new Thread(ClientRun2).start();
}
public static void main(String[] args) {
System.out.println("this is client side..");
new ClientSide();
}
}