nrubin29

Untitled

Sep 10th, 2013
172
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.76 KB | None | 0 0
  1. package me.nrubin29.lmsdchat.client;
  2.  
  3. import me.nrubin29.lmsdchat.server.Server;
  4.  
  5. import javax.swing.*;
  6. import javax.swing.text.SimpleAttributeSet;
  7. import javax.swing.text.StyleConstants;
  8. import java.awt.*;
  9. import java.awt.event.KeyEvent;
  10. import java.awt.event.KeyListener;
  11. import java.io.ObjectInputStream;
  12. import java.io.ObjectOutputStream;
  13. import java.net.Socket;
  14.  
  15. public class Client extends JFrame {
  16.  
  17. public enum Writer {
  18. CLIENT(Color.GREEN.darker()),
  19. OTHER_USER(Color.BLUE),
  20. SERVER(Color.GRAY),
  21. ADMIN(Color.ORANGE),
  22. ERROR(Color.RED),
  23. PLAIN(Color.BLACK);
  24.  
  25. private SimpleAttributeSet set;
  26.  
  27. Writer(Color fore) {
  28. set = new SimpleAttributeSet();
  29. StyleConstants.setForeground(set, fore);
  30. }
  31.  
  32. public SimpleAttributeSet getSet() {
  33. return set;
  34. }
  35. }
  36.  
  37. private JTextPane area = new JTextPane();
  38. private JTextField input = new JTextField("Input", 65);
  39.  
  40. private Socket socket;
  41. private Thread reader;
  42. private ObjectInputStream inputStream;
  43. private ObjectOutputStream outputStream;
  44. private String userName;
  45.  
  46. public Client() {
  47. super("LMSDChat");
  48.  
  49. new Thread(new Runnable() {
  50. @Override
  51. public void run() {
  52. Server.getInstance().start();
  53. }
  54. }).start();
  55.  
  56. Thread.setDefaultUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() {
  57. public void uncaughtException(Thread t, Throwable e) {
  58. error(new Exception(e));
  59. }
  60. });
  61.  
  62. getContentPane().setLayout(new BoxLayout(getContentPane(), BoxLayout.Y_AXIS));
  63.  
  64. input.addKeyListener(new KeyListener() {
  65. public void keyPressed(KeyEvent e) {
  66. if (e.getKeyCode() == KeyEvent.VK_ENTER) {
  67. try {
  68. String message = input.getText();
  69. if (message.equals("")) return;
  70.  
  71. input.setText("");
  72. input.setEditable(false);
  73.  
  74. outputStream.writeObject(message);
  75.  
  76. input.setEditable(true);
  77. } catch (Exception ex) {
  78. error(ex);
  79. }
  80. }
  81. }
  82.  
  83. public void keyTyped(KeyEvent e) {
  84. }
  85.  
  86. public void keyReleased(KeyEvent e) {
  87. }
  88. });
  89.  
  90. area.setEditable(false);
  91.  
  92. JScrollPane pane = new JScrollPane(area);
  93. pane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
  94. pane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
  95. pane.setPreferredSize(new Dimension(640, 460));
  96.  
  97. add(pane);
  98. add(input);
  99.  
  100. Dimension DIM = new Dimension(640, 480);
  101. setPreferredSize(DIM);
  102. setSize(DIM);
  103. setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
  104. setLocationRelativeTo(null);
  105. setResizable(true);
  106. pack();
  107. setVisible(true);
  108.  
  109. userName = JOptionPane.showInputDialog(null, "Please enter the username you want to use.", "Username", JOptionPane.QUESTION_MESSAGE);
  110.  
  111. connect();
  112.  
  113. input.requestFocus();
  114. }
  115.  
  116. public static void main(String[] args) {
  117. new Client();
  118. }
  119.  
  120. private void connect() {
  121. try {
  122. socket = new Socket("127.0.0.1", 26970);
  123. System.out.println(socket.isBound() + " | " + socket.isConnected());
  124.  
  125. inputStream = new ObjectInputStream(socket.getInputStream());
  126. System.out.println(inputStream != null);
  127.  
  128. outputStream = new ObjectOutputStream(socket.getOutputStream());
  129. outputStream.writeObject(userName);
  130. outputStream.writeObject("Test");
  131. System.out.println(outputStream != null);
  132.  
  133. reader = new Thread(new Runnable() {
  134. public void run() {
  135. while (true) {
  136. try {
  137. String message = (String) inputStream.readObject();
  138. if (message != null) {
  139. write(message);
  140. if (!Client.this.isFocused()) Notification.makeNotification(message);
  141. }
  142. }
  143. catch (Exception e) { error(e); }
  144. }
  145. }
  146. });
  147.  
  148. reader.start();
  149. }
  150. catch (Exception e) { error(e); }
  151. }
  152.  
  153. private void write(Writer writer, String... lines) {
  154. try {
  155. if (lines.length == 0) return;
  156.  
  157. for (String line : lines) {
  158. area.getStyledDocument().insertString(area.getStyledDocument().getLength(), line.substring(0, line.indexOf(":")), writer.getSet());
  159. area.getStyledDocument().insertString(area.getStyledDocument().getLength(), line.substring(line.indexOf(":")) + "\n", Writer.PLAIN.getSet());
  160. }
  161. area.getStyledDocument().insertString(area.getStyledDocument().getLength(), "\n", writer.getSet());
  162. }
  163. catch (Exception e) { error(e); }
  164. }
  165.  
  166. private void write(String... lines) {
  167. for (String line : lines) {
  168. if (line.startsWith("{")) {
  169. Writer writer = Writer.valueOf(line.substring(line.indexOf("{"), line.indexOf("}")));
  170. write(writer, line);
  171. }
  172. else write(Writer.SERVER, line);
  173. }
  174. }
  175.  
  176. private void error(Exception e) {
  177. write(Writer.ERROR, "An error has occurred: " + e.getLocalizedMessage());
  178. e.printStackTrace();
  179. }
  180. }
Advertisement
Add Comment
Please, Sign In to add comment