[ Web Proxy ]
URL:
Viewing: https://raw.githubusercontent.com/biblelamp/JavaExercises/master/Java%202/J2Lesson8/ChatClient.java [Back]  [Original]

/**
 * Java. Level 2. Lesson 8
 * Simple chat client
 * To make jar file:
 *  > create manifest.txt file with 1 line
 *      Main-Class: ChatClient
 *  > jar -cvmf manifest.txt ChatClient.jar
 *      ChatClient*.class IConstants.class
 *
 * @author Sergey Iryupin
 * @version 0.2.4 dated Jun 29, 2018
 */
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.net.*;
import java.io.*;

class ChatClient extends JFrame implements ActionListener, IConstants {

    final String TITLE_OF_PROGRAM = "Client for net.chat";
    final int WINDOW_WIDTH = 350;
    final int WINDOW_HEIGHT = 450;
    final String BTN_ENTER = "Enter";
    final String AUTH_INVITATION = "You must login using command\n"+
        "auth  ";

    JTextArea dialogue; // area for dialog
    JTextField message; // field for entering messages
    boolean isAuthorized; // flag of authorization

    Socket socket;
    PrintWriter writer;
    BufferedReader reader;

    public static void main(String[] args) {
        new ChatClient();
    }

    /**
     * Constructor:
     * Creating a window and all the necessary elements on it
     */
    ChatClient() {
        setTitle(TITLE_OF_PROGRAM);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setSize(WINDOW_WIDTH, WINDOW_HEIGHT);
        setLocationRelativeTo(null); // to the center
        addWindowListener(new WindowAdapter() {
            @Override
            public void windowClosing(WindowEvent e) {
                super.windowClosing(e);
                try {
                    writer.println(EXIT_COMMAND);
                    writer.flush();
                } catch (Exception ex) {}
            }
        });
        // area for dialog
        dialogue = new JTextArea();
        dialogue.setLineWrap(true);
        dialogue.setEditable(false);
        JScrollPane scrollBar = new JScrollPane(dialogue);
        // panel for connamd field and button
        JPanel bp = new JPanel();
        bp.setLayout(new BoxLayout(bp, BoxLayout.X_AXIS));
        message = new JTextField();
        message.addActionListener(this);
        JButton enter = new JButton(BTN_ENTER);
        enter.addActionListener(this);
        // adding all elements to the window
        bp.add(message);
        bp.add(enter);
        add(BorderLayout.CENTER, scrollBar);
        add(BorderLayout.SOUTH, bp);
        setVisible(true);
        Connect(); // connect to the Server
    }

    /**
     * Connect to the Server
     */
    void Connect() {
        dialogue.append(AUTH_INVITATION + "\n");
        isAuthorized = false;
        try {
            socket = new Socket(SERVER_ADDR, SERVER_PORT);
            writer = new PrintWriter(socket.getOutputStream());
            reader = new BufferedReader(
                new InputStreamReader(socket.getInputStream()));
            new Thread(new ServerListener()).start(); // start Server listener
        } catch (Exception ex) { 
            dialogue.append(ex.getMessage() + "\n");
        }
    }

    /**
     * ServerListener: get messages from Server
     */
    class ServerListener implements Runnable {
        String message;
        public void run() {
            try {
                while ((message = reader.readLine()) != null) {
                    if (message.startsWith("Hello, ")) // check authorisation
                        isAuthorized = true;
                    if (!message.equals("\0") && isAuthorized)
                        dialogue.append(message + "\n");
                    if (message.equals(AUTH_FAIL))
                        System.exit(-1); // terminate client
                }
            } catch (Exception ex) {
                System.out.println(ex.getMessage());
            }
            System.exit(-1); // terminate client
        }
    }

    /**
     * Listener of events from message field and enter button
     */
    @Override
    public void actionPerformed(ActionEvent event) {
        if (message.getText().trim().length() > 0) {
            try {
                writer.println(message.getText());
                writer.flush();
            } catch (Exception ex) {}
        }
        message.setText("");
        message.requestFocusInWindow();
    }
}

Web Proxy Viewer  |  New URL  |  Original Page