Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package me.nrubin29.lmsdchat.client;
- import me.nrubin29.lmsdchat.server.Server;
- import javax.swing.*;
- import javax.swing.text.SimpleAttributeSet;
- import javax.swing.text.StyleConstants;
- import java.awt.*;
- import java.awt.event.KeyEvent;
- import java.awt.event.KeyListener;
- import java.io.ObjectInputStream;
- import java.io.ObjectOutputStream;
- import java.net.Socket;
- public class Client extends JFrame {
- public enum Writer {
- CLIENT(Color.GREEN.darker()),
- OTHER_USER(Color.BLUE),
- SERVER(Color.GRAY),
- ADMIN(Color.ORANGE),
- ERROR(Color.RED),
- PLAIN(Color.BLACK);
- private SimpleAttributeSet set;
- Writer(Color fore) {
- set = new SimpleAttributeSet();
- StyleConstants.setForeground(set, fore);
- }
- public SimpleAttributeSet getSet() {
- return set;
- }
- }
- private JTextPane area = new JTextPane();
- private JTextField input = new JTextField("Input", 65);
- private Socket socket;
- private Thread reader;
- private ObjectInputStream inputStream;
- private ObjectOutputStream outputStream;
- private String userName;
- public Client() {
- super("LMSDChat");
- new Thread(new Runnable() {
- @Override
- public void run() {
- Server.getInstance().start();
- }
- }).start();
- Thread.setDefaultUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() {
- public void uncaughtException(Thread t, Throwable e) {
- error(new Exception(e));
- }
- });
- getContentPane().setLayout(new BoxLayout(getContentPane(), BoxLayout.Y_AXIS));
- input.addKeyListener(new KeyListener() {
- public void keyPressed(KeyEvent e) {
- if (e.getKeyCode() == KeyEvent.VK_ENTER) {
- try {
- String message = input.getText();
- if (message.equals("")) return;
- input.setText("");
- input.setEditable(false);
- outputStream.writeObject(message);
- input.setEditable(true);
- } catch (Exception ex) {
- error(ex);
- }
- }
- }
- public void keyTyped(KeyEvent e) {
- }
- public void keyReleased(KeyEvent e) {
- }
- });
- area.setEditable(false);
- JScrollPane pane = new JScrollPane(area);
- pane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
- pane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
- pane.setPreferredSize(new Dimension(640, 460));
- add(pane);
- add(input);
- Dimension DIM = new Dimension(640, 480);
- setPreferredSize(DIM);
- setSize(DIM);
- setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
- setLocationRelativeTo(null);
- setResizable(true);
- pack();
- setVisible(true);
- userName = JOptionPane.showInputDialog(null, "Please enter the username you want to use.", "Username", JOptionPane.QUESTION_MESSAGE);
- connect();
- input.requestFocus();
- }
- public static void main(String[] args) {
- new Client();
- }
- private void connect() {
- try {
- socket = new Socket("127.0.0.1", 26970);
- System.out.println(socket.isBound() + " | " + socket.isConnected());
- inputStream = new ObjectInputStream(socket.getInputStream());
- System.out.println(inputStream != null);
- outputStream = new ObjectOutputStream(socket.getOutputStream());
- outputStream.writeObject(userName);
- outputStream.writeObject("Test");
- System.out.println(outputStream != null);
- reader = new Thread(new Runnable() {
- public void run() {
- while (true) {
- try {
- String message = (String) inputStream.readObject();
- if (message != null) {
- write(message);
- if (!Client.this.isFocused()) Notification.makeNotification(message);
- }
- }
- catch (Exception e) { error(e); }
- }
- }
- });
- reader.start();
- }
- catch (Exception e) { error(e); }
- }
- private void write(Writer writer, String... lines) {
- try {
- if (lines.length == 0) return;
- for (String line : lines) {
- area.getStyledDocument().insertString(area.getStyledDocument().getLength(), line.substring(0, line.indexOf(":")), writer.getSet());
- area.getStyledDocument().insertString(area.getStyledDocument().getLength(), line.substring(line.indexOf(":")) + "\n", Writer.PLAIN.getSet());
- }
- area.getStyledDocument().insertString(area.getStyledDocument().getLength(), "\n", writer.getSet());
- }
- catch (Exception e) { error(e); }
- }
- private void write(String... lines) {
- for (String line : lines) {
- if (line.startsWith("{")) {
- Writer writer = Writer.valueOf(line.substring(line.indexOf("{"), line.indexOf("}")));
- write(writer, line);
- }
- else write(Writer.SERVER, line);
- }
- }
- private void error(Exception e) {
- write(Writer.ERROR, "An error has occurred: " + e.getLocalizedMessage());
- e.printStackTrace();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment