Advertisement
Guest User

Untitled

a guest
Nov 18th, 2017
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 11.43 KB | None | 0 0
  1. package chat_server;
  2.  
  3. import java.io.*;
  4. import java.net.*;
  5. import java.util.*;
  6.  
  7. public class server_frame extends javax.swing.JFrame
  8. {
  9. ArrayList clientOutputStreams;
  10. ArrayList<String> users;
  11.  
  12. public class ClientHandler implements Runnable
  13. {
  14. BufferedReader reader;
  15. Socket sock;
  16. PrintWriter client;
  17.  
  18. public ClientHandler(Socket clientSocket, PrintWriter user)
  19. {
  20. client = user;
  21. try
  22. {
  23. sock = clientSocket;
  24. InputStreamReader isReader = new InputStreamReader(sock.getInputStream());
  25. reader = new BufferedReader(isReader);
  26. }
  27. catch (Exception ex)
  28. {
  29. ta_chat.append("Unexpected error... \n");
  30. }
  31.  
  32. }
  33.  
  34. @Override
  35. public void run()
  36. {
  37. String message, connect = "Connect", disconnect = "Disconnect", chat = "Chat" ;
  38. String[] data;
  39.  
  40. try
  41. {
  42. while ((message = reader.readLine()) != null)
  43. {
  44. ta_chat.append("Received: " + message + "\n");
  45. data = message.split(":");
  46.  
  47. for (String token:data)
  48. {
  49. ta_chat.append(token + "\n");
  50. }
  51.  
  52. if (data[2].equals(connect))
  53. {
  54. tellEveryone((data[0] + ":" + data[1] + ":" + chat));
  55. userAdd(data[0]);
  56. }
  57. else if (data[2].equals(disconnect))
  58. {
  59. tellEveryone((data[0] + ":has disconnected." + ":" + chat));
  60. userRemove(data[0]);
  61. }
  62. else if (data[2].equals(chat))
  63. {
  64. tellEveryone(message);
  65. }
  66. else
  67. {
  68. ta_chat.append("No Conditions were met. \n");
  69. }
  70. }
  71. }
  72. catch (Exception ex)
  73. {
  74. ta_chat.append("Lost a connection. \n");
  75. ex.printStackTrace();
  76. clientOutputStreams.remove(client);
  77. }
  78. }
  79. }
  80.  
  81. public server_frame()
  82. {
  83. initComponents();
  84. }
  85.  
  86. @SuppressWarnings("unchecked")
  87. // <editor-fold defaultstate="collapsed" desc="Generated Code">
  88. private void initComponents() {
  89.  
  90. jScrollPane1 = new javax.swing.JScrollPane();
  91. ta_chat = new javax.swing.JTextArea();
  92. b_start = new javax.swing.JButton();
  93. b_end = new javax.swing.JButton();
  94. b_users = new javax.swing.JButton();
  95. b_clear = new javax.swing.JButton();
  96. lb_name = new javax.swing.JLabel();
  97.  
  98. setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
  99. setTitle("Chat - Server's frame");
  100. setName("server"); // NOI18N
  101. setResizable(false);
  102.  
  103. ta_chat.setColumns(20);
  104. ta_chat.setRows(5);
  105. jScrollPane1.setViewportView(ta_chat);
  106.  
  107. b_start.setText("START");
  108. b_start.addActionListener(new java.awt.event.ActionListener() {
  109. public void actionPerformed(java.awt.event.ActionEvent evt) {
  110. b_startActionPerformed(evt);
  111. }
  112. });
  113.  
  114. b_end.setText("END");
  115. b_end.addActionListener(new java.awt.event.ActionListener() {
  116. public void actionPerformed(java.awt.event.ActionEvent evt) {
  117. b_endActionPerformed(evt);
  118. }
  119. });
  120.  
  121. b_users.setText("Online Users");
  122. b_users.addActionListener(new java.awt.event.ActionListener() {
  123. public void actionPerformed(java.awt.event.ActionEvent evt) {
  124. b_usersActionPerformed(evt);
  125. }
  126. });
  127.  
  128. b_clear.setText("Clear");
  129. b_clear.addActionListener(new java.awt.event.ActionListener() {
  130. public void actionPerformed(java.awt.event.ActionEvent evt) {
  131. b_clearActionPerformed(evt);
  132. }
  133. });
  134.  
  135. lb_name.setText("TechWorld3g");
  136. lb_name.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0)));
  137.  
  138. javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
  139. getContentPane().setLayout(layout);
  140. layout.setHorizontalGroup(
  141. layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
  142. .addGroup(layout.createSequentialGroup()
  143. .addContainerGap()
  144. .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
  145. .addComponent(b_end, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
  146. .addComponent(b_start, javax.swing.GroupLayout.DEFAULT_SIZE, 75, Short.MAX_VALUE))
  147. .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
  148. .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
  149. .addComponent(b_clear, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
  150. .addComponent(b_users, javax.swing.GroupLayout.DEFAULT_SIZE, 103, Short.MAX_VALUE))
  151. .addGap(203, 203, 203))
  152. .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
  153. .addContainerGap(510, Short.MAX_VALUE)
  154. .addComponent(lb_name)
  155. .addGap(209, 209, 209))
  156. .addGroup(layout.createSequentialGroup()
  157. .addGap(70, 70, 70)
  158. .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 381, javax.swing.GroupLayout.PREFERRED_SIZE)
  159. .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
  160. );
  161. layout.setVerticalGroup(
  162. layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
  163. .addGroup(layout.createSequentialGroup()
  164. .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 363, Short.MAX_VALUE)
  165. .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
  166. .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
  167. .addComponent(b_start)
  168. .addComponent(b_users))
  169. .addGap(18, 18, 18)
  170. .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
  171. .addComponent(b_clear)
  172. .addComponent(b_end))
  173. .addGap(4, 4, 4)
  174. .addComponent(lb_name))
  175. );
  176.  
  177. pack();
  178. }// </editor-fold>
  179.  
  180. private void b_endActionPerformed(java.awt.event.ActionEvent evt) {
  181. try
  182. {
  183. Thread.sleep(5000); //5000 milliseconds is five second.
  184. }
  185. catch(InterruptedException ex) {Thread.currentThread().interrupt();}
  186.  
  187. tellEveryone("Server:is stopping and all users will be disconnected.\n:Chat");
  188. ta_chat.append("Server stopping... \n");
  189.  
  190. ta_chat.setText("");
  191. }
  192.  
  193. private void b_startActionPerformed(java.awt.event.ActionEvent evt) {
  194. Thread starter = new Thread(new ServerStart());
  195. starter.start();
  196.  
  197. ta_chat.append("Server started...\n");
  198. }
  199.  
  200. private void b_usersActionPerformed(java.awt.event.ActionEvent evt) {
  201. ta_chat.append("\n Online users : \n");
  202. for (String current_user : users)
  203. {
  204. ta_chat.append(current_user);
  205. ta_chat.append("\n");
  206. }
  207.  
  208. }
  209.  
  210. private void b_clearActionPerformed(java.awt.event.ActionEvent evt) {
  211. ta_chat.setText("");
  212. }
  213.  
  214. public static void main(String args[])
  215. {
  216. java.awt.EventQueue.invokeLater(new Runnable()
  217. {
  218. @Override
  219. public void run() {
  220. new server_frame().setVisible(true);
  221. }
  222. });
  223. }
  224.  
  225. public class ServerStart implements Runnable
  226. {
  227. @Override
  228. public void run()
  229. {
  230. clientOutputStreams = new ArrayList();
  231. users = new ArrayList();
  232.  
  233. try
  234. {
  235. ServerSocket serverSock = new ServerSocket(2222);
  236.  
  237. while (true)
  238. {
  239. Socket clientSock = serverSock.accept();
  240. PrintWriter writer = new PrintWriter(clientSock.getOutputStream());
  241. clientOutputStreams.add(writer);
  242.  
  243. Thread listener = new Thread(new ClientHandler(clientSock, writer));
  244. listener.start();
  245. ta_chat.append("Got a connection. \n");
  246. }
  247. }
  248. catch (Exception ex)
  249. {
  250. ta_chat.append("Error making a connection. \n");
  251. }
  252. }
  253. }
  254.  
  255. public void userAdd (String data)
  256. {
  257. String message, add = ": :Connect", done = "Server: :Done", name = data;
  258. ta_chat.append("Before " + name + " added. \n");
  259. users.add(name);
  260. ta_chat.append("After " + name + " added. \n");
  261. String[] tempList = new String[(users.size())];
  262. users.toArray(tempList);
  263.  
  264. for (String token:tempList)
  265. {
  266. message = (token + add);
  267. tellEveryone(message);
  268. }
  269. tellEveryone(done);
  270. }
  271.  
  272. public void userRemove (String data)
  273. {
  274. String message, add = ": :Connect", done = "Server: :Done", name = data;
  275. users.remove(name);
  276. String[] tempList = new String[(users.size())];
  277. users.toArray(tempList);
  278.  
  279. for (String token:tempList)
  280. {
  281. message = (token + add);
  282. tellEveryone(message);
  283. }
  284. tellEveryone(done);
  285. }
  286.  
  287. public void tellEveryone(String message)
  288. {
  289. Iterator it = clientOutputStreams.iterator();
  290.  
  291. while (it.hasNext())
  292. {
  293. try
  294. {
  295. PrintWriter writer = (PrintWriter) it.next();
  296. writer.println(message);
  297. ta_chat.append("Sending: " + message + "\n");
  298. writer.flush();
  299. ta_chat.setCaretPosition(ta_chat.getDocument().getLength());
  300.  
  301. }
  302. catch (Exception ex)
  303. {
  304. ta_chat.append("Error telling everyone. \n");
  305. }
  306. }
  307. }
  308.  
  309. // Variables declaration - do not modify
  310. private javax.swing.JButton b_clear;
  311. private javax.swing.JButton b_end;
  312. private javax.swing.JButton b_start;
  313. private javax.swing.JButton b_users;
  314. private javax.swing.JScrollPane jScrollPane1;
  315. private javax.swing.JLabel lb_name;
  316. private javax.swing.JTextArea ta_chat;
  317. // End of variables declaration
  318. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement