Advertisement
smiche

Untitled

Mar 25th, 2012
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. import it.sauronsoftware.base64.Base64;
  2.  
  3. import java.io.*;
  4. import java.net.*;
  5. import java.util.ArrayList;
  6.  
  7. public class ClientListener extends Thread {
  8.     static ArrayList<String> myArr = new ArrayList<String>();
  9.     String nickName;
  10.     static int count = 0;
  11.     public static NickName[] nicks = new NickName[20];
  12.     private ServerDispatcher mServerDispatcher;
  13.     private ClientInfo mClientInfo;
  14.     private BufferedReader mIn;
  15.     public static ClientInfo[] cInfo = new ClientInfo[20];
  16.    
  17.     public ClientListener(ClientInfo aClientInfo,
  18.             ServerDispatcher aServerDispatcher) throws IOException {
  19.         cInfo[count] = aClientInfo;
  20.         mClientInfo = aClientInfo;
  21.         mServerDispatcher = aServerDispatcher;
  22.         Socket socket = aClientInfo.mSocket;
  23.         mIn = new BufferedReader(new InputStreamReader(socket.getInputStream()));
  24.     }
  25.  
  26.     /**
  27.      * Until interrupted, reads messages from the client socket, forwards them
  28.      * to the server dispatcher's queue and notifies the server dispatcher.
  29.      */
  30.     public void run() {
  31.         try {
  32.             Socket sockete = mClientInfo.mSocket;
  33.             String senderIP = sockete.getInetAddress().getHostAddress();
  34.             String senderPort = "" + sockete.getPort();
  35.            
  36.             while (!isInterrupted()) {
  37.                
  38.                
  39.                 String message = mIn.readLine();
  40.                 if (message == null)
  41.                     break;
  42.                 message = Base64.decode(message);
  43.                 if (message.startsWith("^n")) {
  44.                     char[] nickN = new char[message.length() - 3];
  45.                     for (int i = 0; i < message.length() - 3; i++) {
  46.                         nickN[i] = message.toCharArray()[i + 3];
  47.                     }
  48.                     nickName = new String(nickN);
  49.                     boolean found = false;
  50.                     for (int d = 0; d <= count; d++) {
  51.                         if (nicks[d] != null
  52.                                 && nicks[d].getIP().equals(
  53.                                         "" + senderIP + senderPort)) {
  54.                             mServerDispatcher.dispatchMessage(mClientInfo, "c<"
  55.                                     + nicks[d].nick + "><" + nickName + ">");
  56.                             mServerDispatcher
  57.                                     .dispatchMessage(
  58.                                             mClientInfo,
  59.                                             (nicks[d].nick
  60.                                                     + " си смени ника на : " + nickName));
  61.                             nicks[d].nick = nickName;
  62.                             myArr.set(d, nickName);
  63.                             found = true;
  64.                         }
  65.                     }
  66.                     for (int d = 0; d <= count; d++) {
  67.                         if (nicks[d] != null
  68.                                 && nicks[d].getIP().equals(
  69.                                         "" + senderIP + senderPort)) {
  70.                             found = true;
  71.                         }
  72.                         if (!found && d == count) {
  73.                             mServerDispatcher.dispatchMessage(mClientInfo, "n<"
  74.                                     + nickName + ">");
  75.                             mServerDispatcher.dispatchMessage(mClientInfo,
  76.                                     nickName + " се присъедини.");
  77.                             nicks[count] = new NickName(nickName, "" + senderIP
  78.                                     + senderPort);
  79.                             myArr.add(nickName);
  80.                             count++;
  81.                             break;
  82.                         }
  83.                     }
  84.  
  85.                 }
  86.                 if (!message.startsWith("^n"))
  87.                     if (message.length() != 0) {
  88.                         for (int k = 0; k < 20; k++) {
  89.                             if (ClientListener.nicks[k] != null
  90.                                     && nicks[k].getIP().equals(
  91.                                             senderIP + senderPort)) {
  92.                                 message = ClientListener.nicks[k].getNick()
  93.                                         + " : " + message;
  94.                                 mServerDispatcher.dispatchMessage(mClientInfo,
  95.                                         message);
  96.                             }
  97.                         }
  98.                     }
  99.             }
  100.            
  101.             for(int i =0;i<count;i++){
  102.                 Socket socketz = cInfo[i].mSocket;
  103.                 String curAuth = socketz.getInetAddress().getHostAddress() + ""+ socketz.getPort();
  104.                 System.out.println(curAuth +"   " +nicks[i].getIP());
  105.                 if(cInfo[i] != null && curAuth == nicks[i].getIP()){
  106.                     for(int z =0;z<count;z++){
  107.                         mServerDispatcher.dispatchMessage(cInfo[z], "n<"
  108.                                 + nicks[i].getNick() + ">");
  109.                     }
  110.                    
  111.                 }
  112.                
  113.             }
  114.         } catch (IOException ioex) {
  115.             // when the connection is lost inbetween
  116.             Socket sockete = mClientInfo.mSocket;
  117.             String senderIP = sockete.getInetAddress().getHostAddress();
  118.             String senderPort = "" + sockete.getPort();
  119.             for (int i = 0; i < 20; i++) {
  120.                 if (nicks[i] != null
  121.                         && nicks[i].getIP().equals(senderIP + senderPort)) {
  122.                     String message = nicks[i].getNick() + " напусна.";
  123.                     mServerDispatcher.dispatchMessage(mClientInfo, "d<"
  124.                             + nicks[i].getNick() + ">");
  125.                     mServerDispatcher.dispatchMessage(mClientInfo, message);
  126.                     nicks[i] = null;
  127.                     count--;
  128.                 }
  129.  
  130.             }
  131.         }
  132.  
  133.         // Communication is broken. Interrupt both listener and sender threads
  134.         mClientInfo.mClientSender.interrupt();
  135.         mServerDispatcher.deleteClient(mClientInfo);
  136.     }
  137.  
  138. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement