Guest User

Untitled

a guest
Jan 9th, 2018
83
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 25.38 KB | None | 0 0
  1. public class client_frame extends JFrame {
  2. String username, address = "localhost";
  3. ArrayList<String> users = new ArrayList();
  4. int port = 2222;
  5. Boolean isConnected = false;
  6.  
  7. Socket sock;
  8. BufferedReader reader;
  9. PrintWriter writer;
  10.  
  11. public void ListenThread() {
  12. Thread IncomingReader = new Thread(new IncomingReader());
  13. IncomingReader.start();
  14. }
  15.  
  16. public void userAdd(String data) {
  17. users.add(data);
  18. }
  19.  
  20. public void userRemove(String data){
  21. ta_chat.append(data + " is now offline.n");
  22. }
  23.  
  24. public void writeUsers(){
  25. String[] tempList = new String[(users.size())];
  26. users.toArray(tempList);
  27. for (String token:tempList)
  28. {
  29. //users.append(token + "n");
  30. }
  31. }
  32.  
  33. public void sendDisconnect() {
  34. String bye = (username + ": :Disconnect");
  35. try{
  36. writer.println(bye);
  37. writer.flush();
  38. } catch (Exception e) {
  39. ta_chat.append("Could not send Disconnect message.n");
  40. }
  41. }
  42.  
  43. public void Disconnect() {
  44. try {
  45. ta_chat.append("Disconnected.n");
  46. sock.close();
  47. } catch(Exception ex) {
  48. ta_chat.append("Failed to disconnect. n");
  49. }
  50. isConnected = false;
  51. tf_username.setEditable(true);
  52. }
  53.  
  54. public client_frame() {
  55. initComponents();
  56. }
  57.  
  58. public class IncomingReader implements Runnable{
  59. public void run() {
  60. String[] data;
  61. String stream, done = "Done", connect = "Connect", disconnect = "Disconnect", chat = "Chat";
  62.  
  63. try {
  64. while ((stream = reader.readLine()) != null) {
  65. data = stream.split(":");
  66.  
  67. if (data[2].equals(chat)) {
  68. ta_chat.append(data[0] + ": " + data[1] + "n");
  69. ta_chat.setCaretPosition(ta_chat.getDocument().getLength());
  70. }
  71. else if (data[2].equals(connect)){
  72. ta_chat.removeAll();
  73. userAdd(data[0]);
  74. }
  75. else if (data[2].equals(disconnect)) {
  76. userRemove(data[0]);
  77. }
  78. else if (data[2].equals(done)) {
  79. //users.setText("");
  80. writeUsers();
  81. users.clear();
  82. }
  83. }
  84. }catch(Exception ex) { }
  85. }
  86. }
  87.  
  88. @SuppressWarnings("unchecked")
  89. // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
  90. private void initComponents() {
  91. lb_address = new JLabel();
  92. tf_address = new JTextField();
  93. lb_port = new JLabel();
  94. tf_port = new JTextField();
  95. lb_username = new JLabel();
  96. tf_username = new JTextField();
  97. lb_password = new JLabel();
  98. tf_password = new JTextField();
  99. b_connect = new JButton();
  100. b_disconnect = new JButton();
  101. b_anonymous = new JButton();
  102. jScrollPane1 = new JScrollPane();
  103. ta_chat = new JTextArea();
  104. tf_chat = new JTextField();
  105. b_send = new JButton();
  106. lb_name = new JLabel();
  107.  
  108. setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
  109. setTitle("Chat - Client's frame");
  110. setName("client"); // NOI18N
  111. setResizable(false);
  112. lb_address.setText("Address : ");
  113. tf_address.setText("localhost");
  114. tf_address.addActionListener(new java.awt.event.ActionListener() {
  115. public void actionPerformed(java.awt.event.ActionEvent evt) {
  116. tf_addressActionPerformed(evt);
  117. }
  118. });
  119.  
  120. lb_port.setText("Port :");
  121.  
  122. tf_port.setText("2222");
  123. tf_port.addActionListener(new java.awt.event.ActionListener() {
  124. public void actionPerformed(java.awt.event.ActionEvent evt) {
  125. tf_portActionPerformed(evt);
  126. }
  127. });
  128.  
  129. lb_username.setText("Username :");
  130. tf_username.addActionListener(new java.awt.event.ActionListener() {
  131. public void actionPerformed(java.awt.event.ActionEvent evt) {
  132. tf_usernameActionPerformed(evt);
  133. }
  134. });
  135. lb_password.setText("Password : ");
  136. b_connect.setText("Connect");
  137. b_connect.addActionListener(new java.awt.event.ActionListener() {
  138. public void actionPerformed(java.awt.event.ActionEvent evt) {
  139. b_connectActionPerformed(evt);
  140. }
  141. });
  142.  
  143. b_disconnect.setText("Disconnect");
  144. b_disconnect.addActionListener(new java.awt.event.ActionListener() {
  145. public void actionPerformed(java.awt.event.ActionEvent evt) {
  146. b_disconnectActionPerformed(evt);
  147. }
  148. });
  149.  
  150. b_anonymous.setText("Anonymous Login");
  151. b_anonymous.addActionListener(new java.awt.event.ActionListener() {
  152. public void actionPerformed(java.awt.event.ActionEvent evt) {
  153. b_anonymousActionPerformed(evt);
  154. }
  155. });
  156. ta_chat.setColumns(20);
  157. ta_chat.setRows(5);
  158. jScrollPane1.setViewportView(ta_chat);
  159. b_send.setText("SEND");
  160. b_send.addActionListener(new java.awt.event.ActionListener() {
  161. public void actionPerformed(java.awt.event.ActionEvent evt) {
  162. b_sendActionPerformed(evt);
  163. }});
  164.  
  165. lb_name.setText("TechWorld3g");
  166. lb_name.setBorder(BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0)));
  167. GroupLayout layout = new GroupLayout(getContentPane());
  168. getContentPane().setLayout(layout);
  169. layout.setHorizontalGroup(
  170. layout.createParallelGroup(GroupLayout.Alignment.LEADING)
  171. .addGroup(layout.createSequentialGroup()
  172. .addContainerGap()
  173. .addGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING)
  174. .addGroup(layout.createSequentialGroup()
  175. .addComponent(tf_chat, GroupLayout.PREFERRED_SIZE, 352, GroupLayout.PREFERRED_SIZE)
  176. .addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
  177. .addComponent(b_send, GroupLayout.DEFAULT_SIZE, 111, Short.MAX_VALUE))
  178. .addComponent(jScrollPane1)
  179. .addGroup(layout.createSequentialGroup()
  180. .addGroup(layout.createParallelGroup(GroupLayout.Alignment.TRAILING, false)
  181. .addComponent(lb_username, GroupLayout.DEFAULT_SIZE, 62, Short.MAX_VALUE)
  182. .addComponent(lb_address, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
  183. .addGap(18, 18, 18)
  184. .addGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING, false)
  185. .addComponent(tf_address, GroupLayout.DEFAULT_SIZE, 89, Short.MAX_VALUE)
  186. .addComponent(tf_username))
  187. .addGap(18, 18, 18)
  188. .addGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING, false)
  189. .addComponent(lb_password, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
  190. .addComponent(lb_port, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
  191. .addPreferredGap(LayoutStyle.ComponentPlacement.UNRELATED)
  192. .addGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING, false)
  193. .addComponent(tf_password)
  194. .addComponent(tf_port, GroupLayout.DEFAULT_SIZE, 50, Short.MAX_VALUE))
  195. .addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
  196. .addGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING)
  197. .addGroup(layout.createSequentialGroup()
  198. .addComponent(b_connect)
  199. .addGap(2, 2, 2)
  200. .addComponent(b_disconnect)
  201. .addGap(0, 0, Short.MAX_VALUE))
  202. .addComponent(b_anonymous, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))))
  203. .addContainerGap())
  204. .addGroup(GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
  205. .addContainerGap(GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
  206. .addComponent(lb_name)
  207. .addGap(201, 201, 201))
  208. );
  209. layout.setVerticalGroup(
  210. layout.createParallelGroup(GroupLayout.Alignment.LEADING)
  211. .addGroup(layout.createSequentialGroup()
  212. .addContainerGap()
  213. .addGroup(layout.createParallelGroup(GroupLayout.Alignment.BASELINE)
  214. .addComponent(lb_address)
  215. .addComponent(tf_address, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
  216. .addComponent(lb_port)
  217. .addComponent(tf_port, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
  218. .addComponent(b_anonymous))
  219. .addPreferredGap(LayoutStyle.ComponentPlacement.UNRELATED)
  220. .addGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING, false)
  221. .addComponent(tf_username)
  222. .addComponent(tf_password)
  223. .addGroup(layout.createParallelGroup(GroupLayout.Alignment.BASELINE)
  224. .addComponent(lb_username)
  225. .addComponent(lb_password)
  226. .addComponent(b_connect)
  227. .addComponent(b_disconnect)))
  228. .addPreferredGap(LayoutStyle.ComponentPlacement.UNRELATED)
  229. .addComponent(jScrollPane1, GroupLayout.PREFERRED_SIZE, 310, GroupLayout.PREFERRED_SIZE)
  230. .addPreferredGap(LayoutStyle.ComponentPlacement.UNRELATED)
  231. .addGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING)
  232. .addComponent(tf_chat)
  233. .addComponent(b_send, GroupLayout.DEFAULT_SIZE, 31, Short.MAX_VALUE))
  234. .addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
  235. .addComponent(lb_name))
  236. );
  237.  
  238. pack();
  239. }// </editor-fold>//GEN-END:initComponents
  240.  
  241. private void tf_addressActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_tf_addressActionPerformed
  242. }//GEN-LAST:event_tf_addressActionPerformed
  243. private void tf_portActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_tf_portActionPerformed
  244. }//GEN-LAST:event_tf_portActionPerformed
  245. private void tf_usernameActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_tf_usernameActionPerformed
  246. }//GEN-LAST:event_tf_usernameActionPerformed
  247. private void b_connectActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_b_connectActionPerformed
  248. if (isConnected == false)
  249. {
  250. username = tf_username.getText();
  251. tf_username.setEditable(false);
  252.  
  253. try
  254. {
  255. sock = new Socket(address, port);
  256. InputStreamReader streamreader = new InputStreamReader(sock.getInputStream());
  257. reader = new BufferedReader(streamreader);
  258. writer = new PrintWriter(sock.getOutputStream());
  259. writer.println(username + ":has connected.:Connect");
  260. writer.flush();
  261. isConnected = true;
  262. }
  263. catch (Exception ex)
  264. {
  265. ta_chat.append("Cannot Connect! Try Again. n");
  266. tf_username.setEditable(true);
  267. }
  268.  
  269. ListenThread();
  270.  
  271. } else if (isConnected == true)
  272. {
  273. ta_chat.append("You are already connected. n");
  274. }
  275. }//GEN-LAST:event_b_connectActionPerformed
  276.  
  277. private void b_disconnectActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_b_disconnectActionPerformed
  278. sendDisconnect();
  279. Disconnect();
  280. }//GEN-LAST:event_b_disconnectActionPerformed
  281.  
  282. private void b_anonymousActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_b_anonymousActionPerformed
  283. tf_username.setText("");
  284. if (isConnected == false) {
  285. String anon="anon";
  286. Random generator = new Random();
  287. int i = generator.nextInt(999) + 1;
  288. String is=String.valueOf(i);
  289. anon=anon.concat(is);
  290. username=anon;
  291.  
  292. tf_username.setText(anon);
  293. tf_username.setEditable(false);
  294.  
  295. try {
  296. sock = new Socket(address, port);
  297. InputStreamReader streamreader = new InputStreamReader(sock.getInputStream());
  298. reader = new BufferedReader(streamreader);
  299. writer = new PrintWriter(sock.getOutputStream());
  300. writer.println(anon + ":has connected.:Connect");
  301. writer.flush();
  302. isConnected = true;
  303. }
  304. catch (Exception ex){
  305. ta_chat.append("Cannot Connect! Try Again. n");
  306. tf_username.setEditable(true);
  307. }
  308. ListenThread();
  309. } else if (isConnected == true) {
  310. ta_chat.append("You are already connected. n");
  311. }
  312. }
  313.  
  314. private void b_sendActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_b_sendActionPerformed
  315. String nothing = "";
  316. if ((tf_chat.getText()).equals(nothing)) {
  317. tf_chat.setText("");
  318. tf_chat.requestFocus();
  319. } else {
  320. try {
  321. writer.println(username + ":" + tf_chat.getText() + ":" + "Chat");
  322. writer.flush(); // flushes the buffer
  323. } catch (Exception ex) {
  324. ta_chat.append("Message was not sent. n");
  325. }
  326. tf_chat.setText("");
  327. tf_chat.requestFocus();
  328. }
  329.  
  330. tf_chat.setText("");
  331. tf_chat.requestFocus();
  332. }
  333.  
  334. public static void main(String args[]) {
  335. java.awt.EventQueue.invokeLater(new Runnable() {
  336. public void run() {
  337. new client_frame().setVisible(true);
  338. }
  339. });
  340. }
  341.  
  342. private JButton b_anonymous;
  343. private JButton b_connect;
  344. private JButton b_disconnect;
  345. private JButton b_send;
  346. private JScrollPane jScrollPane1;
  347. private JLabel lb_address;
  348. private JLabel lb_name;
  349. private JLabel lb_password;
  350. private JLabel lb_port;
  351. private JLabel lb_username;
  352. private JTextArea ta_chat;
  353. private JTextField tf_address;
  354. private JTextField tf_chat;
  355. private JTextField tf_password;
  356. private JTextField tf_port;
  357. private JTextField tf_username;
  358. // End of variables declaration//GEN-END:variables
  359. }
  360.  
  361. public class server_frame extends JFrame
  362. {
  363. ArrayList clientOutputStreams;
  364. ArrayList<String> users;
  365.  
  366. public class ClientHandler implements Runnable
  367. {
  368. BufferedReader reader;
  369. Socket sock;
  370. PrintWriter client;
  371.  
  372. public ClientHandler(Socket clientSocket, PrintWriter user)
  373. {
  374. client = user;
  375. try
  376. {
  377. sock = clientSocket;
  378. InputStreamReader isReader = new InputStreamReader(sock.getInputStream());
  379. reader = new BufferedReader(isReader);
  380. }
  381. catch (Exception ex)
  382. {
  383. ta_chat.append("Unexpected error... n");
  384. }
  385.  
  386. }
  387.  
  388. public void run() {
  389. String message, connect = "Connect", disconnect = "Disconnect", chat = "Chat" ;
  390. String[] data;
  391.  
  392. try
  393. {
  394. while ((message = reader.readLine()) != null)
  395. {
  396. ta_chat.append("Received: " + message + "n");
  397. data = message.split(":");
  398.  
  399. for (String token:data)
  400. {
  401. ta_chat.append(token + "n");
  402. }
  403.  
  404. if (data[2].equals(connect))
  405. {
  406. tellEveryone((data[0] + ":" + data[1] + ":" + chat));
  407. userAdd(data[0]);
  408. }
  409. else if (data[2].equals(disconnect))
  410. {
  411. tellEveryone((data[0] + ":has disconnected." + ":" + chat));
  412. userRemove(data[0]);
  413. }
  414. else if (data[2].equals(chat))
  415. {
  416. tellEveryone(message);
  417. }
  418. else
  419. {
  420. ta_chat.append("No Conditions were met. n");
  421. }
  422. }
  423. }
  424. catch (Exception ex)
  425. {
  426. ta_chat.append("Lost a connection. n");
  427. ex.printStackTrace();
  428. clientOutputStreams.remove(client);
  429. }
  430. }
  431. }
  432.  
  433. public server_frame()
  434. {
  435. initComponents();
  436. }
  437.  
  438. @SuppressWarnings("unchecked")
  439. // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
  440. private void initComponents() {
  441.  
  442. jScrollPane1 = new JScrollPane();
  443. ta_chat = new JTextArea();
  444. b_start = new JButton();
  445. b_end = new JButton();
  446. b_users = new JButton();
  447. b_clear = new JButton();
  448. lb_name = new JLabel();
  449.  
  450. setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
  451. setTitle("Chat - Server's frame");
  452. setName("server"); // NOI18N
  453. setResizable(false);
  454.  
  455. ta_chat.setColumns(20);
  456. ta_chat.setRows(5);
  457. jScrollPane1.setViewportView(ta_chat);
  458.  
  459. b_start.setText("START");
  460. b_start.addActionListener(new java.awt.event.ActionListener() {
  461. public void actionPerformed(java.awt.event.ActionEvent evt) {
  462. b_startActionPerformed(evt);
  463. }
  464. });
  465.  
  466. b_end.setText("END");
  467. b_end.addActionListener(new java.awt.event.ActionListener() {
  468. public void actionPerformed(java.awt.event.ActionEvent evt) {
  469. b_endActionPerformed(evt);
  470. }
  471. });
  472.  
  473. b_users.setText("Online Users");
  474. b_users.addActionListener(new java.awt.event.ActionListener() {
  475. public void actionPerformed(java.awt.event.ActionEvent evt) {
  476. b_usersActionPerformed(evt);
  477. }
  478. });
  479.  
  480. b_clear.setText("Clear");
  481. b_clear.addActionListener(new java.awt.event.ActionListener() {
  482. public void actionPerformed(java.awt.event.ActionEvent evt) {
  483. b_clearActionPerformed(evt);
  484. }
  485. });
  486.  
  487. lb_name.setText("TechWorld3g");
  488. lb_name.setBorder(BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0)));
  489.  
  490. GroupLayout layout = new GroupLayout(getContentPane());
  491. getContentPane().setLayout(layout);
  492. layout.setHorizontalGroup(
  493. layout.createParallelGroup(GroupLayout.Alignment.LEADING)
  494. .addGroup(layout.createSequentialGroup()
  495. .addContainerGap()
  496. .addGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING)
  497. .addComponent(jScrollPane1)
  498. .addGroup(layout.createSequentialGroup()
  499. .addGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING, false)
  500. .addComponent(b_end, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
  501. .addComponent(b_start, GroupLayout.DEFAULT_SIZE, 75, Short.MAX_VALUE))
  502. .addPreferredGap(LayoutStyle.ComponentPlacement.RELATED, 291, Short.MAX_VALUE)
  503. .addGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING, false)
  504. .addComponent(b_clear, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
  505. .addComponent(b_users, GroupLayout.DEFAULT_SIZE, 103, Short.MAX_VALUE))))
  506. .addContainerGap())
  507. .addGroup(GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
  508. .addContainerGap(GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
  509. .addComponent(lb_name)
  510. .addGap(209, 209, 209))
  511. );
  512. layout.setVerticalGroup(
  513. layout.createParallelGroup(GroupLayout.Alignment.LEADING)
  514. .addGroup(layout.createSequentialGroup()
  515. .addContainerGap()
  516. .addComponent(jScrollPane1, GroupLayout.DEFAULT_SIZE, 340, Short.MAX_VALUE)
  517. .addGap(18, 18, 18)
  518. .addGroup(layout.createParallelGroup(GroupLayout.Alignment.BASELINE)
  519. .addComponent(b_start)
  520. .addComponent(b_users))
  521. .addGap(18, 18, 18)
  522. .addGroup(layout.createParallelGroup(GroupLayout.Alignment.BASELINE)
  523. .addComponent(b_clear)
  524. .addComponent(b_end))
  525. .addGap(4, 4, 4)
  526. .addComponent(lb_name))
  527. );
  528.  
  529. pack();
  530. }// </editor-fold>//GEN-END:initComponents
  531.  
  532. private void b_endActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_b_endActionPerformed
  533. try
  534. {
  535. Thread.sleep(5000); //5000 milliseconds is five second.
  536. }
  537. catch(InterruptedException ex) {Thread.currentThread().interrupt();}
  538.  
  539. tellEveryone("Server:is stopping and all users will be disconnected.n:Chat");
  540. ta_chat.append("Server stopping... n");
  541.  
  542. ta_chat.setText("");
  543. }//GEN-LAST:event_b_endActionPerformed
  544.  
  545. private void b_startActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_b_startActionPerformed
  546. Thread starter = new Thread(new ServerStart());
  547. starter.start();
  548.  
  549. ta_chat.append("Server started...n");
  550. }//GEN-LAST:event_b_startActionPerformed
  551.  
  552. private void b_usersActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_b_usersActionPerformed
  553. ta_chat.append("n Online users : n");
  554. for (String current_user : users)
  555. {
  556. ta_chat.append(current_user);
  557. ta_chat.append("n");
  558. }
  559.  
  560. }//GEN-LAST:event_b_usersActionPerformed
  561.  
  562. private void b_clearActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_b_clearActionPerformed
  563. ta_chat.setText("");
  564. }//GEN-LAST:event_b_clearActionPerformed
  565.  
  566. public static void main(String args[])
  567. {
  568. java.awt.EventQueue.invokeLater(new Runnable()
  569. {
  570. @Override
  571. public void run() {
  572. new server_frame().setVisible(true);
  573. }
  574. });
  575. }
  576.  
  577. public class ServerStart implements Runnable
  578. {
  579. @Override
  580. public void run()
  581. {
  582. clientOutputStreams = new ArrayList();
  583. users = new ArrayList();
  584.  
  585. try
  586. {
  587. ServerSocket serverSock = new ServerSocket(2222);
  588.  
  589. while (true)
  590. {
  591. Socket clientSock = serverSock.accept();
  592. PrintWriter writer = new PrintWriter(clientSock.getOutputStream());
  593. clientOutputStreams.add(writer);
  594.  
  595. Thread listener = new Thread(new ClientHandler(clientSock, writer));
  596. listener.start();
  597. ta_chat.append("Got a connection. n");
  598. }
  599. }
  600. catch (Exception ex)
  601. {
  602. ta_chat.append("Error making a connection. n");
  603. }
  604. }
  605. }
  606.  
  607. public void userAdd (String data)
  608. {
  609. String message, add = ": :Connect", done = "Server: :Done", name = data;
  610. ta_chat.append("Before " + name + " added. n");
  611. users.add(name);
  612. ta_chat.append("After " + name + " added. n");
  613. String[] tempList = new String[(users.size())];
  614. users.toArray(tempList);
  615.  
  616. for (String token:tempList)
  617. {
  618. message = (token + add);
  619. tellEveryone(message);
  620. }
  621. tellEveryone(done);
  622. }
  623.  
  624. public void userRemove (String data)
  625. {
  626. String message, add = ": :Connect", done = "Server: :Done", name = data;
  627. users.remove(name);
  628. String[] tempList = new String[(users.size())];
  629. users.toArray(tempList);
  630.  
  631. for (String token:tempList)
  632. {
  633. message = (token + add);
  634. tellEveryone(message);
  635. }
  636. tellEveryone(done);
  637. }
  638.  
  639. public void tellEveryone(String message)
  640. {
  641. Iterator it = clientOutputStreams.iterator();
  642.  
  643. while (it.hasNext())
  644. {
  645. try
  646. {
  647. PrintWriter writer = (PrintWriter) it.next();
  648. writer.println(message);
  649. ta_chat.append("Sending: " + message + "n");
  650. writer.flush();
  651. ta_chat.setCaretPosition(ta_chat.getDocument().getLength());
  652.  
  653. }
  654. catch (Exception ex)
  655. {
  656. ta_chat.append("Error telling everyone. n");
  657. }
  658. }
  659. }
  660.  
  661. // Variables declaration - do not modify//GEN-BEGIN:variables
  662. private JButton b_clear;
  663. private JButton b_end;
  664. private JButton b_start;
  665. private JButton b_users;
  666. private JScrollPane jScrollPane1;
  667. private JLabel lb_name;
  668. private JTextArea ta_chat;
  669. // End of variables declaration//GEN-END:variables
  670. }
Add Comment
Please, Sign In to add comment